【发布时间】:2018-04-19 08:49:10
【问题描述】:
我只想实现一个自定义层来获取两个向量(当然是匹配维度)的 l2 范数,这两个向量是由 keras 中的 2 个不同模型输出的。我正在使用编写 keras 函数的功能 API 方法,所以我有类似的东西:
inp1 = Input(someshape)
X = Conv2D(someargs)(inp1)
...
...
out1 = Dense(128)(X)
inp2 = Input(someshape)
Y = Conv2D(someargs)(inp2)
...
...
out2 = Dense(128)(Y)
然后我想取 out1 和 out2 之间距离的 l2 范数并将其进一步输入另一个网络,所以我有一个 lambda 层,如:
l2dist = keras.layers.Lambda(l2dist)(out1,out2)
其中 l2dist 是函数定义为:
def l2dist(x,y):
return K.sqrt(K.sum((x-y)**2))
但我收到 l2dist =... 行的错误:
TypeError: __call__() takes 2 positional arguments but 3 were given
我明明只放了2个参数,out1和out2,为什么python认为我给了3个参数?
我已经尝试过使用 lambda 函数,例如:
l2dist = keras.layers.Lambda(lambda x,y: K.sqrt(K.sum((x-y)**2)))(out1,out2)
但我得到了同样的错误。
【问题讨论】: