您的位置:首页 > 其它

tensorflow新手入门学习笔记

2018-12-18 16:52 337 查看

tensorflow新手入门学习笔记

入门基本内容

tensorflow是一个很有意思的框架。tensor是这个框架里的一个主要的数据类型,本质类似一个多维数组。框架的主体是,一般只使用默认图即可。高阶用法可以管理多个图。在这个框架中所有运算(option)都是一个节点,数据(tensor)就在不同的节点间流动(flow),通过运算发生改变,这就是tensorflow名称的由来。在创建阶段,将需要的节点加入图中,之后通过图调用不同节点进行运算。不同节点之间是并行运行的。

option

option即节点,就像是一个函数,数据传进来,然后返回运算后的结果。
添加option的语法为 y = tf.option(x1,x1,…,xn)。
其中输入输出均为tensor,一般输入都是其他option的输出。如果需要使用临时的tensor作为输入,则需要使用以下代码。

x1 = tf.placeholder(tf.types.float32)

这行代码就创建了一个float32类型的临时tensor,实际使用时需要给input1临时赋值,使用feed语句。

feed_dict={x1:[7.]}

完整代码示例如下:

x1 = tf.placeholder(tf.types.float32) #创建一个临时tensor
x2 = tf.constant(3.0) #创建一个返回常量的option
y = tf.add(x1 , x2) #创建一个运行加法的option

feed语句在调用时使用,后面讲。

变量

在tensorflow中使用tf.Variable创建变量:

#创建一个值为0,名字为“one_variable”的变量
x = tf.Variable(0, name = "one_variable")

变量有很多操作,因为刚入门,只写最简单的赋值操作:

x = tf.Variable(0., name = "one_variable") #创建变量
value = tf.constant(2.0) #创建常量
update = tf.assign(x, value) #用value给x赋值,注意要类型相同

框架的启动

tensorflow框架的主体是,程序的运算节点都是添加在里的,在运行时通过取得节点的运算结果。

sess = tf.Session() #创建图对象,没有参数的默认情况下启动默认图

要通过取得节点的运算结果,就要了解tensorflow中的fetch概念。
fetch英文原义是去某个地方取得某个东西,这里的意思也类似。fetch指从中获取某一个或者某几个节点的运算结果。
代码如下:

x1 = tf.constant(2.0)           #一个返回常量值的节点
x2 = tf.constant(3.0)           #另一个返回常量值的节点
sess = tf.Session()             #创建图对象
y = sess.run(x1)                #运行图,取得x1值并返回,即fetch
print(y)                        #输出y
#输出结果:2.0
y = sess.run([x1, x2])          #运行图,取得x1, x2值并返回,即fetch
print(y)                        #输出y
#输出结果:[2.0, 3.0]

需要注意的是,在节点没有先后顺序,是并行的。fetch时,会自动运行所有涉及到的节点,一次取回所有结果。
下面就附上入门篇比较完整的代码,庆祝自己又熟练掌握了一种“Hello, World!”:

import tensorflow as tf

#基本变量与常量节点定义
hello = tf.constant('Hello, World!')
one = tf.constant(1.0)
three = tf.constant(3.0)
temp = tf.placeholder(tf.float32)
variable = tf.Variable(0.0, name = 'counter')

#主要计算节点定义
add_one_three = tf.add(one, three)
add_variable_one = tf.add(variable, one)
add_one_temp = tf.add(one, temp)
update = tf.assign(variable, add_variable_one)

#初始化节点,有变量时需要
init_op = tf.global_variables_initializer()

#创建图对象
sess = tf.Session()

#初始化
sess.run(init_op)

#计算与输出
y = sess.run(hello)
print(y)
#输出:b'Hello, World'

y = sess.run([one, three])
print(y)
#输出:[1.0, 3.0]

y = sess.run(add_one_three)
print(y)
#输出:4.0

y = sess.run(add_one_temp, feed_dict = {temp: 9.0})
print(y)
#输出:10.0

for i in range(3):
sess.run(update)
y = sess.run(variable)
print(y)
#输出:
#1.0
#2.0
#3.0

#关闭图
sess.close()

tensorflow运行时两个警告消除方法

在跑demo的过程中一直有两个警告,虽然没有什么影响,但是还是很不舒服,一顿操作后终于解决了这两个问题。

FutureWarning: Conversion of the second argument of issubdtype from
float
to
np.floating
is deprecated. In future, it will be treated as
np.float64 == np.dtype(float).type
.

这个是库里h5py包版本过旧,更新即可,使用命令:

pip install h5py==2.8.0rc1

更新后警告就消失了。

Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2

这个是因为tensorflow支持对cpu的优化,但是默认安装的tensorflow都是X86_64的SIMD版本,跟AVX2的SIMD版本cpu指令集不同。
解决办法就是先卸载现有的tensorflow,使用指令:

pip uninstall tensorflow

然后在github上找到自己版本的tensorflow下载。
链接如下:
windows
其他操作系统
我下载的是1.12.0\py36\CPU\avx2,因为我的python版本是3.6,之后使用指令:

pip install tensorflow-1.12.0-cp36-cp36m-win_amd64.whl

重新安装下载的tensorflow即可。
注:下载不同版本的tensorflow使用的安装指令也不同,先在cmd中进入下载文件所在的目录再使用指令安装,不然会找不到文件。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: