Python 在随机梯度下降模式下,是什么导致梯度和总误差增加?
我试图理解神经网络学习背后的直觉。我理解它背后的数学原理,并且已经试着用分析的方法来解决它。在用Python 在随机梯度下降模式下,是什么导致梯度和总误差增加?,python,numpy,deep-learning,neural-network,mlp,Python,Numpy,Deep Learning,Neural Network,Mlp,我试图理解神经网络学习背后的直觉。我理解它背后的数学原理,并且已经试着用分析的方法来解决它。在用Python从头开始编写多层感知器时,我面临着总错误增加的问题。我已经评论了我的代码,解释了操作,还发布了三种不同培训方案的结果输出和图表。此外,我尽可能使用NumPy向量运算来减少代码 摘要: 主要方法包含使用随机梯度下降方法生成二进制计算数据的代码,以及密集类对象及其训练模型的方法 网络有三个层次;输入(4个节点)、隐藏层(6个节点)和输出(2个节点) 密集类是网络中一层的实现 密集类表示ML
Python
从头开始编写多层感知器时,我面临着总错误增加的问题。我已经评论了我的代码,解释了操作,还发布了三种不同培训方案的结果输出和图表。此外,我尽可能使用NumPy
向量运算来减少代码
摘要:
- 主要方法包含使用随机梯度下降方法生成二进制计算数据的代码,以及密集类对象及其训练模型的方法
- 网络有三个层次;输入(4个节点)、隐藏层(6个节点)和输出(2个节点)
- 密集类是网络中一层的实现
MLP网络中的一个层
:
包含以下内容:
- 构造函数:随机初始化权重和偏差
- 乙状结肠法:激活层的线性组合或激活电位
- d_sigmoid方法:求sigmoid的第一个微分的值
- 前向传递方法:执行层的前向传播
- 反向传递方法:执行层反向传播的方法
#为向量操作导入numpy
将numpy作为np导入
np.随机种子(78)
类密度()
def_uuuinit_uuu(自、n_输入、n_节点):
#与所有n_节点关联的n_输入和突触输入的权重
#权重矩阵中的每一列都是与一个神经元相关联的权重向量
self.weights=np.random.uniform(低=0,高=1,大小=n个输入*n个节点)。重塑(n个输入,n个节点)
#与每个神经元、形状相关的偏差(1,n_节点)
#有n_节点列,每个节点代表与层中一个神经元相关的偏差
#这个一维数组将被添加到所有神经元的线性组合中
#假设与偏差相关的突触连接为“1”
自偏压=np.ones(n_节点)
def乙状结肠(自身):
#激活激活电位->ndarray
#将激活的ndarry保存到输出,因为我稍后需要它
自我输出=1/(1+np.exp(-自我激活电位))
返回自我输出
def d_乙状结肠(自身):
#激活电位的推导->Ndaray(对于所有神经元,激活电位的第一微分尾激活函数值)
#将用于局部坡度计算
#形状的向量值(n_节点)
返回自输出*(1-自输出)
def前进_通道(自身,输入):
#计算电流层神经元的激活电位->Ndaray
#这是输入乘以权重加上一个偏差
#将其存储到激活电位
自激活电位=np点(自权重T,输入)+自偏压
#通过调用激活激活电位的sigmoid()返回层的输出
返回self.sigmoid()
def后向传递(自我、学习速率、输入到层、目标、,
上一个位置梯度=[],上一个权重=[]):
#此方法中的术语“前一层”是调用此方法的当前层旁边的一个lyer,因为此bakward信号从输出层传输到输入层
#input_to_layer:表示调用此方法的当前层的输入数组
#目标:表示目标经过一次热编码后的数据数组
#prev_loc_grads:当前层旁边的层的局部梯度,我称之为previous,因为这是反向传播,流从输出层传播到输入层
#prev_weights:当前层旁边的层的权重矩阵,我称之为previous,因为信号流是反向的
#没有先前的局部渐变意味着使用输出层对象调用backwardpass
如果不是len(上一级):
#在输出层,每个节点的局部梯度是该节点处的误差*激活函数的导数
#节点处的错误为(预测-实际值)
#下一行对两个数组(预测数组和期望数组)执行元素相减
self.error\u位于\u end\u节点=self.outputs-目标
#计算局部梯度
self.loc_渐变=self.error_在_端点_节点处*self.d_sigmoid()
其他:
#隐藏层中节点的局部梯度为(激活的导数*所有的总和(前一层神经元的局部梯度*与这些神经元的突触连接相关的wight)
#计算所有的总和(前一层神经元的局部梯度*与这些神经元的突触连接相关的wights)
温度=np.零(上一个权重形状[0])
对于范围内的i(先前位置梯度尺寸):
温度+=上一个位置梯度[i]*上一个权重[:,i]
#隐藏层的局部梯度
self.loc_梯度=self.d_sigmoid()*温度
#根据学习速率、局部梯度和层的输入更新权重
self.weights=self.weights+(学习速率*np.outer(输入到层,self.loc\u梯度))
#_到_层的输入被定义为偏差(概念上)乘以固定激活为1的神经元的输入
自偏差=自偏差+学习率*自定位梯度
返回自权重、自偏差
包含训练循环和训练数据的主代码:
从sklearn.dataset导入mak
In Main .. Starting ..
Training Data: (X) : [[-0.26390333 -0.12430637 -0.38741338 0.20075948]
[ 0.63580037 -1.05223163 -0.58551008 0.68911107]
[-0.54448011 0.08334418 -0.4174701 0.11937366]
[ 0.22123838 -0.54513245 -0.40486294 0.39508491]
[-0.3489578 -0.2067747 -0.55992358 0.30225496]
[ 0.46346633 0.29702914 0.76883225 -0.42087526]
[ 0.05631264 0.04373764 0.10200898 -0.05777301]
[ 0.19738736 -0.26007568 -0.10694419 0.15615838]
[ 0.12548086 -0.17220663 -0.07570972 0.10523554]
[-0.52398487 1. 0.63178402 -0.68315832]]
Taraining Data: (y): [0 1 0 1 0 1 1 1 0 0]
Targets after One Hot Encoding: [[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[0. 1.]
[0. 1.]
[1. 0.]
[1. 0.]]
----------------------------Layer 1-------------------------
Created Only Hidden Layer: N_nodes: 6 , N_inputs: 4
----------------------------Layer 2-------------------------
Created Output Layer: N_nodes: 2 , N_inputs: 6
--------------------------Epoch: 1-------------------------
In Main .. Starting ..
Training Data: (X) : [[-0.26390333 -0.12430637 -0.38741338 0.20075948]
[ 0.63580037 -1.05223163 -0.58551008 0.68911107]
[-0.54448011 0.08334418 -0.4174701 0.11937366]
[ 0.22123838 -0.54513245 -0.40486294 0.39508491]
[-0.3489578 -0.2067747 -0.55992358 0.30225496]
[ 0.46346633 0.29702914 0.76883225 -0.42087526]
[ 0.05631264 0.04373764 0.10200898 -0.05777301]
[ 0.19738736 -0.26007568 -0.10694419 0.15615838]
[ 0.12548086 -0.17220663 -0.07570972 0.10523554]
[-0.52398487 1. 0.63178402 -0.68315832]]
Taraining Data: (y): [0 1 0 1 0 1 1 1 0 0]
Targets after One Hot Encoding: [[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[1. 0.]
[0. 1.]
[0. 1.]
[0. 1.]
[1. 0.]
[1. 0.]]
----------------------------Layer 1-------------------------
Created Only Hidden Layer: N_nodes: 6 , N_inputs: 4
----------------------------Layer 2-------------------------
Created Output Layer: N_nodes: 2 , N_inputs: 6
--------------------------Epoch: 1-------------------------
--------------------------Epoch: 2-------------------------
--------------------------Epoch: 3-------------------------
--------------------------Epoch: 4-------------------------
--------------------------Epoch: 5-------------------------
--------------------------Epoch: 6-------------------------
--------------------------Epoch: 7-------------------------
--------------------------Epoch: 8-------------------------
--------------------------Epoch: 9-------------------------
--------------------------Epoch: 10-------------------------
In Main .. Starting ..
Training Data: (X) : [[ 0.10845729 0.03110484 -0.10935314 -0.01435112]
[-0.27863109 -0.17048214 -0.04769305 0.04802046]
[-0.10521553 -0.07933533 -0.07228399 0.01997508]
...
[-0.25583767 -0.24504791 -0.36494096 0.0549903 ]
[ 0.06933997 -0.29438308 -1.21018002 0.02951967]
[-0.02084834 0.06847175 0.29115171 -0.00640819]]
Taraining Data: (y): [1 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 0 1 1 0 0 1 1 1 0
1 1 0 0 1 0 0 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0
1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 0 0 1 0 1
0 0 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 0 1 1 1 1 0 0 1 0 0 1 1
1 0 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0
0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 1
0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 0 1 0 0
1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0 0 0 0 1 1 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0
1 0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0 1 0 0
0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0 1 1 0 1 0 0
1 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0 1 1 0
1 1 0 0 1 0 1 1 0 0 0 0 0 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0 1 1 1 1 0 1 0 0 1
0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 1
0 0 1 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1
1 1 1 1 1 0 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 0
0 1 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0
1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 0 0
1 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1 0 1 1
1 1 1 1 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 1 0 0 1 0
1 0 1 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0
1 0 0 1 1 0 1 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 1 1 0 1 0 0 0 1 1 0 0 0 0
0 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0
0 1 1 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 1
0 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 1 1 1
1 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1
1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 0
0]
Targets after One Hot Encoding: [[0. 1.]
[1. 0.]
[1. 0.]
...
[1. 0.]
[1. 0.]
[1. 0.]]
----------------------------Layer 1-------------------------
Created Only Hidden Layer: N_nodes: 6 , N_inputs: 4
----------------------------Layer 2-------------------------
Created Output Layer: N_nodes: 2 , N_inputs: 6
--------------------------Epoch: 1-------------------------
--------------------------Epoch: 2-------------------------
--------------------------Epoch: 3-------------------------
--------------------------Epoch: 4-------------------------
--------------------------Epoch: 5-------------------------
--------------------------Epoch: 6-------------------------
--------------------------Epoch: 7-------------------------
--------------------------Epoch: 8-------------------------
--------------------------Epoch: 9-------------------------
--------------------------Epoch: 10-------------------------
--------------------------Epoch: 11-------------------------
--------------------------Epoch: 12-------------------------
--------------------------Epoch: 13-------------------------
--------------------------Epoch: 14-------------------------
--------------------------Epoch: 15-------------------------
--------------------------Epoch: 16-------------------------
--------------------------Epoch: 17-------------------------
--------------------------Epoch: 18-------------------------
--------------------------Epoch: 19-------------------------
--------------------------Epoch: 20-------------------------
--------------------------Epoch: 21-------------------------
--------------------------Epoch: 22-------------------------
--------------------------Epoch: 23-------------------------
--------------------------Epoch: 24-------------------------
--------------------------Epoch: 25-------------------------
--------------------------Epoch: 26-------------------------
--------------------------Epoch: 27-------------------------
--------------------------Epoch: 28-------------------------
--------------------------Epoch: 29-------------------------
--------------------------Epoch: 30-------------------------
--------------------------Epoch: 31-------------------------
--------------------------Epoch: 32-------------------------
--------------------------Epoch: 33-------------------------
--------------------------Epoch: 34-------------------------
--------------------------Epoch: 35-------------------------
--------------------------Epoch: 36-------------------------
--------------------------Epoch: 37-------------------------
--------------------------Epoch: 38-------------------------
--------------------------Epoch: 39-------------------------
--------------------------Epoch: 40-------------------------
--------------------------Epoch: 41-------------------------
--------------------------Epoch: 42-------------------------
--------------------------Epoch: 43-------------------------
--------------------------Epoch: 44-------------------------
--------------------------Epoch: 45-------------------------
--------------------------Epoch: 46-------------------------
--------------------------Epoch: 47-------------------------
--------------------------Epoch: 48-------------------------
--------------------------Epoch: 49-------------------------
--------------------------Epoch: 50-------------------------