一、多维数组运算
1.1 矩阵的乘法
dot点积矩阵的乘法
- 矩阵*矩阵
- 矩阵*向量
import numpy as np
A = np.array([[1, 2],[3, 4]])
print(A)
B = np.array([7,8])
print(B)
print(np.dot(A,B))
完全可以实现。同样也可以使用矩阵乘以一个向量
来进行运算
向量:一维矩阵
1.2 神经网络的内积
使用numpy矩阵来实现神经网络
使用矩阵的乘法可以一次性算出两个矩阵的数值,这在神经网络的实现层面上是非常重要的
二、3层神经网络的实现
2.1 实现从输入到输出的前向处理
2.2 各层间信号传递的实现
从输入层到第一层第一个神经元的过程
1. 计算加权信号和偏置的和(使用矩阵乘法进行计算)
2. 设置好3个矩阵
- 输入矩阵
- 权重矩阵
- 偏置矩阵
注意权重矩阵的写法,是11,21,31来写的,
2.3 计算
- a来表示加权和
A1=np.dot(x,w1)+B1
被激活函数激活的信号用z来表示
在计算第一层到第二层的传递的时候
- A2计算的时候的输入值是(Z1,W2)
A2=np.dot(Z1,w1)+B2
三、输出层
3.1 输出层的激活函数和隐藏层不同
这里我们使用恒等函数
会将输入原模原样进行输出
用希腊符号西格玛表示
3.2 激活函数的使用
- 回归问题 恒等函数
- 二元分类问题 SIGMOD函数
- 多元分类问题 softmax函数
四、【实验】使用NumPy巧妙实现神经网络
年轻人的第一个简单的神经网络
init函数
用于对权重和偏置进行初始化forward函数
封装了将输入信号转化为输出信号的过程
import numpy as np
def sigmod(x):
return 1 / (1 + np.exp(-x))
def indentify_function(x):
return x
# 在本程序中使用numpy来实现一个简单的神经网络
# 定义好神经网络的初始化函数
def init_network():
network = {}
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])
network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
network['B2'] = np.array([0.1, 0.2])
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):
W1 = network['W1']
W2 = network['W2']
W3 = network['W3']
B1 = network['B1']
B2 = network['B2']
B3 = network['B3']
a1 = np.dot(x, W1) + B1
z1 = sigmod(a1)
a2 = np.dot(z1, W2) + B2
z2 = sigmod(a2)
a3 = np.dot(z2, W3) + B3
y = indentify_function(a3)
return y
# 开始运行神经网络
network = init_network()
x = np.array([1, 0.5])
y = forward(network, x=x)
print(y)
D:\ANACONDA\envs\pytorch\python.exe C:/Users/Administrator/Desktop/Code/learn_pytorch/chap2/5.py
[0.31682708 0.69627909]
Process finished with exit code 0
这样就巧妙的实现了神经网络的前向传播
一定要把矩阵的这个思想搞清楚!!!!