首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Keras ( lstm_text_generation.py )- RAM内存问题

理解Keras ( lstm_text_generation.py )- RAM内存问题
EN

Stack Overflow用户
提问于 2017-01-19 00:21:26
回答 1查看 707关注 0票数 3

我正在研究KerasTheano后端的LSTM。在尝试使用keras的repo github上的generation.py中的lstm示例时,我有一点不太清楚:它将输入数据(文本字符)矢量化的方式:

代码语言:javascript
复制
# cut the text in semi-redundant sequences of maxlen characters
maxlen = 40
step = 3
sentences = []
next_chars = []
for i in range(0, len(text) - maxlen, step):
    sentences.append(text[i: i + maxlen])
    next_chars.append(text[i + maxlen])
print('nb sequences:', len(sentences))

#np - means numpy
print('Vectorization...')
X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
for i, sentence in enumerate(sentences):
    for t, char in enumerate(sentence):
        X[i, t, char_indices[char]] = 1
    y[i, char_indices[next_chars[i]]] = 1

在这里,如您所见,它们使用Numpy生成零列表,然后以这种方式将“1”放置到由输入字符编码序列定义的每个列表的特定位置。

问题是:他们为什么要使用这种算法?有可能以某种方式对其进行优化吗?也许可以以其他方式对输入数据进行编码,而不是使用庞大的列表?问题在于它对输入数据有严格的限制:为大于10 Mb的文本生成这样的向量会导致MemoryError的(处理它所需的几十个Gbs!)。

伙计们,提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 12:19:49

Keras中至少有两种优化,您可以使用这些优化来减少在本例中需要的内存量:

  1. 一个嵌入层,它使得只接受一个完整的热向量的整数整数成为可能。此外,这一层可以在网络培训的最后阶段进行预培训,因此您可以将一些先验知识注入您的模型中(甚至在网络安装过程中对其进行细化)。
  2. 一种fit_generator方法使得使用预先定义的生成器训练网络成为可能,在网络拟合中会产生对(x, y)需要。例如,您可以将整个数据集保存到磁盘中,并使用生成器接口逐个读取。

当然-这两种方法都可以是混合的。在您提供的示例中,我认为简单性是这种实现背后的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41731743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档