.eval() 和 sess.run()区别:
最主要的区别就在于使用.eval()
只能获取这个tensor的值,而使用sess.run()
可以同时获取多个tensor中的值,1
2
3
4
5
6
7
8t = tf.constant(42.0)
u = tf.constant(37.0)
tu = tf.mul(t, u)
ut = tf.mul(u, t)
with sess.as_default():
tu.eval() # runs one step
ut.eval() # runs one step
sess.run([tu, ut]) # evaluates both tensors in a single step
变量 和 两种Session()定义
1 | #第一种 session()定义方式 |
Tensor("Variable_11/read:0", shape=(1, 2), dtype=float32)
[[ 2.]]
计算操作需要在 Session()——会话(计算图的区域) 中进行;
而且在使用 variable 时还需要 初始化全局变量操作
1 | # 第二种 Session() 定义 |
[[ 3.78657341 -3.94182277 -3.65419507]
[-7.0396409 -5.51102114 3.56082773]]
[[5 6]
[1 2]
[3 4]]
三种variable初始化方式
1 | #第一种 |
1 | #第二种 |
1 | #第三种,一步到位 |
矩阵 和 常量
1 | # float32 |
对比 Numpy 操作,发现区别并不大
累加 演示
1 | state = tf.Variable(0) |
0
1
2
3
train.Saver() 保存 Session() 操作
1 | #tf.train.Saver |
Model saved in file: C://tensorflow//model//test
convert_to_tensor() 转换 numpy 的语法为 tensorflow 类型
1 | import numpy as np |
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
不推荐使用,还是建议使用 tensorflow 语法
Fetch and Feed
Fetch 把多个op放在一个数组中一起run
1 | # Fetch |
[5.0, 6.0]
Feed 在运行时,用字典结构给占位符赋值
1 | imput1 = tf.placeholder(tf.float32) |
使用flags定义命令行参数
tf定义了tf.app.flags,用于支持接受命令行传递参数,相当于接受argv。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import tensorflow as tf
#第一个是参数名称,第二个参数是默认值,第三个是参数描述
tf.app.flags.DEFINE_string('str_name', 'def_v_1',"descrip1")
tf.app.flags.DEFINE_integer('int_name', 10,"descript2")
tf.app.flags.DEFINE_boolean('bool_name', False, "descript3")
FLAGS = tf.app.flags.FLAGS
#必须带参数,否则:'TypeError: main() takes no arguments (1 given)'; main的参数名随意定义,无要求
def main(_):
print(FLAGS.str_name)
print(FLAGS.int_name)
print(FLAGS.bool_name)
if __name__ == '__main__':
tf.app.run() #执行main函数
执行:1
2
3
4
5
6
7
8
9
10//不带参数时:
[root@test]# python tt.py
def_v_1
10
False
//给定参数时:
[root@test]# python tt.py --str_name test_str --int_name 99 --bool_name True
test_str
99
True