seansheep

步骤

  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)

分类:

技术点:

相关文章: