LeNet由卷积层块和全连接层块组成。
卷积层块里的基本单位是卷积层后接最大池化层。卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层用来降低卷积层对位置的敏感性。卷积层块由两个这样的基本单位重复堆叠构成。卷积层块的输出形状为(批量大小,通道,高,宽)。
全连接层块会将小批量中每个样本变平,也就是说,全连接层的输入形状将变成二维,其中第一维是小批量中的样本,第二维是每个样本变平后的向量表示,且向量长度为通道、高和宽的乘积。
以下通过Sequential类实现LeNet模型:
import d2lzh as d2l
import mxnet as mx
from mxnet import autograd, gluon, init, nd
from mxnet.gluon import loss as gloss,nn
import time
net=nn.Sequential()
net.add(nn.Conv2D(channels=6,kernel_size=5,activation='sigmoid'),
nn.MaxPool2D(pool_size=2,strides=2),
nn.Conv2D(channels=16,kernel_size=5,activation='sigmoid'),
nn.MaxPool2D(pool_size=2,strides=2),
nn.Dense(120,activation='sigmoid'),
nn.Dense(84,activation='sigmoid'),
nn.Dense(10))
X=nd.random.uniform(shape=(1,1,28,28))
net.initialize()
for layer in net:
X=layer(X)
print(layer.name,'output shape:\t',X.shape)