【发布时间】:2017-08-05 21:48:54
【问题描述】:
我有一个以顺序样式编写的 keras 代码。但我正在尝试切换Functional mode,因为我想使用merge 功能。但是我在声明Model(x, out) 时遇到了以下错误。我的函数式 API 代码有什么问题?
# 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 disconnected: cannot get value for tensor Tensor("input_40:0", shape=(?, 1, 16), dtype=float32) at layer “输入_40”。访问以下先前层没有问题: ['input_39', 'lstm_37']
更新
谢谢@Marcin Możejko。我终于做到了。
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, ...)
【问题讨论】:
-
你想用 merge([td , input((seq_len,out_size))],...) 做什么?你想在你的模型中有第二个输入吗?多解释一下您要实现的目标,我们将帮助您编写代码:)
标签: python machine-learning deep-learning keras lstm