DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略

简介: DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略

Affine 层的简介


        Affine层:神经网络的正向传播中,进行的矩阵的乘积运算,在几何学领域被称为“仿射变换”。几何中,仿射变换包括一次线性变换和一次平移,分别对应神经网络的加权和运算与加偏置运算。


Affine层的计算图:求矩阵的乘积与偏置的和的运算用计算图表示。各个节点间传播的是矩阵。


image.png


Affine层的反向传播:注意变量是多维数组。反向传播时各个变量的下方标记了该变量的形状。


image.png


注意矩阵的形状:矩阵的乘积(“dot”节点)的反向传播可以通过组建使矩阵对应维度的元素个数一致的乘积运算而推导出来。

image.png



批版本的Affine 层


   当考虑N个数据一起进行正向传播的情况,就是批版本的Affine层。


批版本的Affi ne 层的计算图


image.png





Affine 层的使用方法


1、神经网络中计算线性加权

#(1)、神经网络的正向传播中,为了计算加权信号的总和,使用了矩阵的乘积运算,即NumPy中是np.dot()。


X = np.random.rand(2) # 输入

W = np.random.rand(2,3) # 权重

B = np.random.rand(3) # 偏置

#X、W、B分别是形状为(2,)、(2, 3)、(3,) 的多维数组。

Y = np.dot(X, W) + B

print(Y)

#Y经过激活函数转换后,传递给下一层。这就是神经网络正向传播的流程。




Affine 层的代码实现


#输入数据为张量(四维数据)

class Affine:

   def __init__(self, W, b):

       self.W = W

       self.b = b

       self.x = None

       self.dW = None

       self.db = None

   def forward(self, x):

       self.x = x

       out = np.dot(x, self.W) + self.b

       return out

   def backward(self, dout):

       dx = np.dot(dout, self.W.T)

       self.dW = np.dot(self.x.T, dout)

       self.db = np.sum(dout, axis=0)

       return dx

class Affine:

   def __init__(self, W, b):

       self.W =W

       self.b = b

     

       self.x = None

       self.original_x_shape = None

       # 权重和偏置参数的导数

       self.dW = None

       self.db = None

   def forward(self, x):

       # 对应张量

       self.original_x_shape = x.shape

       x = x.reshape(x.shape[0], -1)

       self.x = x

       out = np.dot(self.x, self.W) + self.b

       return out

   def backward(self, dout):

       dx = np.dot(dout, self.W.T)

       self.dW = np.dot(self.x.T, dout)

       self.db = np.sum(dout, axis=0)

     

       dx = dx.reshape(*self.original_x_shape)  # 还原输入数据的形状(对应张量)

       return dx



相关文章
|
3天前
|
算法 关系型数据库 C语言
卡尔曼滤波简介+ 算法实现代码(转)
卡尔曼滤波简介+ 算法实现代码(转)
13 4
|
4天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
4天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
4天前
|
算法
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
|
4天前
|
算法
基于改进粒子群算法的混合储能系统容量优化matlab
基于改进粒子群算法的混合储能系统容量优化matlab
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
3天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
3天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
12 1
|
4天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
4天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真
这是一个关于数字图像水印嵌入的算法介绍。使用MATLAB2022a,该算法基于DOTC,结合抖动和量化误差隐藏,确保水印的鲁棒性和隐蔽性。图像被分为N*N块,根据水印信号进行二值化处理,通过调整重建电平的奇偶性嵌入水印。水印提取是嵌入过程的逆操作,通过重建电平恢复隐藏的水印比特。提供的代码片段展示了从块处理、水印嵌入到噪声攻击模拟及水印提取的过程,还包括PSNR和NC的计算,用于评估水印在不同噪声水平下的性能。