之前学习的都是线性的串行结构
就是上一个的输出作为下个的输入

00:02:06.381
image.png

convoltion:卷积
pooling:池化
softmax:输出
other:拼接层

为了减少代码冗余:

发现这些快长得都一样
所以把其封装成类

00:06:02.235
image.png

有一些参数比较难选
比如kernel选哪个,

googlenet的思路是,再一个块中,使用多个kernnel
然后对结果进行评价,让最优的kernel权重增加

00:09:21.370
image.png

对于每一条路,变换之后bwh必须相同
c可以不同
00:11:39.744
image.png

00:11:51.236
image.png

00:11:59.066
image.png

00:13:31.719
image.png

00:13:30.545
00:13:30.545
image.png

求和也就是信息融合

00:17:39.604
image.png

00:19:24.494
image.png
上面这个的运算量太大了

00:20:06.613
image.png
直接变为原来的十分之一

这个也就是1x1的卷积神经网络的作用

网络中的网络:1x1卷积

00:22:11.511
image.png
00:23:26.250
image.png

00:24:49.219
image.png

00:26:49.045
image.png

00:26:57.307
image.png

00:27:05.035
image.png

00:27:21.746
image.png

00:28:02.994
image.png

00:28:25.721
image.png

所有的内容整合到一块,形成一个类

00:29:13.195
image.png

右图是构造网络
00:30:37.481
image.png

一共输出88个通道
00:31:02.224

00:31:17.952
image.png

这也是代码中88的由来

00:33:12.296
image.png

最优的是在中间,而不是最后,所以训练轮数不是越多越好
,后面有过拟合的倾向

00:34:28.892
image.png

对于这种情况的操作是,将最好的版本进行存盘

00:36:12.213
image.png

00:37:19.877
image.png

20层的卷积比56层更好

原因有可能是:梯度消失

当梯度趋近于0时,权重就得不到更新
也就是里输入比较近的块,没办法得到充分的训练

训练神经网络若干个层

解决办法
00:38:46.307
image.png

将每一层进行加锁
算完之后加锁
逐层训练

这个实际上是很难执行的,因为层数很多

00:39:34.549
image.png

00:39:48.820
image.png

跳连接

加完了再激活

重点是和x做加法
这就要求输出 F(x) 的bchw都需要和x一致
b batch
c channel
。。。
00:42:02.763
image.png

00:42:21.659
image.png

00:45:04.552
image.png

00:45:47.831
image.png

注意最后一步顺序
先求和,再激活

00:46:59.699
image.png

00:49:19.322
image.png

00:49:27.563
image.png

接下来的学习路线
00:53:35.096
image.png

00:53:47.566
image.png

最好通读一遍pytorch
00:54:13.784
image.png

复现一些比较经典的代码
00:54:48.217
image.png

跑通代码不对
应该是读代码,了解架构

然后进行架构的复现,00:56:14.756
image.png

00:57:10.414
image.png

00:57:21.636
image.png

完结撒花