Java教程

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

本文主要是介绍DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

 

 

目录

Affine 层的简介

批版本的Affine 层

Affine 层的使用方法

Affine 层的代码实现


 

 

 

Affine 层的简介

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

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

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

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

批版本的Affine 层

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

批版本的Affi ne 层的计算图

 

 

 

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
    

 

 

参考文章”
DL学习—Affine 层:神经网络学习之Affine 层的简介、使用方法、代码实现之详细攻略

 

 

 

这篇关于DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!