深度学习(6)构造简单的神经网络
目录
一、激励函数
二、创建数组(初始输入和输出)
三、更新权重
1、创建权重(w0和w1)
2、限值(-1~1)
3、正向传播
4、反向传播
4-1、求l2差错
4-2、求l1差错
五、更新权重
总代码
一、激励函数
# 激励函数
def Sigmoid(x, deriv = False):# 反向传播if deriv == True:return x*(x-1) #求导# 正向传播else:return 1/(1+np.exp(-x)) #1/[1+e^(-x)]
二、创建数组(初始输入和输出)
# 创建数组(输入参数、标签)x, y = Create_Array()
# 创建数组(输入和标签)
def Create_Array():# 输入# (这里有5个数据,3个特征)x = np.array([[0, 0, 1],[0, 1, 1],[1, 0, 1],[1, 1, 1],[0, 0, 1]])print(x.shape)# 标签(类别标签)# 这里有5个标签(对应5个数据),共2种标签y = np.array([[0],[1],[1],[0],[0]])print(y.shape)return x,y
三、更新权重
1、创建权重(w0和w1)
# 1、创建w0和w1w0 = np.random.random((3, 4)) #3:输入特征有3个 4:神经元数量w1 = np.random.random((4, 1)) #4:输入特征4个 1:神经元数量(输出特征)
可以看出来它的取值在0~1,我们想把它限制在-1~1。
2、限值(-1~1)
# 2、限值在-1~1(本来是0~1)w0 = w0 * 2 - 1w1 = w1 * 2 - 1
3、正向传播
矩阵:例如w0[3,4],可以理解为:前面输入为3,后面输出为4。
# 3、正向传播l0 = x #输入层(第一层)l1 = Sigmoid(np.dot(l0, w0)) #中间层(第二层)l2 = Sigmoid(np.dot(l1, w1)) #输出层(第三层)
4、反向传播
矩阵:例如w0[3,4],可以理解为:前面输入为3,后面输出为4。
4-1、求l2差错
l2误差 = l2值 - 预期值
# l2l2_loss = l2 - y # l2误差(损失)(预测值和真实值的差)l2_delta = l2_loss * Sigmoid(l2, deriv=True) # l2每个样本错了多少
4-2、求l1差错
l1误差 = l2误差 * w1转置
# l1l1_loss = l2_delta.dot(w1.T) # l1误差(损失)(l2差错矩阵*w1转置)l1_delta = l2_loss * Sigmoid(l2, deriv=True) # l1每个样本错了多少
五、更新权重
w1 -= l1转置 * l2差错
w0 -= l0转置 * l1差错
# 5、更新权重:w1和w0w1 -= l1.T.dot(l2_delta)w0 -= l0.T.dot(l1_delta)
#每10000次打印一次(观察优化效果)if i%10000 == 0:print('w1:', w1)print('w0', w0)print('---------------------------------------------')
观察优化效果:
误差: [[ 0.32966685][-0.67656896][-0.66531841][ 0.32919543][ 0.32966685]]
w1: [[ 0.12175521][-0.31912182][-0.25200495][-0.81755089]]
w0 [[-0.92863401 0.44797085 -0.13338118 -0.47594584][ 0.18454401 0.58964472 0.20720542 -0.15294761][-0.75583748 -0.05354275 0.88698458 0.44581214]]
---------------------------------------------
误差: [[ 9.99991933e-01][-7.32072362e-06][-9.10900613e-06][ 9.99991930e-01][ 9.99991933e-01]]
w1: [[2.69487986][2.64026488][3.62495426][3.06034898]]
w0 [[-0.74974059 0.62686427 0.04551225 -0.29705242][ 0.40014002 0.80524073 0.42280143 0.0626484 ][ 2.92079498 3.62308971 4.56361704 4.1224446 ]]
---------------------------------------------
误差: [[ 9.99995932e-01][-3.69171529e-06][-4.46189795e-06][ 9.99996035e-01][ 9.99995932e-01]]
w1: [[2.85382632][2.80498355][3.79129229][3.22544424]]
w0 [[-0.69432892 0.68227594 0.10092392 -0.24164074][ 0.45555183 0.86065254 0.47821324 0.11806021][ 3.08851435 3.79080908 4.73133641 4.29016397]]
---------------------------------------------
误差: [[ 9.99997276e-01][-2.47455531e-06][-2.94423290e-06][ 9.99997376e-01][ 9.99997276e-01]]
w1: [[2.94760072][2.90159829][3.88874508][3.3222891 ]]
w0 [[-0.66229777 0.71430709 0.13295506 -0.2096096 ][ 0.48758301 0.89268372 0.51024442 0.15009139][ 3.18666302 3.88895776 4.82948508 4.38831264]]
---------------------------------------------
误差: [[ 9.99997951e-01][-1.86322517e-06][-2.19361346e-06][ 9.99998039e-01][ 9.99997951e-01]]
w1: [[3.01447732][2.97028531][3.95798219][3.39113988]]
w0 [[-0.63969395 0.73691091 0.15555889 -0.18700578][ 0.51018686 0.91528756 0.53284826 0.17269523][ 3.25635009 3.95864483 4.89917215 4.45799971]]
---------------------------------------------
误差: [[ 9.99998358e-01][-1.49514816e-06][-1.74651365e-06][ 9.99998435e-01][ 9.99998358e-01]]
w1: [[3.06653951][3.02364596][4.01174561][3.44462675]]
w0 [[-0.62221616 0.7543887 0.17303668 -0.16952798][ 0.52766466 0.93276537 0.55032607 0.19017304][ 3.31043959 4.01273433 4.95326165 4.51208921]]
可以发现误差在不断减小,说明我们的神经网络优化起了效果。
总代码
# 简单的神经网络
import numpy as np# 激励函数
def Sigmoid(x, deriv = False):# 反向传播if deriv == True:return x*(x-1) #求导# 正向传播else:return 1/(1+np.exp(-x)) #1/[1+e^(-x)]# 创建数组(输入和标签)
def Create_Array():# 输入# (这里有5个数据,3个特征)x = np.array([[0, 0, 1],[0, 1, 1],[1, 0, 1],[1, 1, 1],[0, 0, 1]])print(x.shape)# 标签(类别标签)# 这里有5个标签(对应5个数据),共2种标签y = np.array([[0],[1],[1],[0],[0]])print(y.shape)return x,y# 更新权重
def Update_Weight(x, y):# 1、创建w0和w1w0 = np.random.random((3, 4)) #3:输入特征有3个 4:神经元数量w1 = np.random.random((4, 1)) #4:输入特征4个 1:神经元数量(输出特征)# 2、限值在-1~1(本来是0~1)w0 = w0 * 2 - 1w1 = w1 * 2 - 1# 遍历for i in range(60000):# 3、正向传播l0 = x #输入层(第一层)l1 = Sigmoid(np.dot(l0, w0)) #中间层(第二层)l2 = Sigmoid(np.dot(l1, w1)) #输出层(第三层)# 4、反向传播# l2l2_loss = l2 - y # l2误差(损失)(预测值和真实值的差)l2_delta = l2_loss * Sigmoid(l2, deriv=True) # l2每个样本错了多少# l1l1_loss = l2_delta.dot(w1.T) # l1误差(损失)(l2差错矩阵*w1转置)l1_delta = l2_loss * Sigmoid(l2, deriv=True) # l1每个样本错了多少# 5、更新权重:w1和w0w1 -= l1.T.dot(l2_delta)w0 -= l0.T.dot(l1_delta)#每10000次打印一次(观察优化效果)if i%10000 == 0:print('误差:', l2_loss)print('w1:', w1)print('w0', w0)print('---------------------------------------------')if __name__ == '__main__':# 创建数组(输入参数、标签)x, y = Create_Array()# 更新权重Update_Weight(x, y)
以后深度学习,一般不会自己写,一般都是用别人写好的框架,比如caffe、tensorflow等等框架。
深度学习(6)构造简单的神经网络相关推荐
- 深度学习笔记其五:卷积神经网络和PYTORCH
深度学习笔记其五:卷积神经网络和PYTORCH 1. 从全连接层到卷积 1.1 不变性 1.2 多层感知机的限制 1.2.1 平移不变性 1.2.2 局部性 1.3 卷积 1.4 "沃尔多在 ...
- 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇
学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...
- 深度学习小白专场之循环神经网络和递归神经网络
深度学习小白专场之循环神经网络和递归神经网络 全连接神经网络和卷积神经⽹网络,都只能单独的去处理单个的输入,且前后的输入之间毫无关系.但是在一些任务中,我们需要更好的去处理序列的信息,即前后的输⼊之间 ...
- 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战 神经网络(neual networks)是人工智能研究领域的一部分,当前最流行的神经网络 ...
- Keras深度学习实战(3)——神经网络性能优化技术详解
Keras深度学习实战(3)--神经网络性能优化技术详解 0. 前言 1. 缩放输入数据集 1.1 数据集缩放的合理性解释 1.2 使用缩放后的数据集训练模型 2. 输入值分布对模型性能的影响 3. ...
- Keras深度学习实战(1)——神经网络基础与模型训练过程详解
Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...
- 为什么深层神经网络难以训练_深度学习与统计力学(III) :神经网络的误差曲面...
谷歌和斯坦福最新合作综述报告,发表在物理学的顶级期刊"凝聚态物理年鉴"(Annual Review of Condensed Matter Physics).作者Yasaman B ...
- (深度学习)构造属于你自己的Pytorch数据集
(深度学习)构造属于你自己的Pytorch数据集 1.综述 2.实现原理 3.代码细节 4.详细代码 综述 Pytorch可以说是一个非常便利的深度学习库,它甚至在torchvision.datase ...
- 深度学习与计算机视觉教程(4) | 神经网络与反向传播(CV通关指南·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech/article-d ...
- [深度学习概念]·深度学习进行语音识别-简单语音处理
深度学习进行语音识别-简单语音处理 吴恩达教授曾经预言过,当语音识别的准确度从95%提升到99%的时候,它将成为与电脑交互的首要方式. 下面就让我们来学习与深度学习进行语音室识别吧! 机器学习并不总是 ...
最新文章
- Laravel 7发行说明
- [学习笔记]树链剖分
- C# json解析字符串总是多出双引号_Python小白必备知识:Python字符串详解
- linux 命令 echo 使用说明
- php ibm mq,php linux IBM MQ安装以及php对接
- nginx系列之八:使用upsync模块实现负载均衡
- python怎么输出表格中随机数_python 输出一个随机数
- 微课|中学生可以这样学Python(2.2.3节):in和is
- SEO优化:如何挖掘谷歌关键词-实例讲解(2022最新)
- Scrapy 抓取 当当图书2018畅销榜的所有图书
- 明尼苏达双城计算机科学硕士申请截止日期,明尼苏达大学双城分校计算机科学理学硕士研究生申请要求及申请材料要求清单...
- Android 自定义View漫飞舞超炫超浪漫特效
- .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
- J_101.Java工程Properties配置文件注释中文,会自动转换为其他编码方式问题解决
- 树莓派制作路由器,手机连接wifi
- BI项目实施为什么成功率那么低
- 免费开源的图片修复工具Lama Cleaner
- 511遇见易语言API模块进程创建CreateProcess
- python画pr曲线_python 画函数曲线示例
- DedeCms的SEO优化全攻略
热门文章
- Android 编译源码 注意事项
- Android @id和@+id 以及 @android:id 的区别
- Kotlin let、with、run、apply、also函数的使用
- Unable to inject views for 包名.activity
- 洛谷P1092 虫食算
- ASP.NET MVC 2示例Tailspin Travel
- 在Ubuntu18.04上安装opencv 3.4.1
- [SDOI2009]晨跑
- 第一段冲刺_个人总结_5.2
- RAID详解[RAID0/RAID1/RAID10/RAID5]