Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow中张量值的条件赋值_Python_Numpy_Tensorflow - Fatal编程技术网

Python TensorFlow中张量值的条件赋值

Python TensorFlow中张量值的条件赋值,python,numpy,tensorflow,Python,Numpy,Tensorflow,我想在tensorflow中复制以下numpy代码。例如,我想将0分配给以前值为1的所有张量索引 a = np.array([1, 2, 3, 1]) a[a==1] = 0 # a should be [0, 2, 3, 0] 如果我在tensorflow中编写类似的代码,我会得到以下错误 TypeError: 'Tensor' object does not support item assignment 方括号中的条件应该是任意的,如TensorFlow API中可用的a[a比较运算

我想在
tensorflow
中复制以下
numpy
代码。例如,我想将
0
分配给以前值为
1
的所有张量索引

a = np.array([1, 2, 3, 1])
a[a==1] = 0

# a should be [0, 2, 3, 0]
如果我在
tensorflow
中编写类似的代码,我会得到以下错误

TypeError: 'Tensor' object does not support item assignment

方括号中的条件应该是任意的,如TensorFlow API中可用的
a[a比较运算符

但是,在直接操作张量时,没有什么能与简洁的NumPy语法相提并论。您必须使用单独的
比较
其中
赋值
运算符来执行相同的操作

与NumPy示例等效的代码如下:

import tensorflow as tf

a = tf.Variable( [1,2,3,1] )    
start_op = tf.global_variables_initializer()    
comparison = tf.equal( a, tf.constant( 1 ) )    
conditional_assignment_op = a.assign( tf.where (comparison, tf.zeros_like(a), a) )

with tf.Session() as session:
    # Equivalent to: a = np.array( [1, 2, 3, 1] )
    session.run( start_op )
    print( a.eval() )    
    # Equivalent to: a[a==1] = 0
    session.run( conditional_assignment_op )
    print( a.eval() )

# Output is:
# [1 2 3 1]
# [0 2 3 0]

打印语句当然是可选的,它们只是用来证明代码的正确执行。

我也刚刚开始使用tensorflow 也许有人会让我的方法更直观

import tensorflow as tf

conditionVal = 1
init_a = tf.constant([1, 2, 3, 1], dtype=tf.int32, name='init_a')
a = tf.Variable(init_a, dtype=tf.int32, name='a')
target = tf.fill(a.get_shape(), conditionVal, name='target')

init = tf.initialize_all_variables()
condition = tf.not_equal(a, target)
defaultValues = tf.zeros(a.get_shape(), dtype=a.dtype)
calculate = tf.select(condition, a, defaultValues)

with tf.Session() as session:
    session.run(init)
    session.run(calculate)
    print(calculate.eval())

主要的问题是很难实现“自定义逻辑”。如果不能用线性数学术语解释逻辑,则需要为tensorflow()编写“自定义操作”库

从技术上讲,这不会更新
a
,即您缺少OPI要求的赋值步骤。相信在最近的版本中,这可以通过切片语义完成:链接到“几个比较运算符”在中,答案已关闭。@Robert Lugg的链接也已关闭:/@RodrigoLaguna我更新了链接。我找不到类别部分,因此链接到了一个示例。