热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得ppt

大家好~我开设了“深度学习基础班”的线上课程,带领同学从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
| 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): 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
}, _)


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 本文介绍了如何使用OpenXML按页码访问文档内容,以及在处理分页符和XML元素时的一些挑战。同时,还讨论了基于页面的引用框架的局限性和超越基于页面的引用框架的方法。最后,给出了一个使用C#的示例代码来按页码访问OpenXML内容的方法。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
author-avatar
奶牛还在Henry
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有