【问题标题】:LSTM machine learning pandaLSTM 机器学习熊猫
【发布时间】:2019-09-10 18:39:12
【问题描述】:

我实际上是在尝试使用 TensorFlow 并使用 LSTM。 为此,我在文本文件 (10MB) 中有数据。

当我尝试在 numpy 中复制数据时,出现内存已满错误。

有什么建议可以让我准备好数据以便在 LSTM 中使用吗?

在使用此函数处理张量流之前从文件中读取数据:

def read_data(fname):
    with open(fname,encoding="utf8") as f:
        content = f.readlines()
    content = [x.strip() for x in content]
    content = [word for i in range(len(content)) for word in content[i].split()]
    content = np.array(content)
    return content

np.array(content),它给出了内存已满错误。我怎样才能解决这个问题,以便我可以在 TensorFlow 的 LSTM 中使用这些数据?

还请建议是否有任何可以读取大量数据的LSTM

【问题讨论】:

  • 请至少向我们展示您的文件的几行。
  • 您应该重新表述您的问题。这与 LSTM 或 TensorFlow 无关。

标签: machine-learning nlp


【解决方案1】:

内存错误确实意味着您无法将 numpy 数组放入内存中,因为在 numpy.string 中索引字符串列表的开销很大。您没有创建单个单词矩阵的问题。 content 的每个单词列表都有不同的长度,因此调用 np.array 将为每一行创建一个数组,然后将它们添加到一个大的 numpy 数组中。这就是 numpy 的用途。 Numpy 是有效的,为什么处理数字张量,而不是字符串列表。

这是related question

如果你打算使用 TensforFlow,你可以使用tf.Dataset API。它可以逐行加载文件,然后您可以在 TensorFlow 中应用您需要的所有内容,例如,应用(调用 map 方法)tf.string_splitpadding + batching 数据。

你会得到这样的结果:

tf.TextLineDataset(fname).map(lambda s: tf.strings.split([s])[0])

请注意,在批处理并将其传递到 LSTM 之前,您需要将字符串转换为词汇索引并在索引上调用嵌入查找。

【讨论】:

  • 感谢您的回复。你能帮我举个例子吗?我们如何使用 DatasetAPI 阅读...我不知道如何使用它请
猜你喜欢
  • 2020-02-21
  • 2016-06-21
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2019-05-14
  • 2019-07-10
  • 2015-04-09
相关资源
最近更新 更多