вот мой код
def create_dataset(signal_data, look_back=1):
dataX, dataY = [], []
for i in range(len(signal_data) - look_back):
dataX.append(signal_data[i:(i + look_back), 0])
dataY.append(signal_data[i + look_back, 0])
return np.array(dataX), np.array(dataY)
look_back = 20
...
train_size = int(len(data) * 0.80)
test_size = len(data) - train_size
train = data[0:train_size]
test = data[train_size:len(data)]
x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)
тогда x_train
форма равна (62796, 20) и y_train
форма равна (62796,)
Я использую эти данные для LSTM
Итак, переделка x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
выполнена
(теперь x_train.shape
это (62796, 20, 1))
но y_train
форма (62796,) Итак, я не могу изменить форму 1D -> 3D
как я могу y_train
изменить форму 1D -> 3D
я хочу форму y_train как (62796, 20, 1), потому что хочу параметр LSTM return_sequences=True
Это то, что вы ищете?
y_train = np.ones(100)
print(y_train.shape) #prints (100,)
y_train = y_train.reshape(-1,1,1)
print(y_train.shape) # prints (100,1,1)
Обновлено: Окончательное решение после краткого обсуждения в комментариях:
y_train=np.repeat(y_train.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
нет, ввод LSTM - это x = (batch_size, timesteps, features)
и y(batch_size, timesteps, numb_outputs)
, поэтому я хочу форму y (62796, 20, 1), но если я y_train = y_train.reshape(-1, 20, 1)
, то ValueError: cannot reshape array of size 62796 into shape (20,1)
произойдет
Итак, вы хотите, чтобы эти 62796 значений повторялись 20 раз? Это правильно?
тогда попробуй y_train = np.tile(y_train, 20).reshape(-1,20,1)
на самом деле, команда, приведенная в моем предыдущем комментарии, не дает того, что я думал - вот исправление: y_train=np.repeat(y_train.reshape(-1,1), 20, axis=1).reshape(-1,20,1)
Конечно, вы не можете преобразовать массив (62796,) в массив (62796, 20, 1), поскольку у вас меньше значений для изменения формы. Если вы хотите получить массив (62796, 20, 1), вы должны повторить свои значения в массиве (62796,) каким-то образом, как вы ожидаете.