1#coding:utf-8 2''' 3VGG网络 4''' 5from mxnet.gluon import nn 6from mxnet import ndarray as nd 7import mxnet as mx 8from mxnet import init 9import os 10import sys 11sys.path.append(os.getcwd()) 12import utils 13 14def vgg_block(num_convs,channels): 15 out = nn.Sequential() 16 for _ in range(num_convs): 17 out.add( 18 nn.Conv2D(channels=channels,kernel_size=3,padding=1,activation='relu') 19 ) 20 21 out.add(nn.MaxPool2D(pool_size=2,strides=2)) 22 23 return out 24 25# 将 vgg_block堆起来 26def vgg_stack(arhitechure): 27 out = nn.Sequential() 28 for(num_convs,channels) in arhitechure: 29 out.add(vgg_block(num_convs,channels)) 30 31 return out 32 33blk = vgg_block(2,128) 34blk.initialize() 35 36x = nd.random.uniform(shape=(2,3,16,16)) 37y = blk(x) 38print(y.shape) 39 40# 定义一个最简单的VGG结构,8个卷积层,3个全连接层,称为VGG11 41ctx = mx.cpu() #utils.try_gpu() 42num_outputs = 10 43architechure = ((1,64),(1,128),(2,256),(2,512),(2,512)) 44net = nn.Sequential() 45with net.name_scope(): 46 net.add( 47 vgg_stack(architechure), 48 nn.Flatten(), 49 nn.Dense(4096,activation='relu'), 50 nn.Dropout(0.5), 51 nn.Dense(4096,activation='relu'), 52 nn.Dropout(0.5), 53 nn.Dense(num_outputs) 54 ) 55 56# 训练模型 57train_data,test_data = utils.load_data_fashion_mnist(batch_size=64, 58 resize=96) 59ctx = utils.try_gpu() 60net.initialize(ctx=ctx,init=init.Xavier()) 61 62loss = mx.gluon.loss.SoftmaxCrossEntropyLoss() 63trainer = mx.gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.05}) 64 65utils.train(train_data,test_data,net,loss,trainer,ctx,num_epochs=5)
MXNet动手学深度学习笔记:VGG神经网络实现
Wesley13
2021-10-11
1191 0 0
点赞
收藏
评论区
加载中...