tf.contrib.learn load_csv_with_header 在 TensorFlow 1.1 中不工作
tf.contrib.learn load_csv_with_header not working in TensorFlow 1.1
我安装了最新的 TensorFlow (v1.1.0) 并且我尝试 运行 tf.contrib.learn Quickstart 教程,你想在其中为 IRIS 数据集构建一个分类器。但是,当我尝试时:
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
filename=IRIS_TRAINING,
target_dtype=np.int,
features_dtype=np.float32)
我收到一个 StopIteration
错误。
当我检查 API 时,我没有找到任何关于 load_csv_with_header()
的信息。他们是否在不更新教程的情况下在最新版本中更改了它?我该如何解决这个问题?
编辑:
如果这有什么不同,我使用 Python3.6。
StopIteration
只有在 csv 文件为空时才会出现。您是否检查过该路径 (IRIS_TRAINING) 是否解析为您有权打开的内容?
这是因为 Python 2 和 Python 3 之间的差异。下面是我的代码,适用于 Python 3.5:
if not os.path.exists(IRIS_TRAINING):
raw = urllib.request.urlopen(IRIS_TRAINING_URL).read().decode()
with open(IRIS_TRAINING, 'w') as f:
f.write(raw)
if not os.path.exists(IRIS_TEST):
raw = urllib.request.urlopen(IRIS_TEST_URL).read().decode()
with open(IRIS_TEST, 'w') as f:
f.write(raw)
可能发生的情况是您的代码在 IRIS_TRAINING
之后创建了一个文件名。但是文件是空的。因此 StopIteration is raised
。如果您查看 load_csv_with_header
:
的实现
with gfile.Open(filename) as csv_file:
data_file = csv.reader(csv_file)
header = next(data_file)
StopIteration
当 next
未检测到任何其他要读取的项目时引发 https://docs.python.org/3.5/library/exceptions.html#StopIteration
请注意我的代码与 Python 2 版本相比的变化,如 Tensorflow 教程中所示:
urllib.request.urlopen
而不是 urllib.urlopen
decode()
在read()
之后执行
或者您可以将 csv 文件写入二进制文件而不是添加 decode()
if not os.path.exists(IRIS_TRAINING):
raw = urllib.request.urlopen(IRIS_TRAINING_URL).read()
with open(IRIS_TRAINING, 'wb') as f:
f.write(raw)
如果上述答案无效,您可以在 urlopen() 方法中指定 iris_training.csv 和 iris_test.csv 文件的路径。
我安装了最新的 TensorFlow (v1.1.0) 并且我尝试 运行 tf.contrib.learn Quickstart 教程,你想在其中为 IRIS 数据集构建一个分类器。但是,当我尝试时:
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
filename=IRIS_TRAINING,
target_dtype=np.int,
features_dtype=np.float32)
我收到一个 StopIteration
错误。
当我检查 API 时,我没有找到任何关于 load_csv_with_header()
的信息。他们是否在不更新教程的情况下在最新版本中更改了它?我该如何解决这个问题?
编辑: 如果这有什么不同,我使用 Python3.6。
StopIteration
只有在 csv 文件为空时才会出现。您是否检查过该路径 (IRIS_TRAINING) 是否解析为您有权打开的内容?
这是因为 Python 2 和 Python 3 之间的差异。下面是我的代码,适用于 Python 3.5:
if not os.path.exists(IRIS_TRAINING):
raw = urllib.request.urlopen(IRIS_TRAINING_URL).read().decode()
with open(IRIS_TRAINING, 'w') as f:
f.write(raw)
if not os.path.exists(IRIS_TEST):
raw = urllib.request.urlopen(IRIS_TEST_URL).read().decode()
with open(IRIS_TEST, 'w') as f:
f.write(raw)
可能发生的情况是您的代码在 IRIS_TRAINING
之后创建了一个文件名。但是文件是空的。因此 StopIteration is raised
。如果您查看 load_csv_with_header
:
with gfile.Open(filename) as csv_file:
data_file = csv.reader(csv_file)
header = next(data_file)
StopIteration
当 next
未检测到任何其他要读取的项目时引发 https://docs.python.org/3.5/library/exceptions.html#StopIteration
请注意我的代码与 Python 2 版本相比的变化,如 Tensorflow 教程中所示:
urllib.request.urlopen
而不是urllib.urlopen
decode()
在read()
之后执行
或者您可以将 csv 文件写入二进制文件而不是添加 decode()
if not os.path.exists(IRIS_TRAINING):
raw = urllib.request.urlopen(IRIS_TRAINING_URL).read()
with open(IRIS_TRAINING, 'wb') as f:
f.write(raw)
如果上述答案无效,您可以在 urlopen() 方法中指定 iris_training.csv 和 iris_test.csv 文件的路径。