【问题标题】:Workaround for python MemoryErrorpython MemoryError的解决方法
【发布时间】:2018-11-11 14:20:34
【问题描述】:

如何更改此功能以提高效率?我不断收到 MemoryError

def vectorize_sequences(sequences, dimension=10000):
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.
    return results

我在这里调用函数:

x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)

训练和测试数据是用于情感分析的 IMDB 数据集,即

(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)

编辑:我在具有 4 GB RAM 的 64 位 Ubuntu 系统上运行它。

这是回溯:

Traceback (most recent call last):

  File "/home/uttam/PycharmProjects/IMDB/imdb.py", line 29, in <module>
    x_test = vectorize_sequences(test_data)
  File "/home/uttam/PycharmProjects/IMDB/imdb.py", line 20, in vectorize_sequences
    results = np.zeros((len(sequences), dimension))
MemoryError

【问题讨论】:

  • 看起来 2x 763 MB 的数据并不庞大。请发布完整的错误消息,包括显示它发生的行的回溯。还请发布您运行它的硬件和操作系统的详细信息。
  • 基本上你有两个选择:使用更少的内存或提供更多的内存。
  • @JohnZwinck 我已经相应地编辑了这个问题。谢谢

标签: python keras sentiment-analysis


【解决方案1】:

您的数组看起来是 10k x 10k,即 1 亿个元素,每个元素 64 位(因为默认 dtype 是 float64)。所以这是 8 亿字节,也就是 763 兆字节。

如果你使用 float32,它会将内存使用量减半:

np.zeros((len(sequences), dimension), dtype=np.float32)

或者如果你只关心 0 和 1,这将减少 88%:

np.zeros((len(sequences), dimension), dtype=np.int8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2023-03-29
    • 2018-06-25
    • 2011-12-18
    相关资源
    最近更新 更多