1

我有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].

有没有办法正确进我的投入?

回答

0

就我所知1D卷积层接受Batchsize x Width x Channels形式的输入。您正在使用

X_train = np.reshape(X_train, (1, X_train.shape[0], X_train.shape[1]))

X_train.shape[0]重塑你BATCHSIZE我guess.I认为这个问题是这里的某个地方。您可以在重塑之前告诉X_train的形状是什么?

+0

重塑之前,X_train的形状是(339732,29)。另外,在序列的情况下,频道的可能价值是什么? (这对图像没有意义吗?) –

+0

好的,所以你要做的是向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)。这应该工作。 –

+0

这样做,给出了错误:'ValueError:检查模型输入时出错:期望的conv1d_1_input有形状(无,339732,29)但有形状的数组(339732,29,1)' –

相关问题