【问题标题】:Cannot import name 'Merge' from 'keras.layers'无法从“keras.layers”导入名称“Merge”
【发布时间】:2019-10-12 10:03:30
【问题描述】:

我尝试运行代码,但发现Keras 的合并层有问题。我正在使用 python 3 和 keras 2.2.4

这是代码的解码部分


import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Embedding, TimeDistributed, Dense, RepeatVector, Merge, Activation
from keras.preprocessing import image, sequence
import cPickle as pickle


    def create_model(self, ret_model = False):

        image_model = Sequential()
        image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu'))
        image_model.add(RepeatVector(self.max_length))

        lang_model = Sequential()
        lang_model.add(Embedding(self.vocab_size, 256, input_length=self.max_length))
        lang_model.add(LSTM(256,return_sequences=True))
        lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM)))

        model = Sequential()
        model.add(Merge([image_model, lang_model], mode='concat'))
        model.add(LSTM(1000,return_sequences=False))
        model.add(Dense(self.vocab_size))
        model.add(Activation('softmax'))

        print ("Model created!")

这是错误信息

from keras.layers import LSTM, Embedding, TimeDistributed, Dense, RepeatVector, Merge, Activation
ImportError: cannot import name 'Merge' from 'keras.layers'

【问题讨论】:

    标签: python keras keras-layer


    【解决方案1】:

    Keras +2 不支持Merge。相反,您需要使用Concatenate 层:

    merged = Concatenate()([x1, x2]) # NOTE: the layer is first constructed and then it's called on its input
    

    或等效的功能接口concatenate(以小写c开头):

    merged = concatenate([x1,x2]) # NOTE: the input of layer is passed as an argument, hence named *functional interface*
    

    如果您对其他形式的合并感兴趣,例如加法、减法等,然后就可以使用相关的图层了。有关合并层的完整列表,请参阅documentation

    【讨论】:

    • 感谢您的回答。它几乎对我有用,只是当我以这种方式应用它时:model.add(Concatenate([word_model, context_model], mode="dot")),我收到以下错误:TypeError: ('Keyword argument not understood:', 'mode') 关于解决方案的任何想法?
    • @nigus21 您的代码存在两个问题(可能只有第二个问题与您的需求相关):1)您将 layer 的输入作为其参数传递(即注意使用 连接大“C”或小“c”,以及我在回答中解释的它们的区别)。 2) mode 不再适用于 Keras 2+。请改用适当的merge layers(在您的情况下,它可能是Dot 层)。
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2020-09-22
    • 2021-12-04
    相关资源
    最近更新 更多