TF Boys (TensorFlow Boys ) 养成记(一)

本资料是在Ubuntu14.0.4版本下进行,用来进行图像处理,所以只介绍关于图像处理部分的内容,并且默认TensorFlow已经配置好,如果没有配置好,请参考官方文档配置安装,推荐用pip安装。关于配置TensorFlow,官方已经说得很详细了,我这里就不啰嗦了。官方教程看这里:https://www.tensorflow.org/get_started/os_setup

如果安装了GPU版本的TensorFlow,还需要配置Cuda,关于Cuda安装看这里:https://www.tensorflow.org/get_started/os_setup#optional-install-cuda-gpus-on-linux

我们还需要一个Python编译器,这里我们使用Anaconda,Anaconda2对应Python2,Anaconda3对应Python3,我使用Anaconda2。Anaconda自带了一些常用的Python包,以及一些比较好用的Python编译器。

配置好TensorFlow以后,打开Anaconda的Spyder,输入以下代码检查TensorFlow是否可用。

import tensorflow as tf
hello = tf.constant(‘Hello TensorFlow!‘)
sess = tf.Session()
print(sess.run(hello))
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))

如果遇到任何报错,请参考:https://www.tensorflow.org/get_started/os_setup#common_problems

使用TensorFlow之前,要了解一下TensorFlow的基本知识:

1. 使用图(graphs)来表示计算;

2.在会话(Session)中执行图;

3.使用张量(tensors)来代表数据;

4.通过变量(variables)来维护状态;

5.使用供给(feeds)和取回(fetches)来传入或者传出数据。

关于详细的基础使用,请参考:https://www.tensorflow.org/get_started/basic_usage, 太长不看的,至少看下代码以及代码的注释。

了解了这些基本用法以后,活动一下筋骨,来编个小程序测试一下我们学习的结果吧,目标是优化一个一次函数y = wx + b的权值w和偏置b,使得w和b接近给定的表达式y = 0.1*x + b,代码如下:

import tensorflow as tf
import numpy as np
import os
# 占用 0 号 GPU 的 20% 空间
os.environ[‘CUDA_VISIBLE_DEVICES‘]=‘0‘
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction=0.2
sess = tf.InteractiveSession(config=config)

x_data = np.random.rand(100).astype("float32")
y_data = x_data * 0.1 + 0.3

W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
init = tf.initialize_all_variables()
sess.run(init)
for step in xrange(201):
    sess.run(train)
    if step % 20 ==0:
        print(step, sess.run(W), sess.run(b))

代码运行结果如下:

可以看到经过200次迭代,权重w已经接近预设值0.1,b 接近预设值0.3,实际上80次的时候已经收敛到很好的结果了。

接下来,我们进行下一步的工作,用神经网络来进行MNIST手写数字的识别,MNIST手写数字分 training 和 test 两个大类,training 有6万张28*28大小的手写数字,test有1万张28*28大小的数字,更具体的介绍看这里:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges

MNIST手写数字识别在TensorFlow的example中有自带的代码来实现,官方文档也给出了很好的解释,https://www.tensorflow.org/tutorials/mnist/beginners/https://www.tensorflow.org/tutorials/mnist/pros/这两个,建议都看,加强自己对TensorFlow的理解。

至此,TensorFlow已经有了基本的入门知识,然鹅,还是不足以支撑我膨胀的野心,我是要成为加勒比海盗一样的男人,我是要成为TF Boys一样的男人(背景声音:噫~~),这种基本知识怎么能满足得了我这么优秀的头脑。

接下来,我们来看TensorFlow Mechanics 101,说实话,我也不知道这个名字是什么意思,反正是个教程,管他呢,先学会再说。这里面看起来也不难啊,就是介绍了examples/tutorials/mnist/mnist.py 和 examples/tutorials/mnist/fully_connected_feed.py两个函数,顺便说一下,用pip安装之后的TensorFlow目录一般在:/usr/local/lib/python2.7/dist-packages/tensorflow/或者是/usr/lib/python2.7/dist-packages/tensorflow/这里。细看这两个文件的代码,不是很难,如果前面的知识认真看了,这个可以直接看代码而不看官方文档,实在不明白的地方可以看官方文档的解释。

在看代码的过程中,有不明白的函数,就去Python API这里找相应的函数来看,https://www.tensorflow.org/api_docs/python/,找不到的话,可以点右上角的搜索来搜索该函数。

先写到这里,明天更新TensorFlow的How To。

参考文献:

1. https://www.tensorflow.org/tutorials/

时间: 12-19

TF Boys (TensorFlow Boys ) 养成记(一)的相关文章

TF Boys (TensorFlow Boys ) 养成记(五)

郑重声明:此文为本人原创,转载请注明出处:http://www.cnblogs.com/Charles-Wan/p/6207039.html 有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输入如下代码: from __future__ import absolute_import # 绝对导入 from __future__ import div

