如何使用二维数据作为Conv1D的输入?

时间:2019-09-04 08:10:16

标签: python tensorflow machine-learning keras deep-learning

这是我的代码

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_trainy_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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您应该尝试将200 1作为输入到第一层

如果我理解正确,那么批量大小是1399吗?

在将Conv1D用作模型的第一层时,请提供一个input_shape参数(整数元组或None,例如对于10个向量的128维向量的序列,为(10,128),对于变量为(None,128) 128维向量的全长序列。 如果序列为200,则可以设置(200,1)忽略批量大小