Tensorflow快速入门3–代码结构及模型例子

环境:

​ 虚拟机ubuntun16.0.4; Tensorflow版本:0.12.0(仅使用cpu下的) ,

​ Tensorflow安装见:

http://blog.csdn.net/yhhyhhyhhyhh/article/details/54429034

或者:

http://www.tensorfly.cn/tfdoc/get_started/os_setup.html

​ 学习一个新框架、新模型,通常会先找相关的demo例程跑一下,然而Tensorflow版本更新快,接口也变化,初学者一开始就分析源码、学习框架会感觉很困难,Tensorflow本身附带了很多例程,网上很多博客、帖子其实都是Tensorflow本身附带的例子。本文简单分析一些Tensorflow代码结构及模型例子,很多例子都是可以直接运行的,当然考虑到训练时间及电脑的配置,可以自行修改相应参数,以便快速上手,适合初学者练习。

1.Tensorflow代码结构

​ Tensorflow github地址:https://github.com/tensorflow

这里写图片描述

1.1源码目录

tensorflow:

这里写图片描述

重要目录:

  • 目录contrib 该目录下存放有其他项目贡献者添加的相关贡献代码
  • 目录core 该目录为tensorflow的C++源码的核心
  • 目录g3doc是针对c++、python的版本的代码文档
  • 目录example下有andord系统的一个示例
  • 目录python 该目录下存放了tensorflow使用python编写的相关代码,是和”core“目录对应的python实现目录
  • stream_executor,流处理,看里面还有dnn之类,具体详细待定
  • 目录tensorboard 是tensorflow中非常有特色的一个模块,该模块可以用于生成模型训练中实时生成图表,用于监控模型的训练程度。
  • 目录tools 一些工具杂项,pip。
  • 目录user_ops 用户可进行编写自己的op并添加到该目录。
1.2Tensorflow的core目录

这里写图片描述

​ core目录是tensorflow源码中最核心的一个目录,其代码逻辑主要为C++开发实现。

  • 目录common_runtime 该目录下包含了tensorflow中session执行的通用逻辑流程。
  • 目录distributed_runtime tensorflow 与分布式相关的执行逻辑。
  • 目录framework 该目录下对tensorflow进行计算过程中的通用组件进行了定义和实现。
  • 目录graph ,tensorflow图相关操作的逻辑。由于tensorflow中的数据计算本质上是一个图状结构的计算流程,该过程中存在将图进行切分并且并行化执行的可能性。该目录下的代码逻辑即为对图数据进行结构化定义并进行拆分的相关内容。
  • 目录kernels 对tensorflow中各个单步操作的具体实现。录下包含了大量的tensorflow中单步操作的实现方式。(如Variable())
  • 目录util/lib 一些公用的调用方法。
  • 目录ops对kernel/ 下的op进行注册和对外声明。
  • 目录protobuf ,tensorflow下各个模块间进行数据传输的数据结构定义,通过proto进行配置实现。
  • 目录public,删除、更新一些接口的声明
  • 目录user_ops 用户可进行编写自己的op并添加到该目录
1.3Tensorflow的models目录

​ 在models中包含很多经典的机器学习例程。

这里写图片描述

这里写图片描述

  • alexnet: alexnet(Imagenet Classification with Deep Convolutional Neural Networks)是在2012年被发表的一个经典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的神经网络被提出。
  • cifar10:在cifar_10数据集上的一个测试例程。
  • imagenet:ImageNet(http://www.image-net.org)是李菲菲组的图像库,该例程是个图像识别的demo。
  • mnist:卷积神经网络在手写数字识别的一个例程。

2.Tensorflow附带的模型例子

​ 我的ubuntun通过pip安装Tensorflow后,安装目录在:/usr/local/lib/python2.7/dist-packages/,可将整个Tensorflow文件夹复制到home下,便于编辑和修改。Tensorflow附带的模型例子在/tensorflow/models下。

20

2.1mnist

​ mnist是一个手写数字识别的数据集,包含60000行的训练数据集和10000行的测试数据集,每一个MNIST数据单元有两部分组成:一张包含手写数字的图片和一个对应的标签,大小为28x28像素的灰度图片。Tensorflow附带的mnist目录包含一个简单的卷积神经网络训练及测试mnist的demo。

数据集作用
data_sets.train55000 组 图片和标签, 用于训练。
data_sets.validation5000 组 图片和标签, 用于迭代验证训练的准确性。
data_sets.test10000 组 图片和标签, 用于最终测试训练的准确性。

Tensorflow中测试mnist的例程使用,直接在终端中运行以下:

yhh@ubuntu:~$ cd ~/Test/tensorflow/models/image/mnist/
yhh@ubuntu:~/Test/tensorflow/models/image/mnist$ python convolutional.py

这里写图片描述

​ 运行一下mnist例程,最终结果测试的正确率:92%

2.2Cifar-10

​ Cifar-10由60000张32*32的RGB彩色图片构成,共10个分类。50000张训练,10000张测试(交叉验证)。

/tensorflow/models/image/cifar_10下包含以下文件:

文件作用
cifar10_input.py读取本地CIFAR-10的二进制文件格式的内容
cifar10.py建立CIFAR-10的模型
cifar10_train.py在CPU或GPU上训练CIFAR-10的模型
cifar10_multi_gpu_train.py在多GPU上训练CIFAR-10的模型(没用GPU的话,不用管)
cifar10_eval.py评估CIFAR-10模型的预测性能

cifar10___train.py会调用 cifar___10.py中的接口, cifar__10.py会调用cifar10___input.py中的接口

Tensorflow中测试cifar10的例程使用,直接在终端中运行以下:

​ 1)开始训练

yhh@ubuntu:~/Test/tensorflow/models/image/cifar10$ python cifar10_train.py

​ 2)测试

yhh@ubuntu:~/Test/tensorflow/models/image/cifar10$ python cifar10_eval.py

注意:上述训练文件:cifar10_train.py中的max_steps在跑代码测试时可自行修改,太大的话训练时间太长了。

​ 由下图实验结果可知,训练次数max_steps还是很影像最终精确度的。

这里写图片描述

>结果:

这里写图片描述

2.3imagenet

​ ImageNet 模拟人类的识别系统建立的,能够从图片识别物体。目前世界上图像识别最大的数据库。Tensorflow0.12.0附带的测试例子是在ImageNet 2012 Challenge data set。

​ imagenet比赛设置:1000类图像分类问题,训练数据集126万张图像,验证集5万张,测试集10万张(标注未公布)。2012,2013,2014均采用了该数据集。评价标准采用top-5错误率,即对一张图像预测5个类别,只要有一个和人工标注类别相同就算对,否则算错。

Tensorflow中测试imagenet的例程使用,直接在终端中运行以下:

yhh@ubuntu:~/Test/tensorflow/models/image/imagenet$ python classify_image.py

输入为任意一张图片,输出为识别概率(1000类)最靠前的5类结果。(默认读取图片的路径为:/tmp/imagenet)

部分测试结果:

输入:

这里写图片描述

识别结果:

这里写图片描述

3.Tensorflow学习文档

Tenssorflow中文社区

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