如何将密集层单位理解为预测数据的维数?

时间:2019-06-23 17:16:33

标签: python tensorflow keras lstm

我正在处理一个包含2个特征x,y坐标的时间序列数据的数据集。我对根据先前坐标预测未来的x,y(如果可能的话,作为一个元组)很有趣。我对深度学习还很陌生,我一直在关注Kaggle上的这篇文章

Intro to Recurrent Neural Networks LSTM | GRU

google搜索给了我一个答案,即LSTM层中的input_shape需要一个3D元组(batch_size, time_steps, feature)。基于这些知识,我研究了2D数据(x,y):

X_train = []
y_train = []
for i in range(60,len(train_set_scaled)):
   X_train.append(training_set_scaled[i-60:i,0:2])
   y_train.append(training_set_scaled[i,0:2])
X_train, y_train = np.array(X_train), np.array(y_train)
print X_train.shape
(6208,60,2)

因为它是3D元组,所以我没有对其进行整形并继续。

## model begins here 
regressor = Sequential()

regressor.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1:])) 
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=50, return_sequences=True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units=50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units=2)) ## i am predicting future x,y 

我的代码有效,我不确定输出。我所预测的真的是x,y吗?因为如果我给units=3,我将得到3D输出,而units=1,我将得到1D输出。那到底是什么意思?我猜想我在给n时迫使网络收敛到units=n的输出。如果我的问题不清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

通常,在定义模型类型后,您需要使用model.fit方法来使其适合数据。

model.fit(X_train, y_train)

输出的大小由y_train的形状定义,即用于训练的标签矢量的大小。

要预测y,您应该做类似的事情

y_prob = model.predict(X_test) 

希望这个回答您的问题