理解将Dense层连接到LSTM

我无法正确地将我的Dense层连接到我的LSTM层。我的Y值范围在0到1之间,所以使用sigmoid函数对我来说似乎是合理的选择。

我收到了以下错误信息:

检查目标时出错:期望dense_4具有2个维度,但得到的数组形状为(993, 300, 1)

对我来说,输入形状似乎是正确的,总数据框是(350700, 2413),我将其重塑为(1169, 300, 2413),不包括Y值。我就是无法弄明白如何使Dense层工作并将sigmoid函数应用到我的Y值上。

在训练测试分割中,我的y_train形状为(993, 300, 1),这是我错误的主要问题,但我无法理解我做错了什么。x_train的形状为(933, 300, 2413),x_test的形状为(176, 300, 2413),y_test的形状为(176, 300, 1)。

这是我设置的网络,使用的后端是tensorflow(也使用过theano,问题相同)

_________________________________________________________________Layer (type)                 Output Shape              Param #   =================================================================lstm_21 (LSTM)               (None, 300, 1000)         13656000  _________________________________________________________________lstm_22 (LSTM)               (None, 300, 500)          3002000   _________________________________________________________________lstm_23 (LSTM)               (None, 300, 250)          751000    _________________________________________________________________lstm_24 (LSTM)               (None, 300, 100)          140400    _________________________________________________________________lstm_25 (LSTM)               (None, 50)                30200     _________________________________________________________________dense_4 (Dense)              (None, 1)                 51        =================================================================Total params: 17,579,651Trainable params: 17,579,651Non-trainable params: 0_________________________________________________________________

这是我的代码。

import numpy as npimport pandas as pdfrom keras.models import Sequentialfrom keras.layers.advanced_activations import LeakyReLUfrom keras.layers import Dense, Activation, LSTM, Flattenfrom keras import backend as Kfrom sklearn.model_selection import train_test_splitaa = aa[np.isfinite(aa['Y1'])]aa=aa[-350700:]Y=aa['Y1'].values.reshape(1169,300,1) #break into 1169 samples @ 300 timestampsaa.drop(drop1, axis=1, inplace=True) #drop the Y1 feature and others not needed.features=aa.shape[1]X=aa.values.reshape(1169,300,features)seed = 7X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=seed)model = Sequential()model.add(LSTM(1000, input_shape=(300,features),activation='relu',return_sequences=True))model.add(LSTM(500,activation='relu',return_sequences=True))model.add(LSTM(250,activation='relu',return_sequences=True))model.add(LSTM(100, activation='relu',return_sequences=True))model.add(LSTM(50,activation='relu',return_sequences=False))model.add(Dense(1,activation='sigmoid'))model.compile(loss='mae',              optimizer='adam',              metrics=['mse', 'mae', 'mape'])print(model.summary())# evaluate model with standardized datasetmodel.fit(X_train, y_train, validation_data=(X_test,y_test), epochs=15000)

回答:

你的“数据”与你的“最后一层形状”不兼容。

  • 要么你需要Y_train的形状为(993,1) – 对整个序列进行分类
  • 要么你需要在“所有”LSTM层中保持return_sequences=True – 对每个时间步进行分类

正确的方法取决于你想要做什么。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注