我在 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 容器(摇杆/诗歌图像)中运行了代码,它是一样的。
序列化/反序列化的许多不同组合 - 无效。
我需要帮助来摆脱这些致命错误。