Я написал код, чтобы попытаться сделать модель прогнозирования для многомерных временных рядов. Написал код было очень сложно, каждый раз ошибка, но я сделал это. Во всяком случае, в моем коде в model.fit
я не добавил validation_data
. Теперь, когда я добавляю часть кода, я ошибаюсь!
Я оставляю вам код. Я надеюсь, что кто-то понимает, каково правильное измерение моего validation_ data.
Я объясняю размеры моего стола и цели.
У меня есть таблица с 52 строками (это 52 недели 2017 года) и 1018 элементов, которые я хочу изучить во временном ряду. Эта таблица объясняет количество продаж в 2017 году различных товаров в магазине. Я использую 39 раз для поезда.
код:
# normalizzazione :
scaler= MinMaxScaler(feature_range=(-1,1))
scaled= scaler.fit_transform(tabartset_clu) # i dati che sono int32 vengono convertiti in un float 64
scaled=pd.DataFrame(scaled)
# creo il training set e il target set e il test set ( necessario per la validazione)
train_clu, valid_clu = train_test_split(scaled, test_size=0.25)
train_clu_y= scaled.iloc[13:52, :] test= scaled.iloc[39:52, :]
test_X, test_Y= test.iloc[:, :-1], test.iloc[:, -1]
test_X= np.array(test_X)
test_X_= test_X.reshape(test_X.shape[0],1,test_X.shape[1])
# disegno la rete neurale
train_clu=np.array(train_clu)
train_clu_y= np.array(train_clu_y)
train_clu_y = train_clu_y.reshape(1, 39, 1018) # per poter fare il reshape devo trasformare il mio dataframe in array
train_clu = train_clu.reshape(1, 39,1018)
# create LSTM
model = Sequential()
model.add(LSTM(1018, input_shape=(39,1018), return_sequences=True))
model.add(ks.layers.Dropout(0.2))
model.add(ks.layers.TimeDistributed(Dense(1018)))
model.add(ks.layers.Dropout(0.2))
model.add(ks.layers.Activation('linear'))
model.compile(loss='mean_squared_error', optimizer='adam')
print('######################### model.summary() ##########################')
print(model.summary())
print('######################### FITMODEL TRAIN ##########################')
valid_clu=np.array(valid_clu)
val_sha= valid_clu.reshape(13,1,1018)
history= model.fit(train_clu, train_clu_y, epochs=80,validation_data=(test_X_, test_Y), batch_size=1, verbose=2, shuffle=False)
print('fatto fitting')
# evaluate
result = model.predict(train_clu, batch_size=1, verbose=2)
я даю вам форму всех переменных:
print (train_clu.shape) (39, 1018)
print (valid_clu.shape) (13, 1018)
print (train_clu_y.shape) (39, 1018)
print (training.shape) (39, 1018)
print (test.shape) (13,1018)
print (test_X.shape) (13,1017)
print(test_X_.shape) (13,1,1017)
print(test_Y.shape) (13,)
Ошибка: ValueError: Ошибка при проверке ввода: ожидалось, что lstm_1_input будет иметь форму (39, 1018), но получил массив с формой (1, 1017)
Спасибо тебе! каждая идея о том, что это хорошо