深度学习网络篇——AlexNet在MNIST的代码实现

AlexNet是深度学习网络篇学习的基础网络,这篇文章在MNIST上做一次实现。在MNIST上实现AlexNet的代码有很多大大们都写过,这篇文章分享一下我们自己写的时候有些小体会。

写代码之前的一点儿小准备

要搭建一个深度学习的网络,我们首先要了解数据集
整体来说,MNIST的AlexNet的实现(分类问题) MNIST的输入大小是28x28,手写数字0-9,共10类。如果有小伙伴想更深入的了解MNIST数据集,可以参考我的数据集的博客机器学习数据集篇——MNIST数据集
在我们了解了数据集后,我们再要思考的问题就是我们怎么搭建网络。我们可以把搭建网络可以比作盖房子,我们有了数据集,就相当于我们已经有了盖房子的水泥等原材料;我们现在要开始画图纸了,决定这个房子是盖一层还是摩天大厦,每一层房子里都放些什么东西,这也就说明我们要考虑网络建几层,每层都有些什么布置和考量。
对于MNIST上的AlexNet来说,网络就是5层卷积层,3层全连接层(含softmax层),输入是28x28的图像文件,输出是10个类;在卷积层中的操作是卷积—激活—池化(可选)—标准化(可选);在全连接层上我们考虑用多少个神经元来训练;还要定义损失函数和优化器等等。
综上所述,我们可以把构建网络模型分成四个步骤:
1.数据集的加载(了解数据集、获取数据集、明确输入等)
2.定义网络模型(明确要实现什么问题‘是分类or回归’、定义网络模型的结构、定义损失函数和优化器、定义评估函数等)
3.训练模型(初始化变量、在训练集上训练)
4.评估模型(在测试集上测试,输出损失)

AlexNet在MNIST的实现过程

首先我们要做一些导入的准备,比如说tensorflow,MNIST啥的。

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data",one_hot=True)

定义网络的超参数和基础参数

learning_rate = 0.001
training_iters = 20000
batch_size = 128    # 批处理大小128,每一次128张图片进行训练
display_step = 10    # 每10个记录打印一次
n_input = 784   #28x28
n_classes = 10
dropout = 0.75

构建网络模型(因为卷积函数、池化函数和标准化我们用的比较多,把它们封装起来,后续的可以直接调用)

def conv2d(name,x,W,b,strides=1):
    x = tf.nn.conv2d(x,W,strides=[1,strides,strides,1],padding='SAME')    # tf.nn.conv2d函数
    x = tf.nn.bias_add(x,b)                                              # 加一个bias
    return tf.nn.relu(x,name=name)   # 做激活

def maxpool2d(name,x,k=2):
    return tf.nn.max_pool(x,ksize=[1,k,k,1],strides=[1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值