【发布时间】:2016-11-09 04:35:18
【问题描述】:
我正在尝试了解在 keras 存储库中以 example 形式给出的连体网络。
网络通过以下行将 lambda 作为输出添加到模型
model = Model(input=[input_a, input_b], output=distance)
其中距离定义为 lambda 为
distance = Lambda(euclidean_distance, output_shape=eucl_dist_output_shape)([processed_a, processed_b])
另外两个函数定义为:
def euclidean_distance(vects):
x, y = vects
return K.sqrt(K.sum(K.square(x - y), axis=1, keepdims=True))
def eucl_dist_output_shape(shapes):
shape1, shape2 = shapes
return (shape1[0], 1)
现在我无法理解这个 lambda 层将什么传递给下一层。
Keras 将 lambda 定义为
Lambda(function,output_shape,arguments)
所以我猜来自前一层的输入由函数处理并以所需形状作为输出返回。 现在根据我的说法,应用欧几里得距离函数将返回一个行向量,表示当前批次中每对的距离。所以这样一个结果的维度就像
batch_size * 1
现在eucl_dist_output_shape函数会改变它的形状,我无法理解的是这个函数到底在做什么以及它在计算什么,return (shape1[0],1)在这个函数中实现了什么?
【问题讨论】:
标签: lambda deep-learning keras