Keras Conv1D на последовательности ДНК

Я хотел бы применить одномерную свертку к последовательности ДНК фиксированного размера, используя keras.
Последовательность ДНК имеет длину 45 оснований. Каждая последовательность была закодирована горячим способом. Есть один фильтр с размером ядра = 3. См. рисунок ниже:

1D свертка

У меня есть 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, эпохи = 10)

Но я получаю следующую ошибку:

ValueError: Error when checking input: expected conv1d_1_input to have shape (1000, 45) but got array with shape (45, 4)

person dridk    schedule 16.03.2019    source источник


Ответы (1)


Во входной форме для слоя Conv1D вы не должны записывать количество последовательностей в вашем наборе данных, и вы обязательно должны указать 2 измерения ваших ДНК, закодированных одним горячим кодом. Итак, ответ input_shape =(45,4) должен успеть. Что касается количества последовательностей в наборе данных, вы можете либо полностью опустить это число, либо разделить его на размеры пакетов (32, 64, 128...), что лучше для производительности графического процессора: model.fit(x_train, y_train, batch_size=64, epochs=10)

person gregoruar    schedule 15.07.2020