我正在尝试运行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文件进行输入的其他脚本工作正常。
答案 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函数在某种程度上被打破了。