0

我在 R 中使用 mlpack 包进行字典学习。我已经使用下面的代码进行了学习:

mnist <- keras::dataset_mnist()

N_train <- 300
train_set <- mnist$train$x[sample(1:nrow(mnist$train$x), size = N_train), , ]

n_samples <- dim[1]
i_width <- dim[2]
i_height <- dim[3]

train_resh <- keras::array_reshape(train_set, dim = c(n_samples, i_width * i_height))

dictionary <- readRDS("dictionary.RDS") # a dictionary trained before and stored
dictionary_dim <- dim(dictionary)

N_MODEL_ATOMS <- 50

init_dictionary <- dictionary

# The main function:
sparse_cod_out <- mlpack::sparse_coding(atoms = N_MODEL_ATOMS,
                                          training = train_resh,
                                          verbose = TRUE,
                                          initial_dictionary = init_dictionary)
saveRDS(sparse_cod_out$dictionary, file = "dictionary.RDS")

# Store the model for future purposes as the learning can take a lot of time
mlpack::Serialize(sparse_cod_out$output_model, "model_ptr")

我使用 mlpack::Serialize 保存输出模型 - 模型是 externalptr 对象,因此它引用内存地址。

当我只想对新实例进行建模时,我会跳过训练步骤并使用以下代码:

test_data <- mnist$test$x[1, ,]
test_data_resh <- keras::array_reshape(test_data, dim = c(1, i_width * i_height))

codes <- sparse_coding(
  input_model = mlpack::Unserialize("model_ptr"), # load the model stroed previously
  test = test_data_resh
)

recovered_signal <- codes$codes %*% codes$dictionary

它工作正常,但如果我想多次运行上述代码,R 会因致命错误而崩溃。它发生在 R 4.0.3 和 RStudio 1.3 以及 R 4.0.5、RStudio 1.4 和 Windows 10 Pro 上。我还在 Ubuntu 上的 RStudio docker 容器(摇杆/诗歌图像)中运行了代码,它是一样的。

序列化/反序列化的许多不同组合 - 无效。

我需要帮助来摆脱这些致命错误。

4

0 回答 0