我想编写一个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操作不是很熟悉。有没有简单的方法可以应用这样的变换?
干杯, 里卡多
答案 0 :(得分:0)
答案 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.])