在单速编码数据集上使用KERAS的2D-CNN模型



如何使用单速编码的基因组序列数据设计KERAS 2D-CNN模型?

i具有近50,000个固定长度的基因组序列。我正在尝试为2类分类问题建模2D-CNN。首先,我使用单芯片编码转换了序列。因此,每个样本(序列(成为4 x 200矩阵。从这里,我从Github中可用的许多mnist示例中假设,我可以将此矩阵视为任何其他图像矩阵。因此,我编码类似于mnist示例中给出的代码。这是我的代码

X_train = sample_matrices[0:N1]
X_valid = sample_matrices[N1:N2]
X_test = sample_matrices[N2:num_sample]
X_train = X_train.reshape(X_train.shape[0], row, col, 1)
X_test = X_test.reshape(X_test.shape[0], row, col, 1)
X_valid = X_valid.reshape(X_valid.shape[0], row, col, 1)
input_shape = (row, col, 1)
model = Sequential()
model.add(Conv2D(32, kernel_size = (3, 3),
                     activation = 'relu',
                     input_shape = input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

在这里 row = 4, col = 200

我收到了一个错误消息

ValueError: Negative dimension size caused by subtracting 3 from 2 for 'conv2d_2/convolution' (op: 'Conv2D') with input shapes: [?,2,198,32], [3,3,32,64].

我几乎可以肯定我在input_shape上做错了什么,但我不确定。有人可以帮忙吗?抱歉,如果问题太幼稚。

错误来自您的第二层(Conv2D_2(。您正在收到此错误,因为第一层(Cons2D_1(会产生形状[?,2,198,32]的矩阵(批次,行,Cols,频道(,然后尝试使用kernel_size=(3, 3)(行,COLS(padding="valid"(默认参数(,发生溢出。

您可以通过将padding="valid"的默认设置更改为padding="same"来避免此错误在Conv2D构造函数中,如文档所示https://keras.io/layers/convolutional/或通过更改conv2d_2的kernel_size=(1, 3)(行,COLS(。

通过更改填充,您允许输入形状用零填充(如有必要(。例如:

  • "有效" =无填充:

       Inputs:  1  2  ?  <-- Overflow
               |_______|
       Output rows shape: ceil((rows_in - kernel_size[0] + 1) / strides[0]) = 0
       Output cols shape: ceil((cols_in - kernel_size[1] + 1) / strides[1])
    
  • " same" =带零填充:

                    | pad
       Inputs:  1  2| 0  0
               |_______|
                  |_______|
       Output rows shape: ceil(rows_in / strides[0]) = 2
       Output cols shape: ceil(cols_in / strides[1])
    

在此示例中:

  • 输入行= 2(作为conv2d_1输出的行数(
  • kernel_size = 3

最新更新