(64849, 21) (64849, 1) trainX Y shape is: (64599, 48, 21) (64599, 60, 21) (64599, 1) Traceback (most recent call last): File ~\anaconda4\envs\tensorflow\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File d:\lstnet_keras-master\train_batch_a1.py:148 model,normalize = startTrainMult_1H(data,name,config) File D:\lstnet_keras-master\lstm\LSTNet_Interface_a38.py:570 in startTrainMult_1H model = trainModel(trainX1, trainX2 , trainY, config) File D:\lstnet_keras-master\lstm\LSTNet_Interface_a38.py:500 in trainModel model = LSTNetAttention(trainX1,trainX2,trainY,config) File D:\lstnet_keras-master\lstm\LSTNet_Interface_a38.py:443 in LSTNetAttention lstm1 = LSTM(64, return_sequences=True)(input1) File ~\anaconda4\envs\tensorflow\lib\site-packages\keras\layers\recurrent.py:541 in __call__ return super(RNN, self).__call__(inputs, **kwargs) File ~\anaconda4\envs\tensorflow\lib\site-packages\keras\backend\tensorflow_backend.py:75 in symbolic_fn_wrapper return func(*args, **kwargs) File ~\anaconda4\envs\tensorflow\lib\site-packages\keras\engine\base_layer.py:475 in __call__ previous_mask = _collect_previous_mask(inputs) File ~\anaconda4\envs\tensorflow\lib\site-packages\keras\engine\base_layer.py:1441 in _collect_previous_mask mask = node.output_masks[tensor_index] AttributeError: 'Node' object has no attribute 'output_masks'
时间: 2023-06-30 14:05:01 浏览: 194
这个错误是由于 Keras 版本的问题导致的。在旧版本的 Keras 中,LSTM 层的参数是 return_sequences 和 return_state,而在新版本的 Keras 中,LSTM 层的参数是 return_sequences、return_state 和 return_attention。你可以检查一下你使用的 Keras 版本是否与代码中使用的版本相同。如果不同,你需要修改代码以适应你的 Keras 版本。另外,你可以尝试在 LSTM 层中添加 `return_sequences=True` 参数来解决这个问题。
相关问题
输入维度是这样的 :trainX Y shape is: (4755, 48, 23) (4755, 60, 23) (4755, 5, 1)
根据你提供的输入维度,你可以使用 `Input` 函数来定义输入层,代码如下:
```
input_data1 = Input(shape=(48, 23))
input_data2 = Input(shape=(60, 23))
input_data3 = Input(shape=(5, 1))
```
这样定义后,你可以将 `input_data1`、`input_data2` 和 `input_data3` 作为模型的输入。然后,你需要对 `concat` 进行一些调整,以确保它与输入张量的形状匹配,代码如下:
```
concat = concatenate([input_data1, input_data2, input_data3], axis=1)
```
这样,你就可以将 `concat` 作为模型的输入,然后继续定义模型结构。
trainX Y shape is: (4755, 48, 23) (4755, 60, 23) 是输入, (4755, 5, 1)是输出
非常抱歉,我理解错了。在这种情况下,你可以使用以下代码定义模型:
```
input_data1 = Input(shape=(48, 23))
input_data2 = Input(shape=(60, 23))
lstm1 = LSTM(128, return_sequences=True)(input_data1)
lstm_out1 = Dense(64, activation='relu')(lstm1)
lstm_out1 = Dense(32, activation='tanh')(lstm_out1)
lstm_out1 = Dense(16, activation='softmax')(lstm_out1)
lstm2 = LSTM(128, return_sequences=True)(input_data2)
lstm_out2 = Dense(64, activation='relu')(lstm2)
lstm_out2 = Dense(32, activation='tanh')(lstm_out2)
lstm_out2 = Dense(16, activation='softmax')(lstm_out2)
concat = concatenate([lstm_out1, lstm_out2], axis=1)
bidirectional = Bidirectional(LSTM(units=32, return_sequences=True))(concat)
dense1 = Dense(units=32)(bidirectional)
output_data = Dense(units=1, activation='sigmoid')(dense1)
model = Model(inputs=[input_data1, input_data2], outputs=output_data)
```
这个模型有两个输入层(`input_data1` 和 `input_data2`),分别代表两个时间序列。每个输入层都有一个 LSTM 子层,然后将两个 LSTM 子层的输出进行连接。连接后,我们使用一个双向 LSTM 层和两个密集层来生成模型的输出。模型的输出层是一个具有 sigmoid 激活函数的密集层(因为你的输出形状是 `(4755, 5, 1)`,所以我们使用sigmoid函数)。
你可以根据需要调整模型的超参数和层数,以获得更好的性能。
阅读全文