【深度学习】神经网络前向传播简单实现

步骤

  1. 输入层的每个节点与隐藏层的每个节点做点对点计算,加权求和 + 激活函数
  2. 利用同样的方法,计算隐藏层到输出层
  3. 隐藏层对加权结合后的结果使用激活函数,本例使用Sigmoid
  4. 最终的输出值与样本值进行比较,计算出误差

网络结构

代码实现

import numpy as np

def _sigmoid(in_data):
    return 1.0 / (1.0 + np.exp(-in_data))

def init_network():
    network = {}
    # 输入层到隐藏层的权重矩阵和bias
    network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
    network['b1'] = np.array([0.1, 0.2, 0.3])

    # 第一个隐藏层到第二个隐藏层的权重矩阵和bias
    network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
    network['b2'] = np.array([0.1, 0.2])

    # 第二个隐藏层到输出层的权重矩阵和bias
    network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
    network['b3'] = np.array([0.1, 0.2])

    return network

def forward(network, x):
    # x是输入
    # network是初始化后的模型,已定义好权重矩阵和bias

    # 提取模型初始化的权重、bias对象
    w1, w2, w3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    # 前向传播

    # 输入层到第一个隐藏层
    # 输入:x,输出:z1
    a1 = x.dot(w1) + b1  # 加权求和
    z1 = _sigmoid(a1)  # 激活,得到输出z1,作为进入下一层的输入

    # 第一个隐藏层到第二个隐藏层
    # 输入:z1,输出z2
    a2 = z1.dot(w2) + b2  # 加权求和
    z2 = _sigmoid(a2)  # 激活,得到输出z2,作为进入下一层的输入

    # 第二个隐藏层到输出层
    a3 = z2.dot(w3) + b3  # 加权求和,得到输出a3

    y = a3
    return y

if __name__ == '__main__':
    # 初始化网络
    network = init_network()
    # 输入
    x = np.array([1.0, 0.5])
    # 前向传播
    y = forward(network, x)
    # 打印输出
    print(y)
posted @ 2022-02-15 15:07  SeanSiyang  阅读(94)  评论(0编辑  收藏  举报