我想使用keras对固定大小的DNA序列进行一维卷积。
DNA序列长45个碱基。每个序列已被一热编码。有一个内核大小= 3的过滤器。请参见下图:
我有1000个训练序列。
那么x_train的形状为:(1000,45,4)。
目标为True / False,形状为(1000,)
我试图这样使用keras:
K.clear_session()
model = Sequential()
#add model layers
model.add(Conv1D(1, kernel_size=1, activation="relu", input_shape =(1000,45)))
#model.add(Flatten())
#model.add(Dense(2, activation="softmax"))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train,y_train,epochs = 10)
但是出现以下错误:
ValueError: Error when checking input: expected conv1d_1_input to have shape (1000, 45) but got array with shape (45, 4)
答案 0 :(得分:0)
在Conv1D层的输入形状中,您不应写出数据集中的序列数,而应明确指出一维编码DNA的2维。因此答案是input_shape =(45,4)
应该成功。至于数据集中的序列数,您可以完全省略此数字,也可以将其划分为批处理大小(32、64、128 ...),这对于GPU性能来说更好:model.fit(x_train, y_train, batch_size=64, epochs=10)
>