【问题标题】:R vector memory exhausted for calculating tensor products用于计算张量积的 R 向量内存已耗尽
【发布时间】:2021-01-24 11:17:54
【问题描述】:

我在 RStudio(版本 3.5.2)中计算 60,000 对 28*28 矩阵的张量积,控制台显示“错误:向量内存已用尽(达到限制?)”。我认为我的 MacBook Pro 不会有这么低的容量(16GB RAM)。我尝试了mclapply 方法进行并行计算,但仍然无法正常工作。谁能给我一些见解?非常感谢!

如有必要,以下是我的代码。我无法运行最后一行。

install.packages("keras")
library(keras)
install_keras()
install_keras(method = "conda")

library(keras)
mnist <- dataset_mnist()
str(mnist)

trainx <- mnist$train$x
trainy <- mnist$train$y
testx <- mnist$test$x
testy <- mnist$test$y

trainxr <- trainx
trainxg <- trainx
trainxb <- trainx
testxr <- testx
testxg <- testx
testxb <- testx

#training data
i <- 1
for(i in i:60000){
  randomr <- sample (0:255, 1)
  randomg <- sample (0:255, 1)
  randomb <- sample (0:255, 1)
  trainxr[i,,] <- (randomr/255)*(trainx[i,,]/255)
  trainxg[i,,] <- (randomg/255)*(trainx[i,,]/255)
  trainxb[i,,] <- (randomb/255)*(trainx[i,,]/255)
  i <- i+1
}

#testing data
j <- 1
for(j in j:10000){
  randomr <- sample (0:255, 1)
  randomg <- sample (0:255, 1)
  randomb <- sample (0:255, 1)
  testxr[j,,] <- (randomr/255)*(testx[j,,]/255)
  testxg[j,,] <- (randomg/255)*(testx[j,,]/255)
  testxb[j,,] <- (randomb/255)*(testx[j,,]/255)
  j <- j+1
}

#for training
k <- 1
for(k in k:60000){
  randomminus <- sample (0:255, 1)
  matrixminus <- matrix((randomminus/255):(randomminus/255), nrow = 28, ncol = 28)
  trainxr[k,,] <- trainxr[k,,] - matrixminus
  trainxr[k,,] <- abs(trainxr[k,,])
  trainxg[k,,] <- trainxg[k,,] - matrixminus
  trainxg[k,,] <- abs(trainxg[k,,])
  trainxb[k,,] <- trainxb[k,,] - matrixminus
  trainxb[k,,] <- abs(trainxb[k,,])
  k <- k+1
}

#for testing
l <- 1
for(l in l:10000){
  randomminus <- sample (0:255, 1)
  matrixminus <- matrix((randomminus/255):(randomminus/255), nrow = 28, ncol = 28)
  trainxr[l,,] <- trainxr[l,,] - matrixminus
  trainxr[l,,] <- abs(trainxr[l,,])
  trainxg[l,,] <- trainxg[l,,] - matrixminus
  trainxg[l,,] <- abs(trainxg[l,,])
  trainxb[l,,] <- trainxb[l,,] - matrixminus
  trainxb[l,,] <- abs(trainxb[l,,])
  l <- l+1
}

#tensor product
stepone <- matrix(1:1, nrow=21952, ncol=28)
steptwo <- matrix(1:1, nrow=28, ncol=28)
trainxtensor_a <- trainxr %x% trainxg

【问题讨论】:

  • 这能回答你的问题吗? R on MacOS Error: vector memory exhausted (limit reached?) - 尝试将R_MAX_VSIZE=100Gb 添加到您的.Renviron
  • 感谢您的回复,user438383。这个方法我试过了,但是没用:(
  • 如果您有无限资源,最后一行的输出将是一个 60000^2 x 784 x 784 的数组,这个数组非常大。这真的是你所期待的吗?

标签: r


【解决方案1】:

我猜您打算折叠该张量积中的第 2 维和第 3 维。也许你想要这样的东西:

library(tensor)
trainxtensor_a <- tensor(trainxr, trainxg, c(2,3), c(2,3))

虽然您应该先尝试使用较小的数据集来检查它是否符合您的预期:

trainxtensor_a <- tensor(trainxr[1:5,,], trainxg[1:5,,], c(2,3), c(2,3))

【讨论】:

  • 非常感谢!只是一个小问题:“张量”是我应该安装的软件包,比如install.packages("tensor"),然后是library(tensor)?当我使用这个包时,环境似乎没有反应。再次感谢您的努力!
  • 是的,使用install.packages("tensor") 在刚刚加载它的库调用之前安装它。您也可以从 RStudio 中的菜单工具->安装包中执行此操作。如果你经常使用 R,你会安装很多包...
  • 实际上我的电脑运行了这个程序一个多小时?这真的是一项艰巨的工作。我认为你提供的方法是正确的。总之,感谢您的帮助!
猜你喜欢
  • 2018-12-21
  • 2021-02-10
  • 2020-03-21
  • 2018-12-17
  • 2021-11-24
  • 2019-09-29
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多