“判断性别”Demo需求分析和初步设计(中)
大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
本节课录像回放
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本文为第二节课:“判断性别”Demo需求分析和初步设计(中)的复盘文章
本课程系列文章可进入索引查看:
深度学习基础课系列文章索引
回顾相关课程内容
- 第二节课:“判断性别”Demo需求分析和初步设计(上)
- 主问题:什么是神经元?
- 已知一个人的身高为150厘米,体重为50公斤,如何使用神经元得到该人的性别(应该为女性)?
- 什么是训练?
- 什么是推理?
主问题:什么是神经网络
已知两个人的身高和体重,能否使用神经元得到他们的性别(一男一女)?
能,因为权重、偏移为未知量,总数量为3,小于方程的数量(2),所有有无数解,所以可确定一组解(权重、偏移)如何修改代码?
修改train函数:给出一组权重、偏移,使得结果为分别为0、1;
激活函数不变已知四个人的身高和体重,能否使用神经元得到他们的性别?
不能为什么?
因为权重、偏移为未知量,总数量为3,小于方程的数量(4),所以无解如何扩展,才能有解?
使用神经网络,增加权重、偏移的数量!请设计一个最简单的神经网络?(有几层?每层有几个神经元?)

如何根据输入层的输入,最终得到输出层的输出?
计算公式如下所示:

