简体   繁体   中英

Using LSTM in Keras and tensorflow for time series predictions

I want to define a LSTM layers using tensorflow in keras. The code as following:

model = Sequential()
inputs = Input(shape=(time_steps, 1))

cell = tf.nn.rnn_cell.LSTMCell(n_neurons)
multi_cell = tf.nn.rnn_cell.MultiRNNCell([cell] * n_layers)
lstm_outputs, states = tf.nn.dynamic_rnn(multi_cell, inputs, dtype=tf.float32)

outputs = TimeDistributed(Dense(1))(lstm_outputs)

model = Model(inputs=inputs, outputs=outputs)

adam = optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08)
model.compile(loss='mean_squared_error', optimizer=adam)

print(model.summary())

when running, an error occurred:

Using TensorFlow backend.
Traceback (most recent call last):
  File "/Users/zhjmdcjk/Desktop/Untitled.py", line 81, in <module>
    model = Model(inputs=inputs, outputs=outputs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/topology.py", line 1734, in __init__
    build_map_of_graph(x, finished_nodes, nodes_in_progress)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/topology.py", line 1724, in build_map_of_graph
    layer, node_index, tensor_index)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/keras/engine/topology.py", line 1695, in build_map_of_graph
    layer, node_index, tensor_index = tensor._keras_history
AttributeError: 'Tensor' object has no attribute '_keras_history'

I am not clear about these, can anyone give me some advice. Thanks a lot!

Is there any particular reason you're using Tensorflow's LSTM in Keras? You can directly use Keras LSTM layers.

inputs = Input(shape=(time_steps, 1))

lstm1 = LSTM(n_neurons, return_sequences=True)(inputs)

lstm_outputs = LSTM(n_neurons, return_sequences=True)(lstm1)

outputs = TimeDistributed(Dense(1))(lstm_outputs)

model = Model(inputs=inputs, outputs=outputs)

Also, you don't need to use model = Sequential() in case of Keras' functional API.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM