【发布时间】:2017-09-11 11:56:48
【问题描述】:
我正在尝试在 keras 中使用 lambda 层来返回两个向量的欧几里得距离。代码是:
def distance(x):
a=x[0]
b=x[1]
dist=np.linalg.norm(a-b)
return dist
dist=Lambda(distance,output_shape=(1,1)name='dist')([x,y])
这一层的输入是(100,1,8192)的两个向量。 100是批次。理论上输出是一个常数。我想使用 dist 作为这个模型的输出,比如:
model = Model(inputs=[probe_input_car,probe_input_sign,gallary_input_car,gallary_input_sign], outputs=dist, name='fcn')`
我运行这个模型的时候会报错:
ValueError: Input dimension mis-match. (input[0].shape[2] = 1, input[1].shape[2] = 8192)
Apply node that caused the error: Elemwise{Composite{EQ(i0, RoundHalfToEven(i1))}}(/dist_target, Elemwise{Composite{sqrt(sqr(i0))}}.0)
Toposort index: 92
Inputs types: [TensorType(float32, 3D), TensorType(float32, 3D)]
Inputs shapes: [(100, 1, 1), (100, 1, 8192)]
Inputs strides: [(4, 4, 4), (32768, 32768, 4)]
Inputs values: ['not shown', 'not shown']
Outputs clients: [[Sum{acc_dtype=int64}(Elemwise{Composite{EQ(i0, RoundHalfToEven(i1))}}.0)]]
我认为这是由 lambda 层的 output_shape 引起的。我应该如何设置图层的 output_shape。因为我使用 theano 作为后端,所以它不能计算 output_shape 本身。 如果不是由 output_shape 引起的。哪里出错了?
【问题讨论】:
-
你能发布你“运行”这个模型的行吗?
标签: python lambda keras theano