————————————————————————————
原文发表于夏木青 | 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网络,并训练测试。
要求:
可以定义为一个函数,例如:
def lenet(images):
用with slim.arg_scope …: 去管理 lenet中所有操作的默认参数, 例如activation_fn, weights_initializer, 等。。。
编写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
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
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}))