我正在研究基因序列。我在R中有一个数据框,其中包含一列,每一行中都有一个序列,而另一列的每一列中都包含True或False(1或0),我想通过此实验检查该序列中是否可能存在突变某种神经系统疾病(由“真/假”列表示)。
为此,我想构建一个双向LSTM模型,该模型可以自行分析每个序列,并经过训练可以返回True或False,如我所说。
问题是,我通常对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(可调用,dots $ args,dots $ keywords)错误:
InvalidArgumentError:不兼容的形状:[100,1]与[100,5,1]
[[节点:training_5 / RMSprop / gradients / loss_23 / dense_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 / gradients / loss_23 / dense_49_loss / logistic_loss / mul_grad / Shape,training_5 / RMSprop / gradients / loss_23 / dense_49_loss / logistic_loss / mul_grad / Shape_1)] ]
我知道在[100,1]中100是指我设置的batch_size,但我不知道问题出在哪里或如何解决。有帮助吗?