如果你想要在python之中从头来实现一次前向传播,除了tensorflow和python库之中的内容,你能不能自己来写些呢(甚至比pytorch和tensorflow更好也说不定呢哈哈哈)
以下内容有任何不理解可以翻看我之前的博客哦
前向传播——煮咖啡模型(不了解可以看我之前的博客)
我们还是先看煮咖啡模型:
第一层
在python中,我们将使用数组来表示向量和参数,因此只有一个方括号:
x = np.array([200, 17])
你要计算的第一个值一定是第一层的激活值,其中第一个神经元的计算值为:
a
1
[
1
]
=
g
(
w
1
[
1
]
⋅
x
+
b
1
[
1
]
)
a_1^{[1]}=g(w_1^{[1]}\cdot x+b_1^{[1]})
a1[1]=g(w1[1]⋅x+b1[1])
因此,为了计算
a
1
[
1
]
a_1^{[1]}
a1[1],我们需要有
w
1
[
1
]
w_1^{[1]}
w1[1]和
b
1
[
1
]
b_1^{[1]}
b1[1]:
w1_1 = np.array([1, 2])
b1_1 = np.array([-1])
然后就可以计算:
z1_1 = np.dot(w1_1, x) + b1_1
np.dot()是numpy中的一个库函数,可以用来进行矩阵的乘法运算
根据上面的公式,你就可以算出激活值的第一个数了:
a1_1 = sigmoid(z1_1)
第二、三层
同样地,我们可以算出激活值中的其它两个数:
a
2
[
1
]
=
g
(
w
2
[
1
]
⋅
x
+
b
2
[
1
]
)
a
3
[
1
]
=
g
(
w
3
[
1
]
⋅
x
+
b
3
[
1
]
)
a_2^{[1]}=g(w_2^{[1]}\cdot x+b_2^{[1]})\\ a_3^{[1]}=g(w_3^{[1]}\cdot x+b_3^{[1]})
a2[1]=g(w2[1]⋅x+b2[1])a3[1]=g(w3[1]⋅x+b3[1])
w1_2 = np.array([-3, 4])
b1_2 = np.array([1])
z1_2 = np.dot(w1_2, x) + b1_2
a1_2 = sigmoid(z1_2)
w1_3 = np.array([5, -6])
b1_3 = np.array([2])
z1_3 = np.dot(w1_3, x) + b1_3
a1_3 = sigmoid(z1_3)
这样,我们就有整个的激活值了:
a1 = np.array([a1_1, a1_2, a1_3])
最终输出层
最后再看最终输出层:
a
1
[
2
]
=
g
(
w
1
[
2
]
⋅
a
[
1
]
+
b
1
[
2
]
)
a_1^{[2]}=g(w_1^{[2]}\cdot a^{[1]}+b_1^{[2]})
a1[2]=g(w1[2]⋅a[1]+b1[2])
w2_1 = np.array([-7, 8, 9])
b2_1 = np.array([3])
z2_1 = np.dot(w2_1, a1) + b2_1
a2_1 = sigmoid(z2_1)
在原视频中,作者的一些字母标记我认为出现了一些错误,便进行了一些修改,如果仍然有误可以评论区联系我讨论哦。
为了给读者你造成不必要的麻烦,博主的所有视频都没开仅粉丝可见,如果想要阅读我的其他博客,可以点个小小的关注哦。