【TF-1-1】Tensorflow实验--入门
目录
- 实现一个累加器,并且每一步均输出累加器的结果值
- 实现动态的更新变量的维度数目
-
实现一个求解阶乘的代码
使用已介绍的相关TensorFlow相关知识点,实现以下三个功能(变量更新)
一、实现一个累加器,并且每一步均输出累加器的结果值
1 # 1. 定义一个变量 2 x = tf.Variable(1, dtype=tf.int32, name='v_x') 3 # 2. 变量的更新 4 # x = x+1 #这种操作不行 5 assign_op = tf.assign(ref=x, value=x + 1)#更新操作Update `ref` by assigning `value` to it. 6 # 3. 变量初始化操作 7 x_init_op = tf.global_variables_initializer() 8 # 3. 运行 9 with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess: 10 sess.run(x_init_op) # 变量初始化 11 # 模拟迭代更新累加器 12 for i in range(5): 13 sess.run(assign_op) # 执行更新操作 14 r_x = sess.run(x) 15 print(r_x) 16
结果:
二、 实现动态的更新变量的维度数目
1 import tensorflow as tf 2 # 1. 定义一个不定形状的变量 3 x = tf.Variable( 4 initial_value=[], # 给定一个空值 5 dtype=tf.float32, trainable=False, 6 validate_shape=False # 设置为True,表示在变量更新的时候,进行shape的检查,默认为True 7 ) 8 # 2. 变量更改 9 concat = tf.concat([x, [0.0, 0]], axis=0) 10 assign_op = tf.assign(x, concat, validate_shape=False) 11 # 3. 变量初始化操作 12 x_init_op = tf.global_variables_initializer() 13 # 3. 运行 14 with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess: 15 sess.run(x_init_op) # 变量初始化 16 # 模拟迭代更新累加器 17 for i in range(5): 18 sess.run(assign_op) # 执行更新操作 19 r_x = sess.run(x) 20 print(r_x) 21
结果:
三、实现一个求解阶乘的代码
1 # 1. 定义一个变量 2 sum = tf.Variable(1, dtype=tf.int32) 3 # 2. 定义一个占位符 4 i = tf.placeholder(dtype=tf.int32) 5 # 3. 更新操作 6 tmp_sum = sum * i 7 assign_op = tf.assign(sum, tmp_sum) 8 # 4. 变量初始化操作 9 x_init_op = tf.global_variables_initializer() 10 # 5. 运行 11 with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess: 12 sess.run(x_init_op) # 变量初始化 13 # 模拟迭代更新累加器 14 for j in range(1, 6): 15 r = sess.run(assign_op, feed_dict={i: j}) 16 print("5!={}".format(r))
结果:
需求三的另一种写法:
1 # 1. 定义一个变量 2 sum = tf.Variable(1, dtype=tf.int32) 3 # 2. 定义一个占位符 4 i = tf.placeholder(dtype=tf.int32) 5 # 3. 更新操作 6 tmp_sum = sum * i # 一样的效果 tmp_sum = tf.multiply(sum, i) 7 assign_op = tf.assign(sum, tmp_sum) 8 with tf.control_dependencies([assign_op]): 9 # 如果需要执行这个代码块中的内容,必须先执行control_dependencies中给定的操作/tensor 10 sum = tf.Print(sum, data=[sum, sum.read_value()], message='sum:') 11 # 4. 变量初始化操作 12 x_init_op = tf.global_variables_initializer() 13 # 5. 运行 14 with tf.Session(config=tf.ConfigProto(log_device_placement=True, allow_soft_placement=True)) as sess: 15 sess.run(x_init_op) # 变量初始化 16 # 模拟迭代更新累加器 17 for j in range(1, 6): 18 # 执行更新操作 19 # 通过control_dependencies可以指定依赖关系,这样的话,就不用管内部的更新操作了 20 r = sess.run(sum, feed_dict={i: j}) 21 print("5!={}".format(r))