Я изучаю генные последовательности.У меня есть кадр данных в R, который содержит один столбец с одной последовательностью в каждой строке и другой столбец с True или False (1 или 0) для каждой последовательности, и я хочу проверить в этом эксперименте, могут ли возможные мутации в последовательности привестик определенному неврологическому заболеванию (представленному столбцом True / False).
Для этого я хотел построить двунаправленную модель LSTM, которая бы анализировала каждую последовательность самостоятельно и была обучена возвращать либо True, либоНеверно, как я уже сказал.
Дело в том, что мои знания LSTM, Keras и R в целом очень ограничены, и я пару дней боролся с этим.
Я читал оформы ввода для LSTM, и не знаю, понял ли я их еще.У меня есть 1125 последовательностей длиной 251 символ для обучения, и для этого эксперимента я попытался с входной формой (1125,5,1).
Это структура данных моего поезда:
str(x_train)
chr [1:225, 1:5, 1] "111121211121123131112142241444213344144441421221314431143441144412121111121141212344444412424212112314212113422"| __truncated__ ...
str(y_train)
num [1:225, 1:5, 1] 1 1 1 1 1 1 1 1 1 1 ...
И вот модель, с которой я работаю:
max_length = 251
sequence_length = 5
input_shape = c(sequence_length, 1)
history = NULL
lstm_cells = 60
batch_size = 100
epochs = 60
learn_rate = 0.0001
modelBLSTM <- keras_model_sequential()
modelBLSTM %>%
bidirectional(layer_lstm(units = lstm_cells, dropout = 0.5, recurrent_dropout = 0.5, return_sequences = TRUE), merge_mode = 'concat', input_shape = input_shape) %>%
time_distributed(layer_dense(units = lstm_cells, activation = 'relu')) %>%
layer_flatten() %>%
layer_dense(units = 1, activation="sigmoid") %>%
summary(model)
modelBLSTM %>% compile(
loss = loss_binary_crossentropy,
optimizer = optimizer_rmsprop(lr = learn_rate),
metrics = c('accuracy')
)
history =
modelBLSTM %>% fit(
x = x_train,
y = y_train,
epochs = epochs,
batch_size = batch_size,
validation_data = list(x_test, y_test),
verbose = 1)
history
Здесь я получил ошибку, котораяговорит
Ошибка при проверке ввода: ожидалось, что bidirectional_19_input имеет 3 измерения, но получил массив с формой (1125, 1)
Итак, мои вопросы: Как я мог изменить формумои данные, чтобы иметь эту форму?И: Какой эффект оказывает эта входная форма в моих последовательностях?Потому что позже я захочу настроить все, что смогу, для достижения наилучшего результата, и не знаю, как изменение формы ввода влияет на модель.
РЕДАКТИРОВАТЬ:
Итак, у меня естьизмените данные моего поезда на (1125 / 5,5,1), и я также поменял каждую букву на символ (так что A = 1, G = 2, C = 3 и T = 4), потому что это давало мне ошибку, чтосказал, что "не удалось преобразовать строку в число с плавающей точкой".Я обновил это в своем посте.
Но теперь, когда он начинает вписываться в эпоху # 1, он останавливается и выдает мне эту ошибку:
Ошибка в py_call_impl (callable,точки $ args, точки $ ключевые слова):
InvalidArgumentError: Несовместимые формы: [100,1] против [100,5,1]
[[Узел: training_5 / RMSprop / gradients / loss_23 / dens_49_loss / logistic_loss /mul_grad / BroadcastGradientArgs = BroadcastGradientArgs [T = DT_INT32, _class = ["loc: @train ... ad / Reshape"], _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"](training_5 / RMSprop / градиенты / loss_23 / dens_49_loss / logistic_loss / mul_grad / Shape, training_5 / RMSprop / градиенты / loss_23 / density_49_loss / logistic_loss / mul_grad / Shape_1)]]
Я знаю, что в [100,1], 100 относится к установленному мною batch_size, но я не знаю, где проблема и как ее решить.Любая помощь?