r语言 - 使用 cuDNN 内核进行 LSTM



我想用Cudnn训练我的RNN模型:

max_length <- 140 
embedding_dim <- 128
model <- keras_model_sequential()
# define model
model %>% 
# layer input
layer_embedding(
name = "input",
input_dim = num_words,
input_length = max_length,
output_dim = embedding_dim, 
embeddings_initializer = initializer_random_uniform(minval = -0.05, maxval = 0.05, seed = 2)
) %>%
# layer dropout
layer_spatial_dropout_1d(
name = "embedding_dropout",
rate = 0.2
) %>%
# layer lstm 1
bidirectional(layer_lstm(
name = "lstm",
units = 64,
unroll = FALSE,
dropout = 0.2,
use_bias = TRUE,
recurrent_dropout = 0,
return_sequences = TRUE
)) %>% 
layer_batch_normalization() %>%
# layer output
layer_dense(
name = "output",
units = 3,
activation = "softmax"
)

当我运行这个时,我得到这个预热:

警告:张量流:层 lstm 不会使用 cuDNN 内核,因为它 不符合 cuDNN 内核标准。它将使用通用的GPU内核 作为在 GPU 上运行时的回退

我想我已经遵循了所有要求,不确定我错过了什么。

会议信息:

R version 4.0.0 (2020-04-24)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
other attached packages:
[1] keras_2.3.0.0
loaded via a namespace (and not attached):
[1] Rcpp_1.0.4.6     lattice_0.20-41  zeallot_0.1.0    rappdirs_0.3.1  
[5] grid_4.0.0       R6_2.4.1         jsonlite_1.6.1   magrittr_1.5    
[9] tfruns_1.4       whisker_0.4      Matrix_1.2-18    reticulate_1.15 
[13] generics_0.0.2   tools_4.0.0      xfun_0.14        compiler_4.0.0  
[17] base64enc_0.1-3  tensorflow_2.2.0 knitr_1.28   

我遇到了同样的问题,并通过手动设置选项以使用此处指定的与 cuDNN 兼容的实现来修复它。

"根据可用的运行时硬件和约束,该层将选择不同的实现(基于cuDNN或纯TensorFlow(以最大限度地提高性能。如果 GPU 可用并且该层的所有参数都满足 CuDNN 内核的要求(有关详细信息,请参见下文(,则该层将使用快速 cuDNN 实现。

使用 cuDNN 实现的要求是:

  1. 激活 == 坦
  2. recurrent_activation == 乙状结肠
  3. recurrent_dropout == 0
  4. 展开是假的
  5. use_bias是真的
  6. 如果使用屏蔽,则输入严格右填充。
  7. 最外层启用预先执行 上下文。

特别是,我必须指定recurrent_activation == sigmoid.我安装的 Keras/TF 版本默认为recurrent_activation == hard_sigmoid

最新更新