理解编码为1 h的DNA序列的1D卷积

2024-09-28 01:26:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用卷积神经网络对DNA序列进行分类。DNA序列被转换成一个输入阵列,编码为一个热载体。例如,“ACTG”编码为[[1,0,0,0],[0,1,0,0],[0,0,0,1],[0,0,1,0]]。我把每个样本都这样编码了。输入的维数将是number_of_samples*length_of_samples*4。我现在正试图理解一维卷积在像这样的输入数组上是如何工作的,但是我无法计算出一维卷积的输出是什么样子。非常感谢你的帮助。作为参考,我使用了斯坦德大学Kundaje实验室的this代码。我不明白一维卷积对于三维输入是如何工作的。在


Tags: ofnumber编码分类序列神经网络length卷积
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:41

下面是KerasConv1D模块的文档,其中他们将模型的输入描述为固定长度的固定或可变数量的序列(如示例(10128):10个序列,每个序列的长度为128)。在

一维卷积可以被认为是贯穿于二维数据的单一空间或时间维度。这个stack overflow答案对各种类型的Conv层给出了相当清晰的解释。在

为了解决你的问题,我做了一个有2个conv层和随机数据的玩具程序,我想你可能会觉得有用。在

data = np.random.random((64,4,4))
labels = np.random.random((64,2))
dataset = tf.data.Dataset.from_tensor_slices((data,labels))
dataset = dataset.batch(2).repeat()
inputs = Input(shape=(4,4))

x = Conv1D(32, 3, activation='relu')(inputs)
x = Flatten()(x)
x = Dense(32, activation='relu')(x)
predictions = Dense(2, activation='softmax')(x)

model = keras.Model(inputs=inputs, outputs=predictions)

model.compile(optimizer='adam',
          loss='categorical_crossentropy',
          metrics=['accuracy'])
model.summary()
model.fit(dataset.make_one_shot_iterator(), epochs=5, steps_per_epoch=100)

结果:

^{pr2}$

现在你可以用一个形状(没有序列,4)来代替4,然后用这种方式定义你自己的模型。 但是,如果您想使用类似(None,4)的东西,如果您的序列是可变的,并且没有您可以选择的固定长度,那么在使用Tensorflow后端时,您会遇到密集层的问题,这需要输入的最后一个维度。 所以你可以选择最适合这个要求的形状。在

相关问题 更多 >

    热门问题