最近开始接触TensorFlow,感觉它的语法还是比较繁琐的。
把TensorFlow里面和python差别很大的地方笔记一下:
#定义一个常量
hello = tf.constant('Hello,Tensorflow')
a = tf.constant(10)
#定义一个变量
x = tf.Variable(tf.zeros[4,4])
init = tf.initalize_all_variables()
这里最后一行必须得写,位置在所有常量和变量定义完之后,不写会报错
#占位符
x = tf.placeholder(tf.float32,[None,784])
这是当还没有确定要给变量赋什么值,先申请个变量名和空间,这里传的是变量的shape
"""
图的概念
x = 3
y = 4
z = x + y
print(z)
"""
如果想像python一样执行类似的操作,就得先理解tf的图的作用。x,y,z分别是三个tensor对象,对象间的运算称之为操作(op), tf不会去一条条地执行各个操作,而是把所有的操作都放入到一个图(graph)中,图中的每一个结点就是一个操作。然后行将整个graph 的计算过程交给一个 TensorFlow 的Session, 此 Session可以运行整个计算过程,比起操作(operations)一条一条的执行效率高的多。
所以上述操作在tf中是这样呈现的:
x = tf.Variable(3)
y = tf.Variable(4)
z = x + y
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print(sess.run(z))
Session需要先创建,使用完后还需要释放。因此我们使用with…as…语句,让系统自动释放。
#加法和乘法
a = tf.placeholder(tf.int16)
b = tf.placeholder(tf.int16)
add = tf.add(a, b)
mul = tf.mul(a, b)
with tf.Session() as sess:
print('a+b=',sess.run(add, feed_dict={a: 2, b: 3}))
print('a*b=',sess.run(mul, feed_dict={a: 2, b: 3}))
再看一个实例,这个实例可以用来理解tf传值的基本操作
#coding:utf-8
import tensorflow as tf
# 创建一个变量state,初始值是0,名称是counter
state = tf.Variable(0, name='counter')
# 定义常量 one
one = tf.constant(1)
# 定义加法步骤 (注: 此步并没有直接计算,再调用时才计算)
new_value = tf.add(state, one)
# 将 State 更新成 new_value
update = tf.assign(state, new_value)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print sess.run(state)
print "第一次打印"
for _ in range(3):
sess.run(update)
print(sess.run(state))
print(sess.run(one))
输出结果是:
0
第一次打印
1
1
2
1
3
1