tnblog
首页
视频
资源
登录

python 神经网络隐藏层学习笔记

3188人阅读 2023/4/18 15:16 总访问:3475747 评论:0 收藏:0 手机
分类: AI

python 神经网络隐藏层学习笔记

回顾上节


关于我们对与豆豆的分类毒性,我们可以使用Logistic函数对豆豆的毒性进行分类,但是如果豆豆大到一定的程度它没有毒性了那么单一的Logistic函数就没啥用了,如下图所示。


单个的不行,我们可以使用多个Logistic函数来解决这个问题。
像这样:


这个时候我们就需要将第一个神经元(x+偏置项b1_1),通过线性函数的计算再通过激活函数得到最终的输出,再利用梯度下降算法得出Logistic函数的样子。
第二个神经元同样如此(x+偏置项b2_1)。


把这两个的输出作为第三个神经元的输入(x+偏置项b1_2),求和之后会得出这样的值,再通过梯度下降这就是我们想要的结果。

什么是隐藏层?


举例:当我们输入到不同的维度(神经元)中每个维度通过不断的调整权重进行激活,得出不一样的结果最后再进行合并降维得到输出。通过输入的更多抽象维度产生更多的解读而实现更加复杂的分类效果,而中间这些新添加的神经元节点也称为隐藏层


显而易见的是隐藏层越多思考得就越复杂,计算量也就随之越来越大。
到后面我们还会添加纵向的神经元添加更深的隐藏层。


当我们的神经层有三个以上,就被称之为深度网络模型。

代码实践