现在有几个未知解?能够有解了吗?
有解
主问题:什么是前向传播
- “根据输入层的输入,最终得到输出层的输出?”的过程称为前向传播
- 前向传播算法包括哪些步骤?
从输入层开始,依次传入每层,得到每层的输出;
最后传到输出层,得到最后的输出
任务:用代码实现神经网络
- 请修改神经元代码,提出神经元的前向传播forward函数?
修改后的相关代码为:
Neural_forward_answer
let forward = (state: state, sampleData: sampleData): float => {
sampleData.height *. state.weight1 +.
sampleData.weight *. state.weight2 +.
state.bias->_activateFunc
}
let inference = (state: state, sampleData: sampleData): gender => {
forward(state, sampleData)->_convert
}
- 请在神经元代码的基础上,实现神经网络的前向传播和推理(训练函数不用实现)?
- 推理函数需要修改吗?
不需要 - 神经网络代码如下所示:
NeuralNetwork_answer
- 推理函数需要修改吗?
type state = {
weight13: float,
weight14: float,
weight23: float,
weight24: float,
weight35: float,
weight45: float,
bias3: float,
bias4: float,
bias5: float,
}
type sampleData = {
weight: float,
height: float,
}
type gender =
| Male
| Female
| InValid
let createState = (): state => {
weight13: Js.Math.random(),
weight14: Js.Math.random(),
weight23: Js.Math.random(),
weight24: Js.Math.random(),
weight35: Js.Math.random(),
weight45: Js.Math.random(),
bias3: Js.Math.random(),
bias4: Js.Math.random(),
bias5: Js.Math.random(),
}
// not implement
let train = (state: state, allSampleData: array<sampleData>): state => {
state
}
let _activateFunc = x => x
let _convert = x =>
switch x {
| 0. => Male
| 1. => Female
| _ => InValid
}
let forward = (state: state, sampleData: sampleData): float => {
let y3 = Neural_forward_answer.forward(
(
{
weight1: state.weight13,
weight2: state.weight23,
bias: state.bias3,
}: Neural_forward_answer.state
),
sampleData->Obj.magic,
)
let y4 = Neural_forward_answer.forward(
(
{
weight1: state.weight14,
weight2: state.weight24,
bias: state.bias4,
}: Neural_forward_answer.state
),
sampleData->Obj.magic,
)
Neural_forward_answer.forward(
(
{
weight1: state.weight35,
weight2: state.weight45,
bias: state.bias5,
}: Neural_forward_answer.state
),
(
{
weight: y3,
height: y4,
}: Neural_forward_answer.sampleData
),
)
}
let inference = (state: state, sampleData: sampleData): gender => {
Js.log(forward(state, sampleData))
forward(state, sampleData)->_convert
}
let state = createState()
let allSampleData = [
{
weight: 50.,
height: 150.,
},
{
weight: 51.,
height: 149.,
},
{
weight: 60.,
height: 172.,
},
{
weight: 90.,
height: 188.,
},
]
let state = state->train(allSampleData)
allSampleData->Js.Array.forEach(sampleData => {
inference(state, sampleData)->Js.log
}, _)
“判断性别”Demo需求分析和初步设计(中)的更多相关文章
- UML在需求分析与系统设计中之实战讲解
UML在需求分析与系统设计中之实战讲解(完整UML图形演示) 小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中 ...
- 通过判断cookie过期方式向Memcached中添加,取出数据(Java)
应用场景:在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够 ...
- js判断一个元素是否在数组中
js判断一个元素是否在数组中 var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//循环的方式 function isInAr ...
- Android 如何判断指定服务是否在运行中 “Service”
如何判断一个服务是否正在运行中: /** * 判断某个服务是否正在运行的方法 * * @param mContext * @param serviceName 是包名+服务的类名 * @return ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- 【JS】【6】判断一个元素是否在数组中
摘要: 有三种方式: 1,jquery的inArray方法 2,数组的indexOf方法 3,普通的for循环方法 正文: 1,jquery的inArray方法 /** * @param {Objec ...
- Java 身份证判断性别获取年龄
import com.alibaba.fastjson.JSON; import org.junit.Test; import java.text.SimpleDateFormat; import j ...
- 判断一个点是否在RotatedRect中
openCV函数pointPolygonTest(): C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measur ...
- vuex中filter的使用 && 快速判断一个数是否在一个数组中
vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr ...
随机推荐
- RocketMQ的基本使用
第一步导入依赖: <!--Springboot 集成 RocketMQ依赖--> <dependency> <groupId>org.apache.rocketmq ...
- 学了WEB缓冲投毒-挖SRC的时候咋利用
学了WEB缓冲投毒-挖SRC的时候咋利用 昨天发了哥WEB缓存投毒的学习文章,但是除了理论和训练营并无实践,正巧翻到了一篇文章,感觉还有点关系,转的一个国外的老哥的文章. 微信公众号:小惜渗透,欢迎大 ...
- 在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在进行项目开发的时候,刚好需要用到对字符串表达式进行求值的处理场景,因此寻找了几个符合要求的第三方组件LambdaParser.DynamicExpresso.Z.Expressions,它们各自功能 ...
- 获取mybatis注解方式新增数据时非自增插入的主键
场景:插入数据的时候,获取不到非自增的主键.原因:对象中没有主键的值,插入后主键才有值. 解决方案:使用 @SelectKey @SelectKey中: statement是要运行的SQL语句,即查询 ...
- 深入理解springboot的自动注入
一.开篇 在平时的开发过程中用的最多的莫属springboot了,都知道springboot中有自动注入的功能,在面试过程中也会问到自动注入,你知道自动注入是怎么回事吗,springboot是如何 ...
- WPF第三方控件,只能输入数字型数据
话不多说,根据最近项目需求,为了减少输入验证等相关代码量,需要此控件 先上效果图 默认样式是这样,自己可以根据需求修改外形,但我更喜欢它自带的简洁版 有人可能会问怎么实现的呢?其实很简单,我们设置它的 ...
- 0016:单源最短路径(dijkstra算法)
题目链接:https://www.luogu.com.cn/problem/P4779 题目描述:给定一个 n 个点,m 条有向边的带非负权图,计算从 s 出发,到每个点的距离. 这道题就是一个单源最 ...
- C#金额数字转换中文繁体
/// <summary> /// 数字转换中文繁体金钱 /// </summary> /// <param name="Digital">&l ...
- 关于ios的IDFA
了解IDFA,看我这篇文章就够了双11剁手后,我静静的限制了广告追踪 今年双11爆了,据统计,全天交易额1207亿,移动端占比82%,在马云的持续教育和移动端的爆发下,用户在移动端消费的习惯已经不可逆 ...
- 牛客SQL刷题第一趴——非技术入门基础篇
user_profile表: id device_id gender age university province 1 2138 male 21 北京大学 Beijing 2 3214 male ...