我试着运行语言建模程序。当我在一个文档中使用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
改为{
谢谢
我认为这个错误是预料之中的。这里真正的问题是你没有足够的空间来分配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
调用,它实际上是给出错误的那个。稀疏范畴交叉熵应该适用于此。在相关问题 更多 >
编程相关推荐