我有339732行和两列的CSV文件:如何重塑我的输入以将其输入1D卷积图层以进行序列分类?
- 第一个是29的特征值,即,X
第二个是一个二进制标记值,即ÿ
数据帧= PD .read_csv( “features.csv”,标题=无) 数据集= dataframe.values
X = dataset[:, 0:29].astype(float) Y = dataset[:,29] X_train, y_train, X_test, y_test = train_test_split(X,Y, random_state = 42)
我试图训练它一维卷积层上:
model = Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(X_train.shape[0], 29)))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(3))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(GlobalAveragePooling1D())
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=16, epochs=2)
score = model.evaluate(X_test, y_test, batch_size=16)
由于,在Conv1D层期望一个3-d的输入,我转化我的输入如下:
X_train = np.reshape(X_train, (1, X_train.shape[0], X_train.shape[1]))
X_test = np.reshape(X_test, (1, X_test.shape[0], X_test.shape[1]))
然而,这仍然抛出错误:
ValueError: Negative dimension size caused by subtracting 3 from 1 for 'conv1d_1/convolution/Conv2D' (op: 'Conv2D') with input shapes: [?,1,1,29], [1,3,29,64].
有没有办法正确进我的投入?
重塑之前,X_train的形状是(339732,29)。另外,在序列的情况下,频道的可能价值是什么? (这对图像没有意义吗?) –
好的,所以你要做的是向CNN提供长度为29的矢量。 339732这样的矢量在那里。你可以将它们想象成高度为1,宽度为29,通道1的图像.CNN2D输入形状将为(1,29,1)(行,列,通道)。 CNN1D输入形状应该是(29,1)。如果您使用CNN2D,请重塑您的X_Train为(339732 x 29 x 1),然后重塑为(339732 x 1 x 29 x 1)。这应该工作。 –
这样做,给出了错误:'ValueError:检查模型输入时出错:期望的conv1d_1_input有形状(无,339732,29)但有形状的数组(339732,29,1)' –