TF Boys (TensorFlow Boys ) 养成记(三)

上次说到了 TensorFlow 从文件读取数据,这次我们来谈一谈变量共享的问题. 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生成的图像,判别器就尝试优化自己的网络结构来使自己输出0,如果接收到的是来自真实数据的图像,那么就尝试优化自己的网络结构来使自己输出1.也就是说,生成图像和真实图像经过判别器的时候,要共享同一套变量,所以TensorFlow引入了变量共享机制. 变量共享主要涉及到两个函数: tf.get_variab

TF Boys (TensorFlow Boys ) 养成记(六)

圣诞节玩的有点嗨,差点忘记更新.祝大家昨天圣诞节快乐,再过几天元旦节快乐. 来继续学习,在/home/your_name/TensorFlow/cifar10/ 下新建文件夹cifar10_train,用来保存训练时的日志logs,继续在/home/your_name/TensorFlow/cifar10/ cifar10.py中输入如下代码: def train(): # global_step global_step = tf.Variable(0, name = 'global_step'

TF Boys (TensorFlow Boys ) 养成记(二)

TensorFlow 的 How-Tos,讲解了这么几点: 1. 变量:创建,初始化,保存,加载,共享: 2. TensorFlow 的可视化学习,(r0.12版本后,加入了Embedding Visualization) 3. 数据的读取: 4. 线程和队列: 5. 分布式的TensorFlow: 6. 增加新的Ops: 7. 自定义数据读取: 由于各种原因,本人只看了前5个部分,剩下的2个部分还没来得及看,时间紧任务重,所以匆匆发车了,以后如果有用到的地方,再回过头来研究.学习过程中深感官方

前端工程师养成记:开发环境搭建(Sublime Text必备插件推荐)

为了让自己更像一个前端工程师,决定从开发环境开始武装自己.本文将介绍前段工程师开发的一些利器的安装步骤,主要包括了: 1.Node.js的安装 2.Grunt的安装及常用插件 3.Sublime Text的安装及必备插件 一.Node.js的安装 Node.js就是一堆前端工程师捧红的,所以装上这个嘛,主要不是自己需要使用Node.js而是一堆工具对他的依赖. Windows下安装步骤很简单: 1.去到http://nodejs.org/下载最新的安装包,安装. 2.在CMD下运行,node和n

中产阶级养成记:现代人需要的8点能力素养(一)(不服来战,欢迎勾搭)

首先,要说明"中产阶级养成记",这个确实有点"标题党"了.我自认为,关于以下几点的能力素养,对从贫穷晋升到中产阶级方面,有很大帮助,至少我现在是这么想的,也认为是可行的. 自己的家庭或者说家族,本来就是那种平民百姓,在早期属于"农民",最近些年,属于"半农半工","全工"的状态. 作为整个家庭,甚至是家族,几代人中间唯一的一个有较高含金量的"大学生" ,我最想做的事情之一,就是想在经济方

【活动】DevOps直播技术架构养成记

背景 半月前,参加了UCloud直播云的活动,主题"DevOps|直播技术架构养成记",很是不错的.能够整理出本篇博文,非常感谢参加会议的朋友们在微信群中提供的非常好的资料,以作分享. Now, go into! 低延迟.秒开? 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调,视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看,主播不满足于单向的直播,观众则更渴望互动,直播的打开时间和延迟变成了影响产品功能发展重要指标.那么,问题来了:如何实现低

2016级算法第六次上机-C.AlvinZH的学霸养成记II

1032 AlvinZH的学霸养成记II 思路 中等题,贪心. 所有课程按照DDL的大小来排序. 维护一个当前时间curTime,初始为0. 遍历课程,curTime加上此课程持续时间d,如果这时curTime大于此课程DDL,表示无法学习此课程,但是我们不减去此课程,而是减去用时最长的那门课程(优先队列队首,课时最长). 贪心: 假设当前课程为B,被替换课程为A,则有A.d≥B.d,A.e≤B.e.既然curTime+A.d≤A.e,那么curTime+B.d≤B.e绝对成立,保证了B的合法性

网络工程师高手养成记(集),你凑齐了吗?

多数网工都听过很多教程,看过很多书,尤其是刚毕业的网工,刚刚考完CCIE或HCIE,斗志昂扬,但在听到需求后却无从下手. 那些老师没讲过的知识? 老师讲过OSPF骨干区域和Normal区域,讲过各种LSA,但没讲一个城市5个Site该怎么连接最好,拉光纤,MSTP专线,MPLS专线还是IPSEC V P N ?VLAN怎么设计,1个楼层1个还是俩楼层一个?一个Mac笔记本用户使用无线丢包该怎么排错? 给你一张CAD图,你怎么部署设计AP?安全部门要求你办公网全网IP可溯源(查找某一时刻这个IP谁