【问题标题】:Use Merge layer (lambda/function) on Keras 2.0?在 Keras 2.0 上使用合并层(lambda/函数)?
【发布时间】:2018-04-01 06:32:56
【问题描述】:

我尝试将this 模型移植到Keras v2,但以下功能有问题:

  def __call__(self, sent1, sent2):
        def _outer(AB):
            att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))
            return K.permute_dimensions(att_ji, (0, 2, 1))

        return merge([self.model(sent1), self.model(sent2)], mode=_outer,
                     output_shape=(self.max_length, self.max_length))

根据文档,mode 是:

字符串或 lambda/函数。如果是字符串,必须是一 的:'sum','mul','concat','ave','cos','dot','max'。 如果是 lambda/function,它应该将张量列表作为输入 并返回一个张量。

在新的Keras 版本中什么是等效函数(当模式为函数/lambda 时)以避免以下警告:

UserWarning: The `merge` function is deprecated and will be removed after 08/2017. Use instead layers from `keras.layers.merge`, e.g. `add`, `concatenate`, etc.
  return merge([attention, sentence], mode=_normalize_attention, output_shape=(self.max_length, self.nr_hidden))

【问题讨论】:

    标签: machine-learning tensorflow keras keras-layer keras-2


    【解决方案1】:

    一种实现模型的奇怪方式......(至少在 keras 2 中......)

    看来您应该只使用带有自定义函数的 lambda 层。

    def __call__(self, sent1, sent2):
        def _outer(AB) #custom function
            att_ji = K.batch_dot(AB[1], K.permute_dimensions(AB[0], (0, 2, 1)))    
            return K.permute_dimensions(att_ji, (0, 2, 1))
    
        return Lambda(_outer, 
                      output_shape=(self.max_length,self.max_length))([
                                               self.model(sent1), 
                                               self.model(sent2)])
    

    如果self.model(sent) 返回由 keras 层生成的张量,这应该可以工作。


    现在,对于实际的合并层,在 keras 2 中,您拥有这些层:

    • 连接(axis=...)(listOfTensors)
    • Add()(listOfTensors)
    • Multiply()(listOfTensors)
    • And others,包括一个 Dot 层,它“可能”与那个函数做同样的事情。

    如果使用点图层:

    return Dot()([self.model(sent1),self.model(sent2)])
    

    这需要测试。 keras 中的点和批处理点是令人困惑的事情。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 2017-11-26
      • 2017-08-07
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2017-07-27
      相关资源
      最近更新 更多