如何计算两个Keras张量的平方差?

麦克尼尔(WP McNeill)

我有一个Keras Model,它计算两个张量r1并且r2形状相同。我想让模型计算(r1 - r2)**2

我可以用来计算这些张量的总和keras.layers.add(r1, r2)我可以带一个产品keras.layers.multiply(r1, r2)如果有一个subtract功能,我会写

r = keras.layers.subtract(r1, r2)
square_diff = keras.layers.multiply(r, r)

但似乎没有keras.layers.subtract功能。

取而代之的是,我一直试图找出如何将一个输入与一个恒定的-1张量相乘然后相加,但是我无法弄清楚如何创建该-1张量。我已经尝试了多种变体

negative_one = keras.backend.constant(np.full(r1.get_shape()), -1)

没有一个工作。大概是因为的维数r1(?, 128)(即,第一维是批处理大小,第二维代表128个隐藏元素。)

在Keras中采用两个张量之差的正确方法是什么?

欣克利

我没有资格说这是否是正确的方法,但是以下代码将根据(r1 - r2)**2您的要求进行计算这里的关键实现因素是使用Keras功能API和Lambda层来反转输入张量的符号。

import numpy as np
from keras.layers import Input, Lambda
from keras.models import Model
from keras.layers import add

r1 = Input(shape=(1,2,2))
r2 = Input(shape=(1,2,2))

# Lambda for subtracting two tensors
minus_r2 = Lambda(lambda x: -x)(r2)
subtracted = add([r1,minus_r2])
out= Lambda(lambda x: x**2)(subtracted)

model = Model([r1,r2],out)

a = np.arange(4).reshape([1,1,2,2])
b = np.ones(4).reshape([1,1,2,2])

print(model.predict([a,b]))
# [[[[ 1.  0.]
#    [ 1.  4.]]]]

print((a-b)**2)
# [[[[ 1.  0.]
#    [ 1.  4.]]]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章