keras python - lstm: model.fit, какой тип данных я должен добавить в validation_data? - PullRequest
0 голосов
/ 15 ноября 2018

Я написал код, чтобы попытаться сделать модель прогнозирования для многомерных временных рядов. Написал код было очень сложно, каждый раз ошибка, но я сделал это. Во всяком случае, в моем коде в 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)

Спасибо тебе! каждая идея о том, что это хорошо

...