卷积神经网络(高级篇)
1*1的卷积核
下图是两种网络的构造方式,图二相比于图一多了一个1*1的卷积核层,在长宽不变的情况下减小了通道数,把运算次数减少了一个数量级。
GoogleNet(简化版)
下图为GoogleNet中的Inception模块:
代码:
1 | class InceptionA(nn.Module): |
GoogleNet的一个简化实现:
1 | class Net(nn.Module): |
梯度消失与Residual Net
随着网络层数的加深,可能会出现梯度消失的问题,更新的时候,接近输入的层参数更新会非常缓慢。对于这种情况的一种解决方案是采用residual net
,即在做relu激活前,先把现有的函数输出与原始输入相加(要求长宽和通道数一致),这样得到$H(x)=F(x)+x$的形式,好处是当求导时可以得到这样的形式:$\frac{\partial{H(x)}}{\partial{x}}=\frac{\partial{F(x)}}{\partial{x}}+1$,最小值为一个接近1的数而非很小的小数,相乘时就不会产生梯度消失的问题了。
1 | class ResidualBlock(nn.Module): |
总体网络构造:
1 | class Net(nn.Module): |
课程来源:《PyTorch深度学习实践》完结合集