【发布时间】:2019-12-10 23:23:50
【问题描述】:
更新:正如rvinas 所指出的,我忘记在Model 中添加inputs_aux 作为第二个input。现在修复了,它可以工作了。所以 ConditionalRNN 可以很容易地用来做我想做的事情。
我想在扩展的 LSTM 单元中同时处理时间序列和非时间序列特征(还讨论了一个要求here)。 ConditionalRNN (cond-rnn) 用于 Python 中的 Tensorflow 似乎允许这样做。
可以在 Keras 函数式 API 中使用(无需急切执行)吗? 也就是说,有没有人知道如何修复下面我失败的方法,或者使用 ConditionalRNN(或替代方法)在 LSTM 样式单元或任何等效单元中轻松组合 TS 和非 TS 数据的不同示例?
我在 Pilippe Remy's ConditionalRNN github page 上看到了急切的执行裸 tf 示例,但我没有设法将它扩展到 Keras 功能 API 中易于适配的版本。
我的代码如下所示;如果我使用标准 LSTM 单元(并相应地调整模型“x”输入)而不是 ConditionalRNN,它会起作用。使用 ConditionalRNN,我没有让它执行;我在更改代码时收到了 must feed a value for placeholder tensor 'in_aux' 错误(参见下文),或者收到了一些不同类型的输入大小投诉,尽管我尝试注意数据维度的兼容性。
(在 Ubuntu 16.04 上使用 Python 3.6、Tensorflow 2.1、cond-rnn 2.1)
import numpy as np
from tensorflow.keras.models import Model
from tensorflow.keras.layers import LSTM, Dense, Input
from cond_rnn import ConditionalRNN
inputs = Input(name='in',shape=(5,5)) # Each observation has 5 dimensions à 5 time-steps each
x = Dense(64)(inputs)
inputs_aux = Input(name='in_aux', shape=[5]) # For each of the 5 dimensions, a non-time-series observation too
x = ConditionalRNN(7, cell='LSTM')([x,inputs_aux]) # Updated Syntax for cond_rnn v2.1
# x = ConditionalRNN(7, cell='LSTM', cond=inputs_aux)(x) # Syntax for cond_rnn in some version before v2.1
predictions = Dense(1)(x)
model = Model(inputs=[inputs, inputs_aux], outputs=predictions) # With this fix, [inputs, inputs_aux], it now works, solving the issue
#model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='rmsprop', loss='mean_squared_error', metrics=['mse'])
data = np.random.standard_normal([100,5,5]) # Sample of 100 observations with 5 dimensions à 5 time-steps each
data_aux = np.random.standard_normal([100,5]) # Sample of 100 observations with 5 dimensions à only 1 non-time-series value each
labels = np.random.standard_normal(size=[100]) # For each of the 100 obs., a corresponding (single) outcome variable
model.fit([data,data_aux], labels)
我得到的错误是
tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'in_aux' with dtype float and shape [?,5]
[[{{node in_aux}}]]
回溯是
Traceback (most recent call last):
File "/home/florian/temp_nonclear/playground/test/est1ls_bare.py", line 20, in <module>
model.fit({'in': data, 'in_aux': data_aux}, labels) #model.fit([data,data_aux], labels) # Also crashes when using model.fit({'in': data, 'in_aux': data_aux}, labels)
File "/home/florian/BB/tsgenerator/ts_wgan/venv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training.py", line 643, in fit
use_multiprocessing=use_multiprocessing)
File "/home/florian/BB/tsgenerator/ts_wgan/venv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 664, in fit
steps_name='steps_per_epoch')
File "/home/florian/BB/tsgenerator/ts_wgan/venv/lib/python3.5/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 383, in model_iteration
batch_outs = f(ins_batch)
File "/home/florian/BB/tsgenerator/ts_wgan/venv/lib/python3.5/site-packages/tensorflow/python/keras/backend.py", line 3353, in __call__
run_metadata=self.run_metadata)
File "/home/florian/BB/tsgenerator/ts_wgan/venv/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1458, in __call__
run_metadata_ptr)
【问题讨论】:
-
你的模型定义不应该是
model = Model(inputs=[inputs, inputs_aux], outputs=predictions)吗? -
谢谢@rvinas,你解决了我的问题(如果你发布答案我可以接受,即使我的错误很严重)
-
@FlorianH 我尝试运行更正后的代码,但出现错误 TypeError: ('Keyword argument not understand:', 'cond')。你知道这种不匹配的原因吗?
-
@Malintha 最新的 cond-rnn,v 2.1,似乎需要
x = ConditionalRNN(7, cell='LSTM')([x,inputs_aux])而不是x = ConditionalRNN(7, cell='LSTM', cond=inputs_aux)(x)。让它再次为我工作。参照。 调用 cond_rnn/cond_rnn.py中的定义 -
@FlorianH 是的,它在该输入模式下运行良好。谢谢
标签: tensorflow keras time-series lstm recurrent-neural-network