【问题标题】:How to use Merge layer (concat function) on Keras 2.0.0?如何在 Keras 2.0.0 上使用合并层(concat 函数)?
【发布时间】:2017-08-07 00:15:06
【问题描述】:

我正在尝试使用 Keras 重现实体嵌入模型。这是github link 并使用kaggle 分支。有一个python文件models.py,使用Merge层。

from keras.layers.core import Dense, Dropout, Activation, Merge, Reshape ......
self.model.add(Merge(models, mode='concat'))

这段代码对于旧版本的Keras应该没问题,但是使用Keras 2.0.0 使用tensorflow 1.0.0作为后端(python 2.7),会出现错误信息: Using TensorFlow backend. Traceback (most recent call last): File "/Users/pengjuzhao/Udacity/MLND/entity-embedding-rossmann/test_model.py", line 2, in <module> from models import NN_with_EntityEmbedding File "/Users/pengjuzhao/Udacity/MLND/entity-embedding-rossmann/models.py", line 8, in <module> from keras.layers.core import Dense, Dropout, Activation, Merge, Reshape ImportError: cannot import name Merge [Finished in 1.8s with exit code 1] [shell_cmd: python -u "/Users/pengjuzhao/Udacity/MLND/entity-embedding-rossmann/test_model.py"] [dir: /Users/pengjuzhao/Udacity/MLND/entity-embedding-rossmann] [path: /usr/bin:/bin:/usr/sbin:/sbin]

有没有人知道如何达到相同的目标(self.model.add(Merge(models, mode='concat')))或如何使用 Keras 2.0.0 使用合并/合并层? 先感谢您。

【问题讨论】:

    标签: python tensorflow deep-learning keras


    【解决方案1】:

    我认为您从错误的位置导入。你应该这样做:

    from keras.layers import Merge
    

    有关merge/Merge 的更多详细信息以及如何使用它们,请参阅此Github post

    来自同一个Github post,后面两个sn-ps的代码是等价的。

    Keras 1.2.2 代码:

    from keras.engine import merge
    m = merge([init, x], mode='sum')
    

    等效的 Keras 2.0.2 代码:

    from keras.layers import add
    m = add([init, x])
    

    【讨论】:

    • 感谢您的回答,但有问题。这是错误。 /Users/pengjuzhao/anaconda/lib/python2.7/site-packages/keras/legacy/layers.py:66:UserWarning:Merge 层已弃用,将在 08/2017 之后删除。改用来自keras.layers.merge 的图层,例如addconcatenate 等 warnings.warn('Merge 层已弃用'. It seems that the Merge layer has been removed from Keras 2.0. But the method keras.layers.merge.concat` 不存在。
    • 你试过使用 'keras.layers.merge.Concatenate' 吗?
    【解决方案2】:

    在 Keras 2.0.4 中,“Merge”不起作用,但“merge”可以,用法如下:

    from keras.layers import merge
    m = merge([x1, x2], mod="cos", dot_axes=1)
    

    函数代码不是实现concat函数而是取余弦值,concat函数类似

    但是Keras 2.2.4的这段代码不行,会抛出“'module' object is not callable”的错误,这是Keras版本导致的问题。

    【讨论】:

    • 那么Keras 2.2.4的解决方案是什么?
    • @quant,在 keras 2.2 中,你必须使用“concatenate”,但是新版本的 Keras 不支持使用 Sequential API 进行连接,你必须使用 Functional API。见:stackoverflow.com/questions/51075666/…
    • 我是 Keras 新手,如何在 keras 2.2.4 中重新创建以下代码?从上面提供的链接中我不清楚吗? merge([target, context], mode='cos', dot_axes=0)
    猜你喜欢
    • 2018-04-01
    • 2019-09-10
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2017-08-10
    • 2017-04-24
    相关资源
    最近更新 更多