第二周
- 当你将这个向量加上这个实数时,Python 自动把这个实数 𝑏 扩展成一个 1 × 𝑚 的行向量。
所以这种情况下的操作似乎有点不可思议,它在 Python 中被称作广播(brosdcasting) - numpy中(n,)与(n,1)的区别
if
a.shape=(n,)
b.shape=(n,)
then
a*b转置和b转置*a都是一个数
if
a.shape=(n,1)
b.shape=(n,1)
和线代计算规则一样了
- 纬度,轴,秩
a=[1,2,3]:一维
b=[[1,2,3],[1,2,3]]:二维
c=[ [ [1,2,3],[1,2,3] ] , [ [1,2,3],[1,2,3] ] , [ [1,2,3],[1,2,3] ]]:三维
轴:对于二维来说,行是axis0,列是axis1,三维那个竖着的是axis0
a.shape=(2,3)
b.shape=(3,2,3):3层,每层2行3列
第三周 浅层神经网络
常用激活函数
sigmoid,tanh,Relu,leaky relu
- 在讨论优化算法时,有一点要说明:我基本已经不用 sigmoid 激活函数了,tanh 函数在所有场合都优于 sigmoid 函数。但有一个例外:在二分类的问题中,对于输出层,因为𝑦的值是 0 或 1,所以想让𝑦^的数值介于 0 和 1 之间,而不是在-1 和+1 之间。所以需要使用 sigmoid 激活函数。
- relu函数在大于0时,是线性的,在小于0时也是线性的,但是整体是非线性的
- 在实践中,使用 ReLu 激活函数神经网络通常会比使用 sigmoid 或者 tanh 激活函数学习的更快。
- 总结
sigmoid 激活函数:除了输出层是一个二分类问题基本不会用它。
tanh 激活函数:tanh 是非常优秀的,几乎适合所有场合。
ReLu 激活函数:最常用的默认函数,,如果不确定用哪个激活函数,就使用 ReLu 或者Leaky ReLu。
第四周 深层神经网路
偏差,方差
高方差:
- 特点:训练集err%低,验证集err%高,过拟合的
- 解决方法:
- 正则化
- 准备更多数据
低方差:
训练集err%高
验证集err%高(和训练集的差不多)
欠拟合的
第四门 卷积神经网络
padding
- valid卷积:不填充
有一个𝑛 × 𝑛的图像,用一个𝑓 × 𝑓的过滤器
卷积,它将会给你一个(𝑛 − 𝑓 + 1) × (𝑛 − 𝑓 + 1)维的输出 - same卷积:填充,使卷积后的和原图一样大
根据这个公式𝑛 − 𝑓 + 1,当你填充𝑝个像素点,𝑛就变成了𝑛 + 2𝑝,最后公式变为𝑛 + 2𝑝 − 𝑓 + 1。因此如果你有一个𝑛 × 𝑛的图像,用𝑝个像素填充边缘,输出的大小就是这样的(𝑛 + 2𝑝 − 𝑓 + 1) × (𝑛 + 2𝑝 − 𝑓 + 1)。如果你想让𝑛 + 2𝑝 − 𝑓 + 1 = 𝑛的话,使得输出和输入大小相等,如果你用这个等式求解𝑝,那么𝑝 = (𝑓 − 1)/2 - 习惯上,计算机视觉中,𝑓通常是奇数
- 输出计算
fxf的过滤器,nxn的图像,步长s,padding为p,输出为(n+2p-f)/s+1 x (n+2p-f)/s+1:向下取整