为什么我不能在一维卷积中设置内核大小?



I use keras build 1D Convolution + LSTM.我尝试设置内核大小 = 5,就像这张图像 1D 卷积一样。我有所有 72 个值的数据,并单独到测试集 6 值。它可以将内核设置为 1。如果我将内核设置为另一个大小,它会显示错误。这是我的数据.csv文件。

这是我的代码。

import pandas as pd
import numpy as np
from keras.layers import LSTM
from keras.layers import Conv1D
from pandas.tseries.offsets import MonthEnd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
import keras.backend as K
from keras.layers import Embedding
from keras.layers import GRU
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')
########## Separate train and test data ##########
train = df.loc[:split_date, ['COLUMN1']]
test = df.loc[split_date:, ['COLUMN1']]
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]
X_test_t = X_test[:, None]
K.clear_session()
model = Sequential()
model.add(Conv1D(12, 5, activation='relu', input_shape=(None,1)))
model.add(LSTM(5,return_sequences=True))
model.add(LSTM(3)) 
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam' )
model.fit(X_train_t, y_train, epochs=400, batch_size=10, verbose=1)
y_pred = model.predict(X_test_t)
print(y_pred)
print(y_test)

当我运行时,它显示这样的错误。

InvalidArgumentError (see above for traceback): computed output size would be negative

这一行:

model.add(Conv1D(12, 5, activation='relu', input_shape=(None,1)))

假设输入的批大小未知,并且在一个批次中,它有 1 长,正好是一个数字。 你试图在上面安装一个 5 核卷积。如果您使用填充"相同",这只会产生一个数字的输出(输入数字乘以内核的中间数字(,但使用默认的"有效"填充,这将使输出大小为负数。

使用input_shape = ( None, 5 ),如果您只有 1 个数字,理论上会使大小为 -4,但没有实际意义,那么您将只得到一个数字(每个过滤器(作为输出。

最新更新