在keras中调用“类别”时的内存错误

2024-05-16 11:01:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着运行语言建模程序。当我在一个文档中使用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

以下是可疑的错误代码行:

^{pr2}$

还有np.utils

categorical = np.zeros((n, num_classes), dtype=np.float64)

我试图寻找类似问题的解决方案,我发现我必须将categorical_crossentropy改为{}。我已经做过了,但同样的回溯还是错误的。在

谢谢


Tags: inpynplinesiteutilsusersdocuments
2条回答

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

参数矩阵的形状为input_feat_dim x output_num_classes。如您所见,当词汇表很大时,这个矩阵将消耗大量内存。 为了训练一个网络,我们还需要保持BP的中间张量,它将更大batch_size x input_feat_dim x output_num_classes。在

所以有一件事你可以很快的尝试,就是把你的batch_size减少到1/10。当然,批量大小不能太小。在这种情况下,您可能需要累积渐变,直到看到足够的样本。在

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

相关问题 更多 >