• 深度学习笔记——神经网络(ANN)搭建过程+python代码


    目录

    1.多维数组的运算

    (1)多维数组

    (2)矩阵乘法

    (3)神经网络的内积

    2.3层神经网络的实现

     (1)第一层加权和

     (2)输入层到第1层的信号传递

    (3)第1层到第2层的信号传递

    (4)完整代码


    1.多维数组的运算

    (1)多维数组

    多维数组的维数可以通过np.ndim()函数获得。此外,数组的形状可以通过实例变量shape获得。

    二维数组也称为矩阵,数组的横向排列称为行(row),纵向排列称为列(column)

    代码:

    1. import numpy as np
    2. A=np.array([1,2,3,4])
    3. print("一维数组A的维数、形状、第一维度形状:")
    4. print(A)
    5. print(np.ndim(A))
    6. print(A.shape)
    7. print(A.shape[0])
    8. B=np.array([[1,2],[3,4],[5,6]])
    9. print("二维数组B的维数、形状、第一维度形状:")
    10. print(B)
    11. print(np.ndim(B))
    12. print(B.shape)
    13. print(B.shape[0])

    运行结果:

    (2)矩阵乘法

    矩阵乘积的计算方法如下图所示

     矩阵的乘积可以通过NumPy的np.dot()函数计算(乘积也称为点积)

    代码:

    (2*2矩阵点积计算)

    1. A = np.array([[1,2],[3,4]])
    2. print(A.shape)
    3. B = np.array([[5,6],[7,8]])
    4. print(B.shape)
    5. print(np.dot(A,B))

    运行结果:

    (2*3矩阵和3*2矩阵点积运算)

    1. A = np.array([[1,2,3],[4,5,6]])
    2. print(A.shape)
    3. B = np.array([[1,2],[3,4],[5,6]])
    4. print(B.shape)
    5. print(np.dot(A,B))

    运行结果:

     (2*3和2*2矩阵进行点积运算)

    1. A = np.array([[1,2,3],[4,5,6]])
    2. print(A.shape)
    3. B = np.array([[1,2],[3,4],[5,6]])
    4. C = np.array([[1,2],[3,4]])
    5. print(C.shape)
    6. print(np.dot(A,C))

    运行结果:

     出现报错“ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)”,这是因为在多维数组运算中,两个进行点积运算的矩阵中的对应维度个数必须相同

    (3)神经网络的内积

    使用numpy矩阵实现一个简单神经网络(省略了偏置和激活函数,只有权重)

    下图为该简单神经网络的结构

     代码:

    1. X = np.array([1,2])
    2. print(X.shape)
    3. W = np.array([[1,3,5],[2,4,6]])
    4. print(W)
    5. print(W.shape)
    6. Y = np.dot(X,W)
    7. print(Y)

    运行结果:

    2.3层神经网络的实现

    3层神经网络结构如下:

     其中,该神经网络:输入层(第0层)有2个神经元,第1个隐藏层(第1层)有3个神经元,第2个隐藏层(第2层)有2个神经元,输出层(第3层)有2个神经元

    增加表示偏置的神经元“1”,如下图所示:

     (1)第一层加权和

    使用矩阵的乘法运算,可以将第一层的加权和表示成下面的式子:

    A=XW+B

    代码实现(这里将输入信号、权重、偏置设置为任意值)

    1. X = np.array([1.0,0.5])
    2. W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
    3. B1 = np.array([0.1,0.2,0.3])
    4. A1 = np.dot(X,W1) + B1

    使用激活函数sigmoid后:

    1. def sigmoid(x):
    2. return 1 / (1 + np.exp(-x))
    3. X = np.array([1.0,0.5])
    4. W1 = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
    5. B1 = np.array([0.1,0.2,0.3])
    6. A1 = np.dot(X,W1) + B1
    7. Z1 = sigmoid(A1)

     (2)输入层到第1层的信号传递

        代码:

    1. W2 = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
    2. B2 = np.array([0.1,0.2])
    3. A2 = np.dot(Z1,W2) + B2
    4. Z2 = sigmoid(A2)

    (3)第1层到第2层的信号传递

       在这里我们定义了identity_function()函数(恒等函数),并将其作为输出层的激活函数。

    (说明:输出层所用的激活函数,要根据求解问题的性质决定。一般地,回归问题可以使用恒等函数,二分类问题使用sigmoid函数,多元分类问题可以使用softmax函数

    1. def identity_function(x):
    2. return x
    3. W3 = np.array([[0.1,0.3],[0.2,0.4]])
    4. B3 = np.array([0.1,0.2])
    5. A3 = np.dot(Z2,W3) + B3
    6. Y = identity_function(A3)

    (4)完整代码

    1. def init_network():
    2. network = {}
    3. network['W1'] = np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
    4. network['b1'] = np.array([0.1,0.2,0.3])
    5. network['W2'] = np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
    6. network['b2'] = np.array([0.1,0.2])
    7. network['W3'] = np.array([[0.1,0.3],[0.2,0.4]])
    8. network['b3'] = np.array([0.1,0.2])
    9. return network
    10. def sigmoid(x):
    11. return 1 / (1 + np.exp(-x))
    12. def identity_function(x):
    13. return x
    14. import numpy as np
    15. def forward(network, x):
    16. W1,W2,W3 = network['W1'],network['W2'],network['W3']
    17. b1,b2,b3 = network['b1'],network['b2'],network['b3']
    18. a1 = np.dot(x, W1) + b1
    19. z1 = sigmoid(a1)
    20. a2 = np.dot(z1, W2) + b2
    21. z2 = sigmoid(a2)
    22. a3 = np.dot(z2, W3) + b3
    23. y = identity_function(a3)
    24. return y
    25. if __name__ == '__main__':
    26. network = init_network()
    27. x = np.array([1.0,0.5])
    28. y = forward(network,x)
    29. print(y)

    运行结果(输出y):

  • 相关阅读:
    23上半年下午题
    基于ubuntu 20.04与cri-docker 搭建部署高可用k8s 1.25.3
    基于STM32设计的智慧浇花系统(华为云IOT)
    Win10下pytorch环境搭建详细教程以及示例测试
    瑞吉外卖Day05
    【踩坑】PyTorch中指定GPU不生效和GPU编号不一致问题
    java计算机毕业设计高校教师个人信息管理系统MyBatis+系统+LW文档+源码+调试部署
    ​力扣解法汇总1775. 通过最少操作次数使数组的和相等
    华为OD机试 - 最多颜色的车辆 - 数据结构map(Java 2022Q4 100分)
    Unity之ShaderGraph如何实现卡通效果
  • 原文地址:https://blog.csdn.net/weixin_52135595/article/details/127621243