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中进入下载文件所在的目录再使用指令安装,不然会找不到文件。