这是我的代码
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), :])
dataY.append(signal_data[i + look_back, -1])
return np.array(dataX), np.array(dataY)
look_back = 200
stock = 'a.csv'
scaler = MinMaxScaler()
df = pd.read_csv(stock)
signal_data = df[["close"]].values.astype('float32')
signal_data = scaler.fit_transform(signal_data)
train_size = int(len(signal_data) * 0.80)
test_size = len(signal_data) - train_size
train = signal_data[0:train_size]
test = signal_data[train_size:]
x_train, y_train = create_dataset(train, look_back)
x_test, y_test = create_dataset(test, look_back)
CNN = Sequential()
CNN.add(Conv1D(filters=16, kernel_size=2, padding='same', activation='relu', input_shape=(None, 200)))
CNN.add(MaxPooling1D(pool_size=1))
CNN.add(Flatten())
x_train
和y_train
的形状分别为create_dataset(1399、200、1),(1399)。
但是Conv1D接受三维输入。
为解决此问题,我尝试设置input_shape = (None, 200)
(因为loock_back为200)。
但是,此方法出现ValueError: The shape of the input to "Flatten" is not fully defined (got (None, 16). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your mode
。
我该如何解决这个问题?
答案 0 :(得分:0)
您应该尝试将200 1作为输入到第一层
如果我理解正确,那么批量大小是1399吗?
在将Conv1D用作模型的第一层时,请提供一个input_shape参数(整数元组或None,例如对于10个向量的128维向量的序列,为(10,128),对于变量为(None,128) 128维向量的全长序列。 如果序列为200,则可以设置(200,1)忽略批量大小