如何将卷积 1D 与 lstm 一起使用?
How to use convolution 1D with lstm ?
我通过单独的最后 6 个值输入时间序列数据 72 个值以进行测试预测。我想将 CONV1D 与 LSTM 结合使用。
这是我的代码。
df = pd.read_csv('D://data.csv',
engine='python')
df['DATE_'] = pd.to_datetime(df['DATE_']) + MonthEnd(1)
df = df.set_index('DATE_')
df.head()
split_date = pd.Timestamp('03-01-2015')
train = df.loc[:split_date, ['COLUMN3DATA']]
test = df.loc[split_date:, ['COLUMN3DATA']]
sc = MinMaxScaler()
train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)
X_train = train_sc[:-1]
y_train = train_sc[1:]
X_test = test_sc[:-1]
y_test = test_sc[1:]
################### Convolution #######################
X_train_t = X_train[None,:]
print(X_train_t.shape)
X_test_t = X_test[:, None]
K.clear_session()
model = Sequential()
model.add(Conv1D(6, 3, activation='relu', input_shape=(12,1)))
model.add(LSTM(6, input_shape=(1,3), return_sequences=True))
model.add(LSTM(3))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam' )
model.summary()
model.fit(X_train_t, y_train, epochs=400, batch_size=10, verbose=1)
y_pred = model.predict(X_test_t)
当我 运行 它显示这样的错误
ValueError: Error when checking input: expected conv1d_1_input to have shape (None, 12, 1) but got array with shape (1, 64, 1)
如何将 conv1D 与 lstm 一起使用
问题出在您的输入数据和输入形状之间。
- 你在模型中说你的输入形状是
(12,1)
(= batch_shape=(None,12,1)
)
- 但是您的数据
X_train_t
的形状为 (1,64,1)
。
要么修复模型的输入形状,要么修复数据(如果这不是预期的形状)。
对于变量lengths/timesteps,您可以使用input_shape=(None,1)
。
第二层不需要input_shape。
我通过单独的最后 6 个值输入时间序列数据 72 个值以进行测试预测。我想将 CONV1D 与 LSTM 结合使用。
这是我的代码。
df = pd.read_csv('D://data.csv',
engine='python')
df['DATE_'] = pd.to_datetime(df['DATE_']) + MonthEnd(1)
df = df.set_index('DATE_')
df.head()
split_date = pd.Timestamp('03-01-2015')
train = df.loc[:split_date, ['COLUMN3DATA']]
test = df.loc[split_date:, ['COLUMN3DATA']]
sc = MinMaxScaler()
train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)
X_train = train_sc[:-1]
y_train = train_sc[1:]
X_test = test_sc[:-1]
y_test = test_sc[1:]
################### Convolution #######################
X_train_t = X_train[None,:]
print(X_train_t.shape)
X_test_t = X_test[:, None]
K.clear_session()
model = Sequential()
model.add(Conv1D(6, 3, activation='relu', input_shape=(12,1)))
model.add(LSTM(6, input_shape=(1,3), return_sequences=True))
model.add(LSTM(3))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam' )
model.summary()
model.fit(X_train_t, y_train, epochs=400, batch_size=10, verbose=1)
y_pred = model.predict(X_test_t)
当我 运行 它显示这样的错误
ValueError: Error when checking input: expected conv1d_1_input to have shape (None, 12, 1) but got array with shape (1, 64, 1)
如何将 conv1D 与 lstm 一起使用
问题出在您的输入数据和输入形状之间。
- 你在模型中说你的输入形状是
(12,1)
(=batch_shape=(None,12,1)
) - 但是您的数据
X_train_t
的形状为(1,64,1)
。
要么修复模型的输入形状,要么修复数据(如果这不是预期的形状)。
对于变量lengths/timesteps,您可以使用input_shape=(None,1)
。
第二层不需要input_shape。