豆豆毒性生成。

  1. import numpy as np
  2. def get_beans3(counts):
  3. xs = np.random.rand(counts)*2
  4. xs = np.sort(xs)
  5. ys = np.zeros(counts)
  6. for i in range(counts):
  7. x = xs[i]
  8. yi = 0.7*x+(0.5-np.random.rand())/50+0.5
  9. if yi > 0.8 and yi < 1.4:
  10. ys[i] = 1
  11. return xs,ys

  1. import dataset
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from mpl_toolkits.mplot3d import Axes3D
  5. m = 100
  6. # 获取100个豆豆
  7. xs,ys = dataset.get_beans3(m)
  8. plt.title("Size-Toxicity Function",fontsize=12)
  9. plt.xlabel("Bean Size")
  10. plt.ylabel("Toxicity")
  11. plt.scatter(xs,ys)
  12. # sigmoid 函数 1/(1+e^-x)
  13. def sigmoid(x):
  14. return 1/(1+np.exp(-x))
  15. # 第一层
  16. # 第一个神经元 使用随机数
  17. w11_1 = np.random.rand()
  18. b1_1 = np.random.rand()
  19. # 第二个神经元
  20. w12_1 = np.random.rand()
  21. b2_1 = np.random.rand()
  22. # 第二层
  23. # 第一个神经元
  24. w11_2 = np.random.rand()
  25. w21_2 = np.random.rand()
  26. b2_2 = np.random.rand()
  27. b1_2 = np.random.rand()
  28. def forward_propgation(xs):
  29. # 前向传播
  30. # 使用函数进行前向传播过程。
  31. # 第一层第一个求出预测值
  32. z1_1 = w11_1 * xs + b1_1
  33. a1_1 = sigmoid(z1_1)
  34. # 第一层第二个求出预测值
  35. z2_1 = w12_1 * xs + b2_1
  36. a2_1 = sigmoid(z2_1)
  37. # 第二层第一个求出预测值
  38. z1_2 = w11_2 * a1_1 + w21_2 * a2_1 + b1_2
  39. a1_2 = sigmoid(z1_2)
  40. return a1_2,z1_2,a2_1,z2_1,a1_1,z1_1
  41. a1_2,z1_2,a2_1,z2_1,a1_1,z1_1 = forward_propgation(xs)
  42. plt.plot(xs,a1_2)
  43. plt.show()
  44. for _ in range(5000):
  45. for i in range(100):
  46. # 获取散点的值
  47. x = xs[i]
  48. y = ys[i]
  49. # 首先获取前向传播获取结果 ,输入单个样本
  50. a1_2,z1_2,a2_1,z2_1,a1_1,z1_1 = forward_propgation(x)
  51. # 反向传播(求导)
  52. # 误差代价函数e
  53. e = (y - a1_2)**2
  54. # 第二层第一个
  55. # e对a1_2的求导 de/da = -2(y-a)
  56. deda1_2 = -2*(y-a1_2)
  57. # a1_2对z1_2的求导 da/dz = a(1-a)
  58. da1_2dz1_2 = a1_2*(1-a1_2)
  59. # dz/dw的求导,过程是这样的z = wx + b,那么x就是它导数
  60. # 举例:dz1_2dw11_2 = w11_2a1_1 + b1_2 = a1_1
  61. dz1_2dw11_2 = a1_1
  62. dz1_2dw21_2 = a2_1
  63. # de/dw的求导,de/da * da/dz * dz/dw = de/dw
  64. dedw11_2 = deda1_2 * da1_2dz1_2 * dz1_2dw11_2
  65. dedw21_2 = deda1_2 * da1_2dz1_2 * dz1_2dw21_2
  66. # dz/db的求导 z = wx + b,一介函数dz/db的求导为1
  67. dz1_2db1_2 = 1
  68. # de/db的求导 de/da * da/dz * dz/db = de/db
  69. dedb1_2 = deda1_2 * da1_2dz1_2 * dz1_2db1_2
  70. # 第一层的第一个的
  71. # dz1_2对da1_1求导 过程是这样的z = wx + b,所以dz1_2对da1_1求导的话结果是w11_2
  72. dz1_2da1_1 = w11_2
  73. # a1_1对dz1_1的求导 da/dz = a(1-a)
  74. da1_1dz1_1 = a1_1*(1-a1_1)
  75. # dz1_1对dw11_1的求导
  76. dz1_1dw11_1 = x
  77. # 这样就求到了第二层第一个神经元对第一层第一个神经元的dw11_1求导
  78. dedw11_1 = deda1_2 * da1_2dz1_2 * dz1_2da1_1 * da1_1dz1_1 * dz1_1dw11_1
  79. # dz/db的求导 z = wx + b,一介函数dz/db的求导为1
  80. dz1_1db1_1 = 1
  81. # 这样就求到了第二层第一个神经元对第一层第一个神经元的db1_1求导
  82. dedb1_1 = deda1_2 * da1_2dz1_2 * dz1_2da1_1 * da1_1dz1_1 * dz1_1db1_1
  83. # 第一层的第二个的
  84. dz1_2da2_1 = w21_2
  85. da2_1dz2_1 = a2_1*(1-a2_1)
  86. dz2_1dw12_1 = x
  87. dedw12_1 = deda1_2 * da1_2dz1_2 * dz1_2da2_1 * da2_1dz2_1 * dz2_1dw12_1
  88. d2_1db2_1 = 1
  89. dedb2_1 = deda1_2 * da1_2dz1_2 * dz1_2da2_1 * da2_1dz2_1 * d2_1db2_1
  90. # 使用梯度下降进行计算 y = y - alpha * w
  91. alpha = 0.03
  92. b1_2 = b1_2 - alpha * dedb1_2
  93. b1_1 = b1_1 - alpha * dedb1_1
  94. b2_1 = b2_1 - alpha * dedb2_1
  95. w11_1 = w11_1 - alpha * dedw11_1
  96. w12_1 = w12_1 - alpha * dedw12_1
  97. w11_2 = w11_2 - alpha * dedw11_2
  98. w21_2 = w21_2 - alpha * dedw21_2
  99. if _ %100 == 0:
  100. # 清空窗口
  101. plt.clf()
  102. plt.scatter(xs,ys)
  103. a1_2,z1_2,a2_1,z2_1,a1_1,z1_1 = forward_propgation(xs)
  104. plt.plot(xs,a1_2)
  105. # 暂停0.01秒,不暂停看不到绘制图
  106. plt.pause(0.01)


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:[&#39;tom&#39;,‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---&gt; https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s=&quot;&lt;div&gt;jsdlfjsl&lt;/div&gt;&quot; #html编...
这一世以无限游戏为使命!
排名
2
文章
636
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术