R

时间:2019-07-04 13:46:42

标签: r tensorflow keras

我正在研究基因序列。我在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,但我不知道问题出在哪里或如何解决。有帮助吗?

0 个答案:

没有答案