tf.assign()、tf.assign_add()、tf.assign_sub()函数介绍和示例
1. tf.assign(ref, value, validate_shape=True, use_locking=None, name=None)
释义:将 value 赋值给 ref,即 ref = value
- ref,变量
- value,值
- validate_shape,默认 True,值 shape 需要与变量 shape 一致;若设为 False,则值 shape 覆盖变量 shape
- use_locking,默认 False,若为 True,则受锁保护
- name,名称
示例:
import tensorflow as tf
x = tf.Variable(1., dtype=tf.float32)
y = tf.constant(2., dtype=tf.float32)
z = tf.assign(x, y) # 单个值赋值
X = tf.Variable(tf.ones([2, 3]), dtype=tf.float32)
Y = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
Z = tf.assign(X, Y) # 矩阵赋值(变量与值 shape 相同)
X_ = tf.Variable(1.0, dtype=tf.float32)
Y_ = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
Z_ = tf.assign(X_, Y_, validate_shape=False) # 矩阵赋值(变量与值 shape 不同)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print('赋值操作前 x:', sess.run(x))
print('赋值操作 z:', sess.run(z))
print('赋值操作后 x:', sess.run(x))
print('='*30)
print('赋值操作前 X:\n', sess.run(X))
print('赋值操作 Z:\n', sess.run(Z))
print('赋值操作后 X:\n', sess.run(X))
print('='*30)
print('赋值操作前 X_:\n', sess.run(X_))
print('赋值操作 Z_:\n', sess.run(Z_))
print('赋值操作后 X_:\n', sess.run(X_))
赋值操作前 x: 1.0
赋值操作 z: 2.0
赋值操作后 x: 2.0
==============================
赋值操作前 X:
[[1. 1. 1.]
[1. 1. 1.]]
赋值操作 Z:
[[1. 2. 3.]
[4. 5. 6.]]
赋值操作后 X:
[[1. 2. 3.]
[4. 5. 6.]]
==============================
赋值操作前 X_:
1.0
赋值操作 Z_:
[[1. 2. 3.]
[4. 5. 6.]]
赋值操作后 X_:
[[1. 2. 3.]
[4. 5. 6.]]
2. tf.assign_add(ref, value, use_locking=None, name=None)
释义:将值 value 加到变量 ref 上, 即 ref = ref + value
- ref,变量
- value,值
- use_locking,默认 False, 若为 True,则受锁保护
- name,名称
示例:
import tensorflow as tf
x = tf.Variable(1., dtype=tf.float32)
y = tf.constant(2., dtype=tf.float32)
z = tf.assign_add(x, y) # 单个值相加
X = tf.Variable(tf.ones([2, 3]), dtype=tf.float32)
Y = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
Z = tf.assign_add(X, Y) # 矩阵对应位置相加,将值赋给 X
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print('加操作前 x:', sess.run(x))
print('加操作 z:', sess.run(z))
print('加操作后 x:', sess.run(x))
print('='*30)
print('加操作前 X:\n', sess.run(X))
print('加操作 Z:\n', sess.run(Z))
print('加操作后 X:\n', sess.run(X))
加操作前 x: 1.0
加操作 z: 3.0
加操作后 x: 3.0
==============================
加操作前 X:
[[1. 1. 1.]
[1. 1. 1.]]
加操作 Z:
[[2. 3. 4.]
[5. 6. 7.]]
加操作后 X:
[[2. 3. 4.]
[5. 6. 7.]]
3. tf.assign_sub(ref, value, use_locking=None, name=None)
释义:变量 ref 减去 value值,即 ref = ref - value
- ref,变量
- value,值
- use_locking,默认 False, 若为 True,则受锁保护
- name,名称
示例:
import tensorflow as tf
x = tf.Variable(1., dtype=tf.float32)
y = tf.constant(2., dtype=tf.float32)
z = tf.assign_sub(x, y) # 单个值相减
X = tf.Variable(tf.ones([2, 3]), dtype=tf.float32)
Y = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
Z = tf.assign_sub(X, Y) # 矩阵对应位置相减,将值赋给 X
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
print('减操作前 x:', sess.run(x))
print('减操作 z:', sess.run(z))
print('减操作后 x:', sess.run(x))
print('='*30)
print('减操作前 X:\n', sess.run(X))
print('减操作 Z:\n', sess.run(Z))
print('减操作后 X:\n', sess.run(X))
减操作前 x: 1.0
减操作 z: -1.0
减操作后 x: -1.0
==============================
减操作前 X:
[[1. 1. 1.]
[1. 1. 1.]]
减操作 Z:
[[ 0. -1. -2.]
[-3. -4. -5.]]
减操作后 X:
[[ 0. -1. -2.]
[-3. -4. -5.]]