为了账号安全,请及时绑定邮箱和手机立即绑定

在 keras 中调用 to_categorical 时出现内存错误

在 keras 中调用 to_categorical 时出现内存错误

交互式爱情 2021-06-09 14:55:08
我尝试运行语言建模程序。当我在文档中使用包含 15000 个句子的数据序列时,程序运行正常。但是,当我尝试使用更大的数据(大 10 倍)更改数据时,遇到如下错误:Traceback (most recent call last):  File "<ipython-input-2-aa5ef9098286>", line 1, in <module>    runfile('C:/Users/cerdas/Documents/Bil/Lat/lstm-plato-lm/platolm.py', wdir='C:/Users/cerdas/Documents/Bil/Lat/lstm-plato-lm')  File "C:\Users\cerdas\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile    execfile(filename, namespace)  File "C:\Users\cerdas\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile    exec(compile(f.read(), filename, 'exec'), namespace)  File "C:/Users/cerdas/Documents/Bil/Lat/lstm-plato-lm/platolm.py", line 35, in <module>    y = to_categorical(y, num_classes=vocab_size)  File "C:\Users\cerdas\Anaconda3\lib\site-packages\keras\utils\np_utils.py", line 30, in to_categorical    categorical = np.zeros((n, num_classes), dtype=np.float32)MemoryError这是可疑的错误代码行:model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])还有 np.utilscategorical = np.zeros((n, num_classes), dtype=np.float64)我试图搜索类似问题的解决方案,我发现我必须更改categorical_crossentropy为sparse_categorical_crossentropy. 我已经这样做了,但同样的回溯仍然是错误的。谢谢
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我认为这个错误是意料之中的。这里真正的问题是你没有足够的空间来分配 1) 决策层的参数矩阵,和/或 2) 中间张量。

参数矩阵的形状为input_feat_dim x output_num_classes。可以看到,这个矩阵在词汇量很大的时候会消耗大量的内存。为了训练网络,我们还需要为 BP 保留中间张量,它会更大—— batch_size x input_feat_dim x output_num_classes

因此,您可以非常快速地尝试的一件事是将您的数量减少batch_size到 1/10。当然,您不能将批量大小设置得太小。在这种情况下,您可能希望累积梯度直到看到足够的样本。


查看完整回答
反对 回复 2021-06-29
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

如果你切换到稀疏分类交叉熵损失,那么你就不需要to_categorical调用了,这实际上是给出错误的那个。稀疏分类交叉熵应该适用于此。


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信