【问题标题】:Unable to understand how lambda layer work in keras?无法理解 lambda 层在 keras 中是如何工作的?
【发布时间】: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


    【解决方案1】:

    这个 lambda 层的输入是[processed_a, processed_b]

    它运行的函数是euclidean_distance,向前传递的是K.sqrt(K.sum(K.square(x - y), axis=1, keepdims=True))。从输入中获取xy

    这是唯一正在进行的真正处理。这也是统治形状的那个。

    输入似乎是(batch, n),输出将是(batch,1)n 会因为 sum 函数和 axis=1 而消失。但是由于它使用keepdims=True,所以轴会被保留为1。

    现在,输出形状并没有真正做任何事情。如果您使用的是 Tensorflow,则不需要此功能。但是,如果您使用的是 Theano,则需要它,因为 Theano 无法从计算中理解形状。

    这个函数只是返回形状(batch,1),因为函数的创建者知道这是输出形状。

    这个输出形状函数的输入是[shapeOfProcessed_a, shapeOfProcessed_b]。他们只是从一个输入形状中获取批量大小。

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多