Tôi sử dụng gc()
để giải phóng RAM giữa các thao tác. Dưới đây là ví dụ về cách tôi sử dụng nó trong một vòng lặp, nhưng xem here để có một cuộc thảo luận chi tiết hơn về gc()
và here để biết thêm về quản lý bộ nhớ trong một phiên R.
# load library
library(topicmodels)
# get data
data("AssociatedPress"))
# set number of topics to start with
k <- 20
# set model options
control_LDA_VEM <-
list(estimate.alpha = TRUE, alpha = 50/k, estimate.beta = TRUE,
verbose = 0, prefix = tempfile(), save = 0, keep = 0,
seed = as.integer(100), nstart = 1, best = TRUE,
var = list(iter.max = 10, tol = 10^-6),
em = list(iter.max = 10, tol = 10^-4),
initialize = "random")
# create the sequence that stores the number of topics to
# iterate over
sequ <- seq(20, 300, by = 20)
# basic loop to iterate over different topic numbers with gc
# after each run to empty out RAM
lda <- vector(mode='list', length = length(sequ))
for(k in sequ) {
lda[[k]] <- LDA(AssociatedPress[1:20,], k, method= "VEM", control = control_LDA_VEM)
gc() # here's where I put the garbage collection to free up memory before the next round of the loop
}
# convert list output to dataframe (suggestions for a simpler method are welcome!)
best.model.logLik <- data.frame(logLik = as.matrix(lapply(lda[sequ], logLik)), ntopic = sequ)
# plot
with(best.model.logLik, plot(ntopic, logLik, type = 'l', xlab="Number of topics", ylab="Log likelihood"))
# print ordered dataframe to see which number of topics has the highest log likelihood
(best.model.logLik.sort <- best.model.logLik[order(-as.numeric(best.model.logLik$logLik)), ])
logLik ntopic
2 -17904.12 40
3 -18105.48 60
1 -18181.84 20
4 -18569.7 80
5 -19736.94 100
6 -21919.6 120
7 -23785.08 140
8 -24914.23 160
9 -25493.76 180
10 -25837.64 200
11 -25964.23 220
12 -26061.01 240
13 -26117.92 260
14 -26149.44 280
15 -26168.91 300
gì sẽ xảy ra sau khi 'gc() '? – Ben
Tuyệt vời! gc() là những gì tôi cần! – PepsiCo
Tôi xin lỗi, tôi nhận được một câu hỏi khác, khi tôi chạy chương trình, bộ nhớ được sử dụng lớn hơn và lớn hơn, do đó, nó là cần thiết cho tôi để thêm một số gc() trong chương trình của tôi? Tôi có nghĩa là thêm một số gc() trong mã của tôi, chẳng hạn như # mã # gc() # mã # gc() # mã #, nó có hữu ích không? – PepsiCo