(1)表示神经元的层号

如果采用矩阵乘法,则第一层的加权表示为:

import numpy as np
X=np.array([0.5,1])
W1=np.array([[0.1,0.2,0.3],[0.5,0.6,0.7]])
B1=np.array([0.1,0.2,0.3])
A1=np.dot(X,W1)+B1
print(A1)

隐藏层的加权和用a表示,被激活函数转换后的信号用z表示。此外,h()表示激活函数,这里采用sigmoid函数。代码实现:

import numpy as np
def sigmoid(x):
    return 1/(1+np.exp(-x))
X=np.array([0.5,1])
W1=np.array([[0.1,0.2,0.3],[0.5,0.6,0.7]])
B1=np.array([0.1,0.2,0.3])
A1=np.dot(X,W1)+B1
Z1=sigmoid(A1)
print(A1)

最后是第2层到输出层的信号传递(图3-20)。输出层的实现也和之前的 实现基本相同。不过,最后的激活函数和之前的隐藏层有所不同。

def identify_function(x):#恒等函数,最后一层调用
    return x
W3 = np.array([[0.1, 0.3], [0.2, 0.4]])
B3 = np.array([0.1, 0.2])
A3 = np.dot(Z2, W3) + B3
Y = identity_function(A3)  

输出层的激活函数用σ()表示,不同于隐 藏层的激活函数h()(σ读作sigma)

三层神经网络代码实现:

import numpy as np
from matplotlib import pyplot as plt


def sigmoid(x):
    return 1/(1+np.exp(-x))
def init_network():#创建字典,对权重和偏置初始化
    network= {'W1': np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]), 'b1': np.array([0.1, 0.2, 0.3]),
              'W2': np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]), 'b2': np.array([0.1, 0.2]),
              'W3': np.array([[0.1, 0.3], [0.2, 0.4]]), 'b3': np.array([0.1, 0.2])}
    return network
def identify_function(x):
    return x
def forward(network,x):#封装了将输入信号转换为输出信号的处理过程
    W1,W2,W3=network['W1'],network['W2'],network['W3']
    b1,b2,b3=network['b1'],network['b2'],network['b3']
    a1=np.dot(x,W1)+b1
    z1=sigmoid(a1)
    a2=np.dot(z1,W2)+b2
    z2=sigmoid(a2)
    a3=np.dot(z2,W3)+b3
    y=identify_function(a3)
    return y

network =init_network()
x=np.array([1.0,0.5])
y=forward(network,x)
print(y)
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