#python #pandas #numpy #machine-learning #lstm
#python #pandas #numpy #машинное обучение #lstm
Вопрос:
Я пытаюсь следовать этому руководству здесь, но я столкнулся с проблемой с моделью ConvLSTM.
Итак, в руководстве у них есть массив [10,20,30,40,50,60,70,80,90], и они разделяют его на
[[10,20,30]
[20,30,40]
[30,40,50]
[40,50,60]
[50,60,70]
[60,70,80]
[70,80,90]
и когда они изменяют его с помощью
n_features = 1
n_seq = 2
n_steps = 2
X = X.reshape((X.shape[0], n_seq, n_steps, n_features))
это выглядит примерно так
[[[10]
[20]
[30]]
[[20]
[30]
[40]] ...
и моя проблема в том, что когда я пытаюсь импортировать свои данные и использовать их, мои данные имеют форму (133460,20)
, подобную этой
[[1,2,3...20]
[1,2,3....20]]
ошибка, с которой я сталкиваюсь, заключается в
Ошибка значения: не удается преобразовать массив размером 2001900 в форму (1000095,2,2,1)
и я просто немного смущен всем этим и тем, как правильно изменить форму моих данных. Вот полный код с примечанием о том, где мой код терпит неудачу.
Это код руководства, но мне не нужна splitSequence()
функция, потому что мои данные уже разделены (то же самое с разделением на поезд / тест.
ОБУЧАЮЩИЙ КОД
# split a univariate sequence into samples
def split_sequence(sequence, n_steps):
X, y = list(), list()
for i in range(len(sequence)):
# find the end of this pattern
end_ix = i n_steps
# check if we are beyond the sequence
if end_ix > len(sequence)-1:
break
# gather input and output parts of the pattern
seq_x, seq_y = sequence[i:end_ix], sequence[end_ix]
X.append(seq_x)
y.append(seq_y)
return array(X), array(y)
# define input sequence
raw_seq = [10, 20, 30, 40, 50, 60, 70, 80, 90]
# choose a number of time steps
n_steps = 4
# split into samples
X, y = split_sequence(raw_seq, n_steps)
# reshape from [samples, timesteps] into [samples, subsequences, timesteps, features]
n_features = 1
n_seq = 2
n_steps = 2
X = X.reshape((X.shape[0], n_seq, n_steps, n_features))
# define model
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(None, n_steps, n_features)))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=500, verbose=0)
# demonstrate prediction
x_input = array([60, 70, 80, 90])
x_input = x_input.reshape((1, n_seq, n_steps, n_features))
yhat = model.predict(x_input, verbose=0)
print(yhat)
>> [[101.69263]]
МОЙ КОД
# reshape from [samples, timesteps] into [samples, subsequences, timesteps, features]
n_features = 1
n_seq = 2
n_steps = 2
X = X_train.reshape((X_train.shape[0], n_seq, n_steps, n_features)) <<<<< My code fails here
# define model
model = Sequential()
model.add(TimeDistributed(Conv1D(filters=64, kernel_size=1, activation='relu'), input_shape=(None, n_steps, n_features)))
model.add(TimeDistributed(MaxPooling1D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(50, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# fit model
model.fit(X, y, epochs=500, verbose=0)
все это довольно ново, поэтому любая помощь (особенно в отношении формирования данных) была бы очень признательна
Ответ №1:
Извините, но я запустил ваш код, и он совпал с результатами кода из руководства. Хотя я был вынужден заменить X_train на X, поскольку X_train не был определен в вашем коде. Итак, если бы мне пришлось сказать, что ваша проблема связана с X_train, извините, я не смог бы вам больше помочь. Если вы уточните, что такое X_train, или, более конкретно, чем он отличается от X, я могу предоставить более конкретное решение.
Комментарии:
1. X train — это просто мои данные, которые были разделены из разделения на поезд / тест. Итак, мой X_train — это всего лишь небольшая часть моих данных X, которая имеет форму
(133460,20)
. в приведенном выше руководстве их X — это массив. В моем коде my X_train — это другой набор данных с разными измерениями2. О, это проблема прямо здесь, используйте набор обучающих данных из руководства.