“判断性别”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 ...
随机推荐
- python PIL 图片素描化
from PIL import Image import numpy as np a = np.asarray(Image.open("D://7.jpg").convert('L ...
- java类的学习
什么是类: 类=属性+方法 属性来源于状态(以变量的形式存在):方法来源于动作: *属性对应的是数据,而数据只能存在变量中. 方法内的变量为局部变量:类体中的变量称为成员变量(也称为属性) java中 ...
- AspNetCore&云效Flow持续集成
如今有了越来越多的持续集成工具,给的个人开发者的福利也是很足了,如无必要,自建工具有时只是作为练手了. 众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都推出了持续集成,甚至是一定条件内都是 ...
- RPA人力资源简历筛选机器人
简历自动筛选及分析机器人,支持前程无忧.猎聘 1.自动登录招聘网站 2.自动填充简历筛选条件 3.RPA依次读取所筛选的简历信息 4.自动将简历数据复制到本地文档中 5.完成简历信息收集及分析表 6. ...
- ctfshow的web入门171
web入门171 看到这个查询语句,我们可以进行相关操作 $sql = "select username,password from user where username !='flag' ...
- Vue模板解析
mustcache 什么是模板引擎 模板引擎是将数据变为视图的最优雅的解决方案 数据 [ {"name":"小明","age":12,&qu ...
- Linux关闭avahi-daemon服务
avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程. 该服务可以为Zeroconf网络实现DNS服务发现及DNS组播规范. ...
- Spring和SpringMVC整合及关系
SpringMVC扼要的讲,就是控制请求和处理.有必要将Spring和SpringMVC整合,否则仅配置SpringMVC并完成Spring的功能,会造成业务逻辑混乱. 简要总结:①原理:采用监听器, ...
- CSS Houdini:用浏览器引擎实现高级CSS效果
vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...
- antd vue 折叠面板 v-for 循环点击无效
问题描述 实现一个折叠面板点击展开,但是必须点击两次才能展开,第一次无效 <a-collapse-panel v-for="(item, index) in dataMap" ...