TensorFlow高层封装之TensorFlow-Slim
转载请注明出处:https://blog.csdn.net/qq_41007606/article/details/82015656
高层封装总览
目前比较主流的Tensorflow高层封装主要有4个,分别是TensorFlow-Slim、TFLearn、Keras和Estimator。
其中,Slim是Google官方给出的相对较早的Tensorflow高层封装,Google通过Slim开源了许多已经训练好的图片分析模型,所以目前在图像识别问题中Slim仍被较多地使用。
下面我们来通过例子来看一下如何使用Slim搭建深度神经网络。
本例介绍使用Slim在MNIST数据集上实现LeNet-5模型,其它模型的实现方法类似。
Code:
一、导入依赖的包
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np
二、导入MNIST数据集
from tensorflow.examples.tutorials.mnist import input_data
三、使用Slim定义LeNet-5的网络结构
def LeNet-5(inputs):
inputs = tf.reshape(inputs, [-1, 28, 28, 1])
#定义一个卷积层,深度为32,滤波器尺寸为5x5,全0填充
conv1 = slim.conv2d(inputs, 32, [5, 5], padding='SAME', scope='layer1-conv1')
#定义一个池化层,滤波器大小为2x2,步长为2
pool1 = slim.max_pool2d(conv1, 2, stride=2, scope='layer2-pool1')
#后面类似
conv2 = slim.conv2d(pool1, 64, [5, 5], padding='SAME', scope='layer3-conv2')
pool2 = slim.max_pool2d(conv2, 2, stride=2, scope='layer4-pool2')
#将4维矩阵直接通过flatten函数转化为2维
pool2 = slim.flatten(pool2, scope='flatten')
#全连接层
full1 = slim.fully_connected(pool2, 512, scope='layer5-hidden')
full2 = slim.fully_connected(full1, 10, scope='layer6-output')
return full2
四、定义输入
x = tf.placeholder(tf.float32, [None, 784], name='x')
y = tf.placeholder(tf.float32, [None, 10], name='y')
五、输出结果
y_ = LeNet-5(x)
六、定义损失函数
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y_, labels=tf.argmax(y,1))
loss = tf.reduce_mean(cross_entropy)
七、设置训练方法
optimization = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
八、训练,后面的训练传参代码和普通用法一样,这里不再做冗余叙述。
如果觉得博主的文章对您有所帮助,记得关注一下呦!您的支持就是我不断更新下去的最强动力。
如有不对的地方请指正,谢谢
有需要深度学习及机器视觉相关开发环境的可加博主QQ获取,有问题请联系下方QQ直接与博主本人交流。博主会定期更新视觉相关算法使用及实际项目讲解,谢谢各位
博主QQ:2021907249