Keras层仅将输入张量的符号更改为特定元素

时间:2019-01-16 15:05:51

标签: python tensorflow keras

我想编写一个Keras层(带有TF后端)以反转输入张量的元素1、5和9的符号。 [出于您的好奇心:网络以(pT,eta,phi,M)表示处理四动量。我想翻转伪快速分量的符号]。

天真的,我会做这样的事情:

def flip_eta( x ):
   # you can't do this with tensors
   x[1] = -x[1]
   x[5] = -x[5]
   x[9] = -x[9]

   return x

但是,它不起作用,并且出现以下错误:

    x[1] = -x[1]
TypeError: 'Tensor' object does not support item assignment 

我对TF操作不是很熟悉。有没有简单的方法可以应用这样的变换?

干杯, 里卡多

2 个答案:

答案 0 :(得分:0)

您尝试过

x[1] = tf.math.negative(x[1])

https://www.tensorflow.org/api_docs/python/tf/math/negative

答案 1 :(得分:0)

导入后端(TensorFlow)

from keras import backend as K

定义输入数组

val = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

将其转换为变量

kvar = K.variable(value=val, dtype='float64', name='example_var')

定义所需的蒙版,并将其转换为变量:

mask = np.ones([len(val)])
mask[[1,5,9]] = -1
mask = K.variable(value=mask, dtype='float64', name='mask')

将蒙版乘以原始矢量

result = val * mask

评估结果

K.eval(result)

> array([ 0., -1.,  2.,  3.,  4., -5.,  6.,  7.,  8., -9., 10.])