在numpy
中,可以很容易地完成
>>> img
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=int32)
>>> img[img>5] = [1,2,3,4]
>>> img
array([[1, 2, 3],
[4, 5, 1],
[2, 3, 4]], dtype=int32)
但是,在张量流中似乎不存在类似的操作。
答案 0 :(得分:2)
您永远无法为张量流中的张量分配值,因为无法通过反向传播来追踪张量值的变化,但是您仍然可以从原始张量中获得另一个张量,这是解决方法
import tensorflow as tf
tf.enable_eager_execution()
img = tf.constant(list(range(1, 10)), shape=[3, 3])
replace_mask = img > 5
keep_mask = tf.logical_not(replace_mask)
keep = tf.boolean_mask(img, keep_mask)
keep_index = tf.where(keep_mask)
replace_index = tf.where(replace_mask)
replace = tf.random_uniform((tf.shape(replace_index)[0],), 0, 10, tf.int32)
updates = tf.concat([keep, replace], axis=0)
indices = tf.concat([keep_index, replace_index], axis=0)
result = tf.scatter_nd(tf.cast(indices, tf.int32), updates, shape=tf.shape(img))
答案 1 :(得分:0)
实际上,有一种方法可以实现这一目标。与@ Jie.Zhou的答案非常相似,您可以将tf.constant
替换为tf.Variable
,然后将tf.scatter_nd
替换为tf.scatter_nd_update