我有这个自定义 Keras 层,它可以在列表元素之间进行选择,例如 Dense 层,我希望它直接返回它预测的列表元素。该列表是Keras.layers.Layer
. 我有这段代码:
def call(self, inputs, context):
pred = tf.argmax(tf.matmul(context, self.kernel))
return self.layers[pred](inputs)
它抛出一个错误:TypeError: list indices must be integers or slices, not Tensor
,这是可以理解的,但我找不到让它工作的方法。“pred” Tensor 没有.numpy
属性,尽管我正在急切地运行程序,因为在构建层时会发生这种情况。
我知道可能没有解决方案,如果是这样,请提交有关如何以另一种方式对该层进行编码的想法。
有一个更大的问题。
该层将不起作用,因为您无法获得 的导数argmax
,kernel
将无法训练。你会收到一条错误消息,比如“一个操作没有梯度”
作为一种解决方法,我建议您:
tf.stack([listf_of_outputs],axis=1)
softmax
的结果matmul
softmax
与上面堆叠结果相同的维数:shape(-1, number_of_layers, _other_dims_if_exist, 1)
*
堆叠结果乘以(元素方式)重塑后的 softmax 并对轴 1 求和。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句