下面這個keras模型在用用戶提供的損失函式訓練時產生了如下的錯誤。下面是MWE(只是用一個假的損失函式來證明這個問題):
library(keras)
##設定模型。
in.lay <- layer_input(shape = 2)
out.lay <- layer_dense(in.lay, units = 2, activation = "sigmoid" /span>)
model <- keras_model(in.lay, out.lay)
## 編譯 in.lay, out.lay.
NN <- compile(model, optimizer = "adam"/span>, loss = function(x, y = out.lay) 1) # 啞巴損失函式;下面的fit()失敗了
# Train
n <- 10000
set.seed(271)
data <- matrix(runif(n * 2), ncol = 2) # dummy training data
先驗 <- qnorm(matrix(runif(n * 2), ncol = 2) 資料
fit(NN, x = prior, y = data, batch_size = 1000, epochs = 10) # 訓練(失敗 與 的 錯誤 低于)
這是我得到的錯誤資訊:
這是我得到的錯誤資訊。
Epoch 1/10。
錯誤 in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: in user code:
8/site-packages/tensorflow/python/keras/engine/training.py:571 train_function *
output = self.distribut_strategy.run(
/usr/local/tensorflow/lib/python3. 8/site-packages/tensorflow/python/distribute/distribute_lib.py:951運行 **。
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/tensorflow/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
8/site-packages/tensorflow/python/distribute/distribute_lib.py:2649_call_for_each_replica
return fn(*args, **kwargs)
8/Site-packages/tensorflow/python/keras/engine/training.py:532 train_step **
loss = self.compiled_loss(
/usr/local/tensorflow/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_util
注意,如果提供另一個損失函式,上述模型的訓練效果很好,例如用NN <- compile(model, optimizer = "adam", loss = loss_mean_squared_error),fit()呼叫作業無懈可擊。還要注意的是,我之前可以使用用戶提供的損失函式,而且沒有任何問題,所以這可能是由于R包、TensorFlow、Keras等的更新(我不知道)。在呼叫fit()之前呼叫debug(keras::fit.keras.engine.training.Model),發現history <- do.call(object$fit, args)在keras::fit.keras.engine.training.Model()內失敗,但無論是object$fit還是args看起來都很可疑。下面是我在R中的sessionInfo():
sessionInfo()
R version 4。 0.4 (2021-02-15)
Platform: x86_64-apple-darwin20.3.0 (64位)。
運行 在下。macOS Big Sur 11。 5.2。
Matrix products。default 產品: 默認
BLAS: /usr/local/R/R-4。 0.4_build/lib/libRblas.dylib。
LAPACK: /usr/local/R/R-4。 0.4_build/lib/libRlapack.dylib。
locale:
[1] en_CA。 UTF-8/en_CA.UTF-8/。 UTF-8/C/en_CA。 UTF-8/en_CA.UTF-8。
attached base packages:
[1] stats graphics grDevices utils datasets methods base
其他 附加 包。
[1] keras_2。 3.0.0.9000。
加載 通過 a 命名空間(并且不附加)。
[1] Rcpp_1。 0.7 lattice_0。 20-41 here_1.0.1 png_0.1-7[5] rprojroot_2. 2 zeallot_0.1. 0 rappdirs_0.3. 3 grid_4.
[9] R6_2. 5.0 jsonlite_1. 7.2 magrittr_2。 0.1 tfruns_1.4
[13] whisker_0.4 Matrix_1。 3-2 reticulate_1.22 generics_0.1.0[17] compiler_4. 4 base64enc_0.1-3 tensorflow_2.6.0
uj5u.com熱心網友回復:
我意識到,在一次更新之后,我啟動R的方式發生了變化,當在所需的Python環境內運行R時不,就會產生上述錯誤。在我從運行TensorFlow的Python環境中啟動R后,這個問題完全消失了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328134.html
標籤:
