深度学习 | 实战5-用slim 定义Lenet网络,并训练测试

————————————————————————————
原文发表于夏木青 | JoselynZhao Blog,欢迎访问博文原文
————————————————————————————

Github源码

深度学习教程与实战案列系列文章


深度学习 | 绪论
深度学习 | 线性代数基础
深度学习 | 机器学习基础
深度学习 | 实践方法论
深度学习 | 应用
深度学习 | 安装conda、opencv、pycharm以及相关问题
深度学习 | 工具及实践(TensorFlow)
深度学习 | TensorFlow 命名机制和变量共享、变量赋值与模型封装
深度学习 | TFSlim介绍
深度学习 | TensorFlow可视化
深度学习 | 训练及优化方法
深度学习 | 模型评估与梯度下降优化
深度学习 | 物体检测
深度学习| 实战1-python基本操作
深度学习 | 实战2-TensorFlow基础
深度学习 | 实战3-设计变量共享网络进行MNIST分类
深度学习 | 实战4-将LENET封装为class,并进行分类
深度学习 | 实战5-用slim 定义Lenet网络,并训练测试
深度学习 | 实战6-利用tensorboard实现卷积可视化
深度学习 | 实战7- 连体网络MINIST优化
深度学习 | 实战8 - 梯度截断
深度学习 | 实战9- 参数正则化


要求

Slim Lenet

用slim 定义Lenet网络,并训练测试。

要求:

  1. 将Lenet 单独定义到Lenet.py 文件

可以定义为一个函数,例如:

def lenet(images):

  1. 用with slim.arg_scope …: 去管理 lenet中所有操作的默认参数, 例如activation_fn, weights_initializer, 等。。。

  2. 编写mnist_train.py脚本,训练slim定义的lenet做MNIST字符分类。

这里可以不要求用slim中的slim.learning.train,因为这个涉及转换数据为TFRecord以及用队列读取等复杂操作去自动取数据。

大家可以还用以前的sess.run 去训练模型。

提交:

文档、源码。文档包括训练截屏、结果图片等,能帮助老师快速判断结果是否正确。

必须按照要求去完成作业。

实验与结果

运行截图
图 1 开始运行,每500轮输出一个结果

在这里插入图片描述
图 2 运行结束。因为实验平台是Macbook air,没有GPU用以训练,CPU训练很慢很烧电脑,这里就只开了10000轮的训练,但应该对训练结果的影响不大。
在这里插入图片描述

图 3 实验结果。 最后训练出来的模型在测试集上的准确率是0.9887.
在这里插入图片描述

参数设置
图 4 迭代10000轮,batch_size是64,学习率是0.1

在这里插入图片描述

代码展示

LENET

def lenet(image):
    with slim.arg_scope([slim.conv2d, slim.fully_connected],
                        activation_fn=tf.nn.relu,
                        weights_initializer=tf.truncated_normal_initializer(0.0,0.1), #mu,sigma
                        weights_regularizer=slim.l2_regularizer(0.1)):
        net = slim.conv2d(image, 6, [5, 5], stride=1, padding="VALID", scope="conv1")
        net = slim.max_pool2d(net, [2, 2], stride=2, padding="VALID", scope="pool1")
        net = slim.conv2d(net,16,[5,5],stride=1,padding = "VALID",scope ="conv2")
        net = slim.max_pool2d(net,[2,2],stride=2,padding="VALID",scope="pool2")
        net = slim.flatten(net,scope="flatten")
        net = slim.fully_connected(net,120, scope='fc1')
        net = slim.fully_connected(net,84, scope='fc2')
        net = slim.fully_connected(net,10,activation_fn=None, scope='fc3')
        return net

mnist_train

if __name__ =="__main__":
    mnist = input_data.read_data_sets('../../../data/mnist', one_hot=True)
    x_test = np.reshape(mnist.test.images, [-1, 28, 28, 1])
    x_test = np.pad(x_test, ((0, 0), (2, 2), (2, 2), (0, 0)),'constant')  # print("Updated Image Shape: {}".format(X_train[0].shape))

    iteratons = 10000
    batch_size = 64
    lr = 0.1

    x = tf.placeholder(tf.float32, [None, 32, 32, 1])
    y_ = tf.placeholder(tf.float32, [None, 10])
    y = lenet(x)
    cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y, labels=y_))
    train_step = tf.train.GradientDescentOptimizer(learning_rate=lr).minimize(cross_entropy)
    # 准确率
    correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float'))
    init = tf.global_variables_initializer()

    sess = tf.Session()
    sess.run(init)
    for i in range(iteratons):
        batch_xs,batch_ys = mnist.train.next_batch(batch_size)
        batch_xs = np.reshape(batch_xs, [-1, 28, 28, 1])
        batch_xs = np.pad(batch_xs, ((0, 0), (2, 2), (2, 2), (0, 0)), 'constant')
        sess.run([train_step,cross_entropy],feed_dict={x:batch_xs,y_:batch_ys})
        if i % 500 ==1:
            acc = sess.run(accuracy,feed_dict={x:x_test,y_:mnist.test.labels})
            print("%5d: accuracy is: %4f" % (i, acc))

    print('[accuracy,loss]:',sess.run([accuracy,cross_entropy],feed_dict={x:x_test,y_:mnist.test.labels}))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Summer tree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值