“判断性别”Demo需求分析和初步设计(中)

博客 分享
0 196
张三
张三 2022-08-24 08:03:32
悬赏:0 积分 收藏

“判断性别”Demo需求分析和初步设计(中)

大家好~本文为第二节课:“判断性别”Demo需求分析和初步设计(中)的复盘文章

大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序

线上课程资料:
本节课录像回放
加QQ群,获得ppt等资料,与群主交流讨论:106047770

本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章

本文为第二节课:“判断性别”Demo需求分析和初步设计(中)的复盘文章

本课程系列文章可进入索引查看:
深度学习基础课系列文章索引

目录
  • 回顾相关课程内容
  • 主问题:什么是神经网络
  • 主问题:什么是前向传播
    • 任务:用代码实现神经网络

回顾相关课程内容

  • 第二节课:“判断性别”Demo需求分析和初步设计(上)
    • 主问题:什么是神经元?
    • 已知一个人的身高为150厘米,体重为50公斤,如何使用神经元得到该人的性别(应该为女性)?
    • 什么是训练?
    • 什么是推理?

主问题:什么是神经网络

  • 已知两个人的身高和体重,能否使用神经元得到他们的性别(一男一女)?
    能,因为权重、偏移为未知量,总数量为3,小于方程的数量(2),所有有无数解,所以可确定一组解(权重、偏移)

  • 如何修改代码?
    修改train函数:给出一组权重、偏移,使得结果为分别为0、1;
    激活函数不变

  • 已知四个人的身高和体重,能否使用神经元得到他们的性别?
    不能

  • 为什么?
    因为权重、偏移为未知量,总数量为3,小于方程的数量(4),所以无解

  • 如何扩展,才能有解?
    使用神经网络,增加权重、偏移的数量!

  • 请设计一个最简单的神经网络?(有几层?每层有几个神经元?)
    image

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

  • 现在有几个未知解?能够有解了吗?
    有解

主问题:什么是前向传播

  • “根据输入层的输入,最终得到输出层的输出?”的过程称为前向传播
  • 前向传播算法包括哪些步骤?
    从输入层开始,依次传入每层,得到每层的输出;
    最后传到输出层,得到最后的输出

任务:用代码实现神经网络

  • 请修改神经元代码,提出神经元的前向传播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  | InValidlet 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 implementlet train = (state: state, allSampleData: array<sampleData>): state => {  state}let _activateFunc = x => xlet _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}, _)
posted @ 2022-08-24 07:57 杨元超 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员