我有一个数组arr = tf.Variable(initial_value=[True, False, True], dtype=tf.bool)
现在,我需要翻转arr并将其在会话期间分配给新变量。我必须对循环中的每一位都执行此操作。
我可以在arr中进行就地替换,但会破坏原始张量arr 如下所示(不正确!)
import tensorflow as tf
arr = tf.Variable(initial_value=[True, False, True], dtype=tf.bool)
flipped_bit = tf.placeholder(dtype=tf.int32, shape=())
flipped_arr = tf.assign(arr[flipped_bit],
tf.math.logical_not(arr[flipped_bit]))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print('Original', sess.run(arr))
for i in range(0, 3):
print('flipped arr', i, sess.run(flipped_arr, feed_dict={flipped_bit: i}))
现在,我有一个创建遮罩的解决方案,但是我们可以仅通过使用tensorflow来做到这一点吗?
我有解决方案。
import tensorflow as tf
import numpy as np
arr = tf.Variable(initial_value=[True, False, True],
trainable=False,
dtype=tf.bool)
mask = tf.placeholder(dtype=tf.bool, shape=arr.shape)
flipped_arr = tf.math.logical_xor(arr, mask)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print('Original', sess.run(arr))
for flip_bit in range(0, 3):
mask_val = np.zeros(arr.shape)
mask_val[flip_bit] = 1
print('mask', mask_val)
print(
'flip_arr', flip_bit,
sess.run(flipped_arr,
feed_dict={
flipped_bit: flip_bit,
mask: mask_val
}))
答案 0 :(得分:0)
您可以在TF2中执行以下操作。我相信您可以在TF1中执行相同的操作。
arr = tf.constant([True, True, False], dtype=tf.bool)
flip = tf.constant([True, False, True], dtype=tf.bool)
flipped_arr = tf.math.logical_xor(arr, flip)
tf.print(arr, flipped_arr) # prints: [1 1 0] [0 1 1]