Search code examples
pythonkeraskeras-layer

Cannot import name 'Merge' from 'keras.layers'


I have try run a code but I find a problem with merge layers of Keras. I'm using python 3 and keras 2.2.4

This is de code part of code


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!")

This is the message of error

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

Solution

  • Merge is not supported in Keras +2. Instead, you need to use Concatenate layer:

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

    or it's equivalent functional interface concatenate (starting with lowercase c):

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

    If you are interested in other forms of merging, e.g. addition, subtration, etc., then you can use the relevant layers. See the documentation for a comprehensive list of merge layers.