Python 2.7 一个热编码数据集上具有keras的2D-CNN模型

Python 2.7 一个热编码数据集上具有keras的2D-CNN模型,python-2.7,keras,one-hot-encoding,Python 2.7,Keras,One Hot Encoding,如何利用一个热编码的基因组序列数据设计keras 2D-CNN模型 我有将近50000个固定长度的基因组序列。我试图为2类分类问题建立2D-CNN模型。首先,我使用一个热编码转换序列。因此,每个样本(序列)成为4x200矩阵。从这里,我假设从Github中提供的大量mnist示例中,我可以将此矩阵视为任何其他图像矩阵。因此,我编写的代码与mnist示例中给出的代码类似。这是我的密码 X_train = sample_matrices[0:N1] X_valid = sample_matrices

如何利用一个热编码的基因组序列数据设计keras 2D-CNN模型

我有将近50000个固定长度的基因组序列。我试图为2类分类问题建立2D-CNN模型。首先,我使用一个热编码转换序列。因此,每个样本(序列)成为
4x200
矩阵。从这里,我假设从
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'))
此处
行=4,列=200

我收到一条错误消息

ValueError:conv2d_2/卷积(op:'conv2d')的输入形状为:[?,2198,32],[3,3,32,64],[3,3,32,64]时,从2中减去3会导致负维度大小。

我几乎可以肯定我的
input\u shape
有问题,但我不确定是什么问题。有人能帮忙吗?
如果问题太幼稚,很抱歉。

错误来自第二层(conv2d_2)。 您收到此错误是因为第一层(conv2d_1)生成 形状矩阵
[?,2198,32]
(批、行、列、通道),然后您可以尝试 使用
kernel\u size=(3,3)
(行,列)
padding=“valid”
(默认参数),则会发生溢出

通过将默认设置
padding=“valid”
更改为
padding=“same”
在Conv2D构造函数内部,如文档所示 或者通过更改conv2d的
内核大小=(1,3)
(行,列)

通过更改填充,可以使用零填充输入形状(如果需要)。 e、 g:

  • “VALID”=不带填充:

       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])
    
在本例中:

  • 输入行数=2(作为conv2d_1输出的行数)
  • 内核大小=3

我对这个特定的用例(即基因组数据)不太熟悉,但我认为这是一个1D序列。因此,使用一维卷积不是更好吗?例如,请参见。
                | pad
   Inputs:  1  2| 0  0
           |_______|
              |_______|

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