【问题标题】:Convert Sequential to Functional in Keras在 Keras 中将顺序转换为函数
【发布时间】: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


【解决方案1】:

人们可能会注意到,由Input((seq_len, out_size)) 调用创建的对象的引用只能从merge 函数调用环境中访问。此外 - 它没有添加到 Model 定义中 - 是什么使图形断开连接。你需要做的是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2017-10-01
    • 2020-09-02
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多