Jupyter Notebook(仅限)内存错误,相同的代码在传统的.py文件中运行正常。

12

我正在上深度学习课程,老师们提供了一个Jupyter notebook作为基础代码。但遇到了问题:在进行数据导入和重塑后,Jupyter notebook 出现了 “Memory Error”(内存错误)的提示。通过一些分析后,我尝试将相同的代码编译到普通的 .py 文件中,并且一切都正常运行。

然而,我的要求是最好使用 Jupyter notebook 作为开发的基础,因为对于这种任务来说更加互动。

<ipython-input-2-846f80a40ce2> in <module>()
  2 # Load the raw CIFAR-10 data
  3 cifar10_dir = 'datasets\\'
----> 4 X, y = load_CIFAR10(cifar10_dir)

C:\path\data_utils.pyc in load_CIFAR10(ROOT)
     18     f = os.path.join(ROOT, 'cifar10_train.p')
     19     print('Path:  ' + f );
---> 20     Xtr, Ytr = load_CIFAR_batch(f)
     21     return Xtr, Ytr
     22 

C:\path\data_utils.pyc in load_CIFAR_batch(filename)
     10         X = np.array(datadict['data'])
     11         Y = np.array(datadict['labels'])
---> 12         X = X.reshape(-1, 3, 32, 32).transpose(0,2,3,1).astype("float")
     13         return X, Y
     14 

MemoryError: 

错误出现在第12行,我知道这是一个占用内存的赋值操作,但这并不意味着4GB的RAM不足以完成,当代码在Jupyter之外运行时,这已经得到了确认。

我猜这可能与Jupyter或Chrome的内存限制有关,但我不确定也不知道如何解决它。

顺便说一下:

  • 我有一台安装了Windows 10系统的笔记本电脑,配备了4 GB的RAM
  • 以及Chrome版本57.0.2987.133(64位)

我的猜测是,当你从笔记本运行脚本时,路径是无效的。你可以尝试在尝试重新塑造之前打印X.shape,并在此处包含结果吗?或者进行任何其他数据加载成功的检查? - alexisrozhkov
你的笔记本电脑正在运行什么类型的内核? - juanpa.arrivillaga
@alexisrozhkov 是的,我已经检查了路径是否正确,并且数据在.py文件中以相同的方式进行处理,所以不是这个问题。我使用“nbconvert --to script”将笔记本副本转换为.py格式,它创建在同一个文件夹中,当我运行那个文件时,没有任何问题。 - Danfoa
Python 2.7,但是.py文件仍然在Python 2.7中运行。 - Danfoa
6个回答

7

4

显然,当python安装不够完善时,会出现这种情况。

事实上,在解决问题之前,我在Windows上手动安装了Python 2.7和我需要的软件包。经过将近两天的研究,我重新使用Conda安装了一切,问题得到解决。

我想Conda安装了更好的内存管理软件包,这是主要原因。


1
这个答案真的救了我的命。非常感谢你,Danfoa!几天来,我一直不明白为什么会出现MemoryError错误,因为我的电脑有足够的内存。所以,是的,原来从我的根Python 3环境切换到一个新的Conda环境解决了这个问题!我还猜想,Conda的内存管理对此更加有效。 - Yaniv Goldfrid

2

尝试使用管理员权限运行。这对我有用。


1

在加载.npy文件时,我遇到了类似的问题。释放RAM解决了这个问题。它没有足够的内存将文件加载到变量中。实际上,我的系统上运行着Firefox和Chrome,关闭Firefox解决了问题。

有用的命令:free -h 注意事项:在自己解释此命令之前,强烈建议阅读此页面:https://www.linuxatemyram.com/


0

我在使用包含数百万行数据集的Jupyter时遇到了同样的问题。我尝试了多个选项:

选项1:删除不需要的变量并使用gc.collect进行垃圾清理
例如:如果有未使用的变量v1、v2、v3等,则运行命令del v1 del v2 del v3等,然后导入garbagecollecter
import gc gc.colletc() 这可以稍微加快速度,但内存泄漏问题仍然存在。

选项2:对我有效,启用VS Code中的Jupyter Add in。在VS Code中打开ipny文件。VS Code是独立的,能够避免内存泄漏。

希望这能帮到你。


-8

你可以减少训练和测试数据集的大小,这样可以解决内存错误问题。


1
你能详细解释或展示应该如何完成吗? - ZGski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接