AlexNet发布于2012年,让研究界接受了深度网络在数据特征提却中的可行性。网络有5个卷集层,3个FC层,创新点有:1)增加了卷积网络的深度,由LeNet的2个卷积层变为5个, 2)pool层使用maxpooling, 3)激活函数使用relu,4)使用dropout,5)使用了大量的数据增强预处理方法。
使用mxnet进行一下代码演示。mxnet的安装方法
pip install d2l==0.14.3
pip install -U mxnet-cu101mkl==1.6.0.post0
pip install gluoncv
创建一个AlexNet网络
from d2l import mxnet as d2l
from mxnet import np,npx
from mxnet.gluon import nn
npx.set_np()
net = nn.Sequential()
net.add(
nn.Conv2D(96, kernel_size=11, strides=4, activation='relu'),
nn.MaxPool2D(pool_size=3, strides=2),
nn.Conv2D(256, kernel_size=5, padding=2, activation='relu'),
nn.MaxPool2D(pool_size=3, strides=2),
nn.Conv2D(384, kernel_size=3, padding=1, activation='relu'),
nn.Conv2D(384, kernel_size=3, padding=1, activation='relu'),
nn.Conv2D(256, kernel_size=3, padding=1, activation='relu'),
nn.MaxPool2D(pool_size=3, strides=2),
nn.Dense(4096, activation='relu'), nn.Dropout(0.5),
nn.Dense(4096, activation='relu'), nn.Dropout(0.5),
nn.Dense(10)
)
网络的输入尺寸是224*224.
打印一下输出
x = np.random.uniform(size=(1,1,224,224))
net.initialize()
for layer in net:
x = layer(x)
print(layer.name, '\t', x.shape)
conv10 (1, 96, 54, 54)
pool6 (1, 96, 26, 26)
conv11 (1, 256, 26, 26)
pool7 (1, 256, 12, 12)
conv12 (1, 384, 12, 12)
conv13 (1, 384, 12, 12)
conv14 (1, 256, 12, 12)
pool8 (1, 256, 5, 5)
dense4 (1, 4096)
dropout2 (1, 4096)
dense5 (1, 4096)
dropout3 (1, 4096)
dense6 (1, 10)
加载fashion_mnist训练数据
batch_size=128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
训练代码
lr, num_epochs = 0.01, 10
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr)
在T4下训练大概20分钟就可以完成了
训练结果
loss 0.333, train acc 0.879, test acc 0.893
4200.6 examples/sec on gpu(0)
训练使用 Xavier进行网络初始化,loss为 cross-entropy,使用sgd进行优化。
最后的话:
这篇文章发布在CSDN/蓝色的杯子, 没事多留言,让我们一起爱智求真吧.我的邮箱wisdomfriend@126.com