大家好~我开设了“深度学习基础班”的线上课程,带领同学从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需求分析和初步设计(中)的更多相关文章

  1. UML在需求分析与系统设计中之实战讲解

    UML在需求分析与系统设计中之实战讲解(完整UML图形演示) 小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中 ...

  2. 通过判断cookie过期方式向Memcached中添加,取出数据(Java)

    应用场景:在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够 ...

  3. js判断一个元素是否在数组中

    js判断一个元素是否在数组中 var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//循环的方式 function isInAr ...

  4. Android 如何判断指定服务是否在运行中 “Service”

    如何判断一个服务是否正在运行中: /** * 判断某个服务是否正在运行的方法 * * @param mContext * @param serviceName 是包名+服务的类名 * @return ...

  5. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  6. 【JS】【6】判断一个元素是否在数组中

    摘要: 有三种方式: 1,jquery的inArray方法 2,数组的indexOf方法 3,普通的for循环方法 正文: 1,jquery的inArray方法 /** * @param {Objec ...

  7. Java 身份证判断性别获取年龄

    import com.alibaba.fastjson.JSON; import org.junit.Test; import java.text.SimpleDateFormat; import j ...

  8. 判断一个点是否在RotatedRect中

    openCV函数pointPolygonTest(): C++: double pointPolygonTest(InputArray contour, Point2f pt, bool measur ...

  9. vuex中filter的使用 && 快速判断一个数是否在一个数组中

    vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr ...

随机推荐

  1. ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能

    一.ES7 sql新特性 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 四个字段 PUT /tvs PUT /tvs/_mapping { "properties&quo ...

  2. CSP 2021 总结

    CSP 2021 总结 PJ 开题顺序:1342 应该先做 T2 ,导致我 T2 直接看错 T1.T3 T1 :直接推规律即可,考场的想法应该正确 T3 :好家伙直接 map 走起 T2 最崩溃的来了 ...

  3. Camunda开源流程引擎快速入门——Hello World

    市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.由于jbpm.activiti.flowable这几个流程引擎出现的比较早,国内人用的 ...

  4. dubbo容错机制

    dubbo的容错机制 Failover Cluster(默认) 失败自动切换,当出现失败,重试其它服务器.通常用于读操作,但重试会带来更长延迟. Failfast Cluster 快速失败,只发起一次 ...

  5. ABP Framework 5.3.0 版本新增功能和变更说明

    ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布. 以下是本版本的新增功能: "开始"页面提供创建单层项目选项 启动模板提供 PWA 支持 Volo. ...

  6. 1.2 操作系统的第二个功能——并发功能 -《zobolの操作系统学习札记》

    1.2 操作系统的第二个功能--并发功能 目录 1.2 操作系统的第二个功能--并发功能 问1:什么是并发功能?并发功能是必要的吗? 问2:并发功能必须要求拥有多核CPU吗? 问3:多核CPU和单核C ...

  7. React技巧之检查元素是否可见

    原文链接:https://bobbyhadz.com/blog/react-check-if-element-in-viewport 作者:Borislav Hadzhiev 正文从这开始~ 总览 在 ...

  8. UiPath条件判断活动If的介绍和使用

    if的介绍 if语句是指编程语言(包括c语言.C#.Python.Java.汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一. if在UiPath中的使用 ...

  9. 细说GaussDB(DWS)复杂多样的资源负载管理手段

    摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...

  10. 常用类-LocalDate、LocalTime、LocalDateTime

    详情解释请看下方代码区 点击查看代码 @Test public void test1(){ //实例化:now()获取当前日期.时间.日期 + 时间 LocalDate localDate = Loc ...