用博客记录学习效率贼高就很开心😀
编程题已经放在github上了,包括数据集。
Course 1 Logistic编程题
Course 1 简单神经网络编程题
简单神经网络
x
1
⋅
⋅
⋅
x
m
x_1···x_m
x1⋅⋅⋅xm是输入层
中间是隐藏层,中间运算 的数据
最后是输出层
还有种表示方法:输入层记为
a
[
0
]
=
X
a^{[0]}=X
a[0]=X,之后iud每一层记为
a
[
1
]
,
a
[
2
]
⋅
⋅
⋅
a^{[1]},a^{[2]}···
a[1],a[2]⋅⋅⋅
上标表示层数,下标表示这个矩阵的行数,如隐藏层可表示为:
a
[
1
]
=
[
a
1
[
1
]
a
2
[
1
]
a
3
[
1
]
a
4
[
1
]
]
\begin{gathered}a^{[1]}= \begin{bmatrix} a^{[1]}_{1} \\ a^{[1]}_{2} \\a^{[1]}_{3} \\a^{[1]}_{4} \end{bmatrix} \quad \end{gathered}
a[1]=⎣⎢⎢⎢⎡a1[1]a2[1]a3[1]a4[1]⎦⎥⎥⎥⎤
该神经网络一共两层,输入层不算。
注意应该随机化所有参数。b=0可以,初始化参数不要太大,会很慢
w=np.random.randn((2,2))*0.01
b=np.zeros((2,1))
激活函数
激活函数不能是线性函数
tanh
a
=
t
a
n
h
(
z
)
=
e
z
−
e
−
z
e
z
+
e
−
z
a=tanh(z)=\frac{e^{z}-e^{-z}}{{e^{z}+e^{-z}}}
a=tanh(z)=ez+e−zez−e−z
平均值在0,范围是
(
−
1
,
1
)
(-1,1)
(−1,1)。
ReLU
修正线性函数,默认选择,会比tanh快
a
=
R
e
L
U
(
z
)
=
m
a
x
(
0
,
z
)
a=ReLU(z)=max(0,z)
a=ReLU(z)=max(0,z)
Leaky ReLU
a
=
R
e
L
U
(
z
)
=
m
a
x
(
0.01
z
,
z
)
a=ReLU(z)=max(0.01z,z)
a=ReLU(z)=max(0.01z,z)
sigmoid
只用于二元分类的输出层
深层神经网络
深层神经网络是一个简单到复杂的过程。
向前传播:
x
=
a
[
0
]
x=a^{[0]}
x=a[0]
z
[
1
]
=
w
[
1
]
a
[
0
]
+
b
[
1
]
z^{[1]}=w^{[1]}a^{[0]}+b^{[1]}
z[1]=w[1]a[0]+b[1]
a
[
1
]
=
g
[
1
]
(
z
[
1
]
)
a^{[1]}=g^{[1]}(z^{[1]})
a[1]=g[1](z[1])
.
.
.
.
.
.
.
.
.
.........
.........
z
[
e
]
=
w
[
e
]
a
[
e
−
1
]
+
b
[
e
]
z^{[e]}=w^{[e]}a^{[e-1]}+b^{[e]}
z[e]=w[e]a[e−1]+b[e]
a
[
e
]
=
g
[
e
]
(
z
[
e
]
)
a^{[e]}=g^{[e]}(z^{[e]})
a[e]=g[e](z[e])
超参数
决定w,b的参数,如learning_rate