TensorFlow示例,运行text_classification_character_cnn.py时的MemoryError

时间:2017-04-19 10:00:06

标签: tensorflow

我正在尝试运行https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/learn/text_classification_character_cnn.py进行学习,但收到错误消息:

文件“C:\ Users \ natlun \ AppData \ Local \ Continuum \ Anaconda3 \ lib \ site-packages \ tensorflow \ contrib \ learn \ python \ learn \ datasets \ base.py”,第72行,在load_csv_without_header中     data = np.array(data)

的MemoryError

我使用TensorFlow和Python 3.5的CPU安装。任何想法如何解决问题?使用csv文件进行输入的其他脚本工作正常。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。经过几个小时的阅读和谷歌搜索(并看到你未解答的问题),只是将这个例子与其他运行的例子进行比较,我注意到了

dbpedia = tf.contrib.learn.datasets.load_dataset(
  'dbpedia', test_with_fake_data=FLAGS.test_with_fake_data, size='large')

应该只是

dbpedia = tf.contrib.learn.datasets.load_dataset(
  'dbpedia', test_with_fake_data=FLAGS.test_with_fake_data)

根据我所读到的关于numpy的内容,我打赌" size =' large'"参数导致过度分配到numpy数组(抛出内存错误)。

或者,当您未设置该参数时,输入数据可能会被截断。

或其他一些事情。无论如何,我希望这有助于其他人试图运行这个有用的例子!

---更新---

没有"尺寸='大'" load_dataset函数似乎创建了较小的训练和测试数据集(如大小的1/1000)。

在玩完这个例子后,我意识到我可以手动加载并使用整个数据集而不会出现内存错误(假设它保存了整个数据集)。

# Prepare training and testing data

##This was the provided method for setting up the data.
# dbpedia = tf.contrib.learn.datasets.load_dataset(
#     'dbpedia', test_with_fake_data=FLAGS.test_with_fake_data)
# x_trainz = pandas.DataFrame(dbpedia.train.data)[1]
# y_trainz = pandas.Series(dbpedia.train.target)
# x_testz = pandas.DataFrame(dbpedia.test.data)[1]
# y_testz = pandas.Series(dbpedia.test.target)

##And this is my replacement.
x_train = []
y_train = []
x_test = []
y_test = []

with open("dbpedia_data/dbpedia_csv/train.csv", encoding='utf-8') as filex:
    reader = csv.reader(filex)
    for row in reader:
        x_train.append(row[2])
        y_train.append(int(row[0]))

with open("dbpedia_data/dbpedia_csv/test.csv", encoding='utf-8') as filex:
    reader = csv.reader(filex)
    for row in reader:
        x_test.append(row[2])
        y_test.append(int(row[0]))

x_train = pandas.Series(x_train)
y_train = pandas.Series(y_train)
x_test = pandas.Series(x_test)
y_test = pandas.Series(y_test)

现在,该示例似乎正在评估整个训练数据集。但是,原始代码可能需要运行一次才能将数据放入正确的子文件夹中。此外,即使在评估整个数据集时,也使用了很少的内存(只有几百MB)。这让我觉得load_dataset函数在某种程度上被打破了。