我将尝试在一些时间序列集上运行一个RNN/LSTM网络。需要说明的是,这些时间序列正在进行分类。我有大约600个不同的时间序列,每个序列都有930个时间步骤和其中的特征。我已经将数据结构化为一个numpy 3D数组,其结构如下:
X = [666 observations/series, 930 timesteps in each observation, 15 features]
Y = [666 observations/series, 930 timesteps in each observation, 2 features]
对于训练和验证数据,我将数据按70/30分割。因此Train_X = [466,930,15],Train_Y = [200, 930, 2]。
我的网络出现了一种错误,说它希望输入为2个维度,但得到的数组形状为(466,930,2)。我的代码如下:
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Bidirectional
Train_X = new_ped_data[0:466]
Test_X = new_ped_data[466:]
Train_Y = new_ped_valid_data[0:466]
Test_Y = new_ped_valid_data[466:]
model = Sequential()
model.add(Bidirectional(LSTM(20, return_sequences=True),
input_shape=Train_X.shape[1:]))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.compile(loss='mae',
optimizer='rmsprop')
model.fit(Train_X, Train_Y, epochs = 30, batch_size = 32,
validation_data =(Test_X, Test_Y))
我只是在尝试运行模型,一旦成功后,我会调整结构和拟合参数。值得注意的是,其中一个分类输出可能不是必要的。请问如何设置结构,这样如果输入一个时间序列,那么我可以获得网络对每个时间步长的分类值?
Error was: ValueError: Error when checking target: expected dense_9 to
have 2 dimensions, but got array with shape (466, 930, 2)
检查目标时出错:期望dense_1的形状为(None, 930, 5),但得到的数组形状为(466, 930, 2)
。 - WRoskomodel.add(Dense(2))
- Marcin MożejkoBatchNormalization
,然后尝试使用集合[16, 32, 64, 128]
中的batch_size
。这是一个高度依赖数据的问题。 - Marcin Możejkox_train=(117, 73742, 118), y_train=(117, 73744, 118), x_val=(13, 73742, 118), y_val=(13, 73744, 118)
,我遇到了错误ValueError: Error when checking target: expected dense_14 to have shape (73742, 118) but got array with shape (73744, 118)
。如果x
和y
的形状不同,我该如何拟合我的模型? - Petr Petrov