【深度学习】2-2 神经网络 - 前向传播实现3层神经网络

神经网络分层

神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。

用图来表示神经网络的话,把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也叫隐藏层(或隐含层)
在这里插入图片描述

实现3层神经网络

首先了解下权重符号的定义
在这里插入图片描述
图中权重w
**上标 (1)**表示的是第1层的权重
下标 1 表示后一层的第1个神经元
下标 2 表示前一层的第2个神经元

权重右下角按照“后一层的索引号、前一层的索引号”的顺序排列。

各层间信号传递的实现
在这里插入图片描述

图中增加了表示偏置b的神经元“1”。请注意,偏置的右下角的索号只有一个。这是因为前一层的偏置神经元(神经元“1”)只有一个.

为了确认前面的内容,现在用数学式表示 a1,其通过加权信号和偏置按如下方式进行计算
a1(1) = w11(1) x1 +w12(1) x2+ b1(1)

如果使用矩阵的乘法运算,则可以将第1层的加权和表示成下面的式子
A(1) = XW(1)+ B(1)
其中,各参数的表示如下:
因为上标都是(1) 所以在下面的式子中省略(1)
A = ( a   1   a   21   a   31   ) (0) A= \begin{pmatrix} a~1~ & a~21~ & a~31~ \\ \end{pmatrix} \tag{0} A=(a 1 a 21 a 31 )(0)
X = ( x   1   x   2   ) (0) X= \begin{pmatrix} x~1~ & x~2~ \\ \end{pmatrix} \tag{0} X=(x 1 x 2 )(0)
B = ( b   1   b   2   b   3   ) (0) B= \begin{pmatrix} b~1~ & b~2~ & b~3~\\ \end{pmatrix} \tag{0} B=(b 1 b 2 b 3 )(0)

W = ( w   11   w   21   w   31   w   12   w   22   w   32   ) (0) W= \begin{pmatrix} w~11~ & w~21~ & w~31~ \\ w~12~ & w~22~ & w~32~ \\ \end{pmatrix} \tag{0} W=(w 11 w 12 w 21 w 22 w 31 w 32 )(0)

下面用NumPy多维数组来实现

X=np.array([1.0, 0.5])
W1 = np.array([0.1,0.3,0.5],[0.2,0.4,0.6])
B1=np.array([0.1,0.2,0.3])

print(W1.shape)
print(X.shape)
print(B1.shape)

A1 = np.dot(X,W1)+B1

隐藏层的加权和(加权信号和偏置的总和)用a表示,被激活函数转换后的信号用z表示。此外,图中h()表示激活函数,这里我们使用的是sigmoid函数。
在这里插入图片描述

X=np.array([1.0, 0.5])
W1 = np.array([0.1,0.3,0.5],[0.2,0.4,0.6])
B1=np.array([0.1,0.2,0.3])

print(W1.shape)
print(X.shape)
print(B1.shape)

A1 = np.dot(X,W1)+B1
Z2 =sigmoid(A2)

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

def identity_function(x):
	return x
W3 = np.array([[0.10.3][0.20.4]])
B3 = np.array([0.10.2])
A3 =np.dot(Z2,W3)+ B3
Y=identity_function(A3)  # 或Y=A3

identity_function()函数也叫恒等函数并将其作为输出层的激活函数。

另外要注意的是,在下图中输出层的激活函数用 σ()
表示,不同于隐藏层的激活函数h()

在这里插入图片描述

输出层所用的激活函数,要根据求解问题的性质决定
回归问题使用恒等函数 (回归一般用于预测,当然也可用于分类)
二元分类使用sigmoid函数
多元分类可以使用softmax函数

代码总结

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['b2'] = np.array([0.1,0.2])
	return network

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 = identity_function(a3)

    return y

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

这样通过NumPy多维数组,可以实现神经网络

补充知识:
回归问题多用来预测一个具体的数值,如预测房价、未来的天气情况等等。例如我们根据一个地区的若干年的PM2.5数值变化来估计某一天该地区的PM2.5值大小,预测值与当天实际数值大小越接近,回归分析算法的可信度越高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值