Konvertieren Sie sequenziell zu funktional in Keras

Ich habe einen keras Code in Sequentieller Stil geschrieben. Aber ich versuche, den Functional mode zu wechseln Functional mode weil ich die merge möchte. Aber ich habe einen Fehler unten bei der Deklaration von Model(x, out) . Was ist falsch in meinem funktionalen API-Code?

 # Sequential, this is working # out_size==16, seq_len==1 model = Sequential() model.add(LSTM(128, input_shape=(seq_len, input_dim), activation='tanh', return_sequences=True)) model.add(TimeDistributed(Dense(out_size, activation='softmax'))) # Functional API x = Input((seq_len, input_dim)) lstm = LSTM(128, return_sequences=True, activation='tanh')(x) td = TimeDistributed(Dense(out_size, activation='softmax'))(lstm) out = merge([td, Input((seq_len, out_size))], mode='mul') model = Model(input=x, output=out) # error below 

RuntimeError: Graph trennte: kann keinen Wert für den Tensor Tensor ("input_40: 0", shape = (?, 1, 16), dtype = float32) auf der Schicht "input_40" erhalten. Die folgenden vorherigen Ebenen wurden ohne Ausgabe aufgerufen: ['input_39', 'lstm_37']

Aktualisiert

Vielen Dank @Marcin Możejko. Ich habe es endlich geschafft

 x = Input((seq_len, input_dim)) lstm = LSTM(128, return_sequences=True, activation='tanh')(x) td = TimeDistributed(Dense(out_size, activation='softmax'))(lstm) second_input = Input((seq_len, out_size)) # object instanciated and hold as a var. out = merge([td, second_input], mode='mul') model = Model(input=[x, second_input], output=out) # second input provided to model.compile(...) # then I add two inputs model.fit([trainX, filter], trainY, ...) 

    One Solution collect form web for “Konvertieren Sie sequenziell zu funktional in Keras”

    Man kann bemerken, dass die Referenz eines Objekts, das von einem Input((seq_len, out_size)) erstellt wurde, nur von merge funciton call evironment zugänglich ist. Darüber hinaus – es ist nicht zu einer Model hinzugefügt – was macht Grafik getrennt. Was Sie tun müssen, ist:

     x = Input((seq_len, input_dim)) lstm = LSTM(128, return_sequences=True, activation='tanh')(x) td = TimeDistributed(Dense(out_size, activation='softmax'))(lstm) second_input = Input((seq_len, out_size)) # object instanciated and hold as a var. out = merge([td, second_input], mode='mul') model = Model(input=[x, second_input], output=out) # second input provided to model 
    Python ist die beste Programmiersprache der Welt.