TensorFlow高层封装之TensorFlow-Slim

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

猜你喜欢

转载自blog.csdn.net/qq_41007606/article/details/82015656
今日推荐