webentwicklung-frage-antwort-db.com.de

So implementieren Sie die Zusammenführung aus Keras.layers

Ich habe versucht, die folgenden sequentiellen Modelle zusammenzuführen, konnte dies jedoch nicht. Könnte jemand bitte meinen Fehler aufzeigen, danke.

Der Code wird während der Verwendung von "merge" kompiliert, gibt jedoch den folgenden Fehler "TypeError: 'Modul'-Objekt ist nicht aufrufbar." Es kompiliert jedoch nicht einmal bei der Verwendung von "Merge".

Ich benutze Keras Version 2.2.0 und Python 3.6

from keras.layers import merge
def linear_model_combined(optimizer='Adadelta'):    
    modela = Sequential()
    modela.add(Flatten(input_shape=(100, 34)))
    modela.add(Dense(1024))
    modela.add(Activation('relu'))
    modela.add(Dense(512))

    modelb = Sequential()
    modelb.add(Flatten(input_shape=(100, 34)))
    modelb.add(Dense(1024))
    modelb.add(Activation('relu'))
    modelb.add(Dense(512))

    model_combined = Sequential()

    model_combined.add(Merge([modela, modelb], mode='concat'))

    model_combined.add(Activation('relu'))
    model_combined.add(Dense(256))
    model_combined.add(Activation('relu'))

    model_combined.add(Dense(4))
    model_combined.add(Activation('softmax'))

    model_combined.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return model_combined
2
Raj Dayal

Zusammenführen kann nicht mit einem sequentiellen Modell verwendet werden. In einem sequentiellen Modell können Layer nur eine Eingabe und eine Ausgabe haben. Sie müssen die Funktions-API verwenden. Ich nahm an, dass Sie dieselbe Eingabeebene für modela und modelb verwenden, aber Sie könnten eine andere Eingabe () erstellen, falls dies nicht der Fall ist, und beide als Eingabe für das Modell angeben.

def linear_model_combined(optimizer='Adadelta'):    

    # declare input
    inlayer =Input(shape=(100, 34))
    flatten = Flatten()(inlayer)

    modela = Dense(1024)(flatten)
    modela = Activation('relu')(modela)
    modela = Dense(512)(modela)

    modelb = Dense(1024)(flatten)
    modelb = Activation('relu')(modelb)
    modelb = Dense(512)(modelb)

    model_concat = concatenate([modela, modelb])


    model_concat = Activation('relu')(model_concat)
    model_concat = Dense(256)(model_concat)
    model_concat = Activation('relu')(model_concat)

    model_concat = Dense(4)(model_concat)
    model_concat = Activation('softmax')(model_concat)

    model_combined = Model(inputs=inlayer,outputs=model_concat)

    model_combined.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return model_combined
3
Daniel GL

Die Ebene keras.layers.merge ist veraltet. Verwenden Sie stattdessen keras.layers.Concatenate(axis=-1) wie hier erwähnt: https://keras.io/layers/merge/#concatenate

2
Quantum

Um ehrlich zu sein, hatte ich lange Zeit mit diesem Thema zu kämpfen ... 

Zum Glück fand ich endlich das Allheilmittel. Für alle, die mit Sequential die minimalen Änderungen an ihren ursprünglichen Codes vornehmen möchten, ist hier die Lösung:

def linear_model_combined(optimizer='Adadelta'): 
    from keras.models import Model, Sequential
    from keras.layers.core import Dense, Flatten, Activation, Dropout
    from keras.layers import add

    modela = Sequential()
    modela.add(Flatten(input_shape=(100, 34)))
    modela.add(Dense(1024))
    modela.add(Activation('relu'))
    modela.add(Dense(512))

    modelb = Sequential()
    modelb.add(Flatten(input_shape=(100, 34)))
    modelb.add(Dense(1024))
    modelb.add(Activation('relu'))
    modelb.add(Dense(512))

    merged_output = add([modela.output, modelb.output])   

    model_combined = Sequential()
    model_combined.add(Activation('relu'))
    model_combined.add(Dense(256))
    model_combined.add(Activation('relu'))
    model_combined.add(Dense(4))
    model_combined.add(Activation('softmax'))

    final_model = Model([modela.input, modelb.input], model_combined(merged_output))

    final_model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return final_model

Weitere Informationen finden Sie unter https://github.com/keras-team/keras/issues/3921#issuecomment-335457553 für den Kommentar von farizrahman4u. ;)

0
Castiel Wong