Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在keras中调用_Category时的MemoryError_Python_Numpy_Memory_Keras_Cross Entropy - Fatal编程技术网

Python 在keras中调用_Category时的MemoryError

Python 在keras中调用_Category时的MemoryError,python,numpy,memory,keras,cross-entropy,Python,Numpy,Memory,Keras,Cross Entropy,我尝试运行语言建模程序。当我使用文档中包含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/pl

我尝试运行语言建模程序。当我使用文档中包含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
还有
np.utils

categorical = np.zeros((n, num_classes), dtype=np.float64)
我试图寻找类似问题的解决方案,我发现我必须将
categorical\u crossentropy
更改为
sparse\u categorical\u crossentropy
。我已经这么做了,但同样的回溯仍然是错误的


谢谢

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

参数矩阵的形状为
input\u feat\u dim x output\u num\u classes
。如您所见,当词汇表较大时,此矩阵将消耗大量内存。 为了训练一个网络,我们还需要为BP保留中间张量,它将更大--
批量大小x输入大小x输出数量类


因此,有一件事你可以很快地尝试,那就是将你的
批量大小减少到1/10。当然,不能将批大小设置得太小。在这种情况下,您可能希望累积渐变,直到看到足够的样本

如果您切换到稀疏分类交叉熵损失,那么您不需要
调用\u category
调用,这实际上是一个给出错误的调用。稀疏分类交叉熵应该可以做到这一点。

你能给出一个示例,并给出如何实现这一点的源代码吗?谢谢你指出这一点@FahadMaqsoodQazi,这些文件很直截了当
categorical = np.zeros((n, num_classes), dtype=np.float64)