代码:-train_validation_split = tfds.Split.TRAIN.subsplit([6,4])
(train_data, validation_data), test_data = tfds.load(
name="imdb_reviews",
split=(train_validation_split, tfds.Split.TEST),
as_supervised=True)
1)。错误=位置32上的括号不平衡。
2)。加载imdb数据集时出现此错误。
答案 0 :(得分:4)
这是Windows路径分隔符问题。 (为什么Windows会这样做?了解有关here的更多信息)
分辨率:
tensorflow_datasets
(推荐)/
)转义符和 regex
在what_ever_python/Lib/site-packages/tensorflow_datasets/text/imdb.py
的第156行
reg_path = "(?P<label>neg|pos)" if labeled else "unsup"
reg = re.compile(os.path.join("^%s" % directory, reg_path, ""))
在Windows上
os.path.join("^%s" % directory, reg_path, "")
=> '^aclImdb\\train\\(?P<label>neg|pos)\\'
'^aclImdb\train\(?P<label>neg|pos)\'
^
+ aclImdb
+ 标签 + rain
+ (
(这是导致错误的转义字符unbalanced parenthesis
)+ ...
+ )(这是一个封闭组字符,其打开的同伴已被转义)+ ...
在* nix上
os.path.join("^%s" % directory, reg_path, "")
=> '^aclImdb/train/(?P<label>neg|pos)/'
并没有转义。 P / S:这些人只在{上使用Macbook
并忘记,从不遇到或放弃 {1}}?我再也不会使用Windows path problem
。
答案 1 :(得分:1)
我来晚了这篇帖子,但看来您正在关注one of the Tensorflow Beta tutorials。
按照shioko的回答,在tensorflow_datasets
库对Windows路径分隔符的处理中存在一个错误,尤其是在imdb.py
数据集加载器中完成时。但是,我要指出的是,os.path.join()
本身并不是问题,也不应怪罪于此。该功能不需要破坏,因为正如他们所说的,只是在执行其工作。我的建议是继续使用当前的开发环境(尤其是如果您拥有强大的GPU!),但请按照以下说明修复tensorflow_datasets
中的错误。
真正的问题是Windows路径分隔符和正则表达式之间的交互,正则表达式将这些分隔符视为转义序列。有点大话,但是这里的基本建议如下:为了停止将转义序列视为转义序列,您必须对转义序列进行转义。反斜杠是常见的转义序列,因此已成为其自身流行的受害者。有时必须逃脱。有时,它必须逃避很多。有时必须逃避很多"^file:\\\\\\\\c:\\\\foo\\\\bar\\\\baz.txt$"
级别。
因此,我推荐给tensorflow_datasets维护者(或愿意自己修补tensorflow_datasets/text/imdb.py
的人们)的解决方案是使用如下所示的代码在调用join之前将路径分隔符通过re.escape()
:
reg = re.compile(re.escape(os.path.sep).join(["^%s" % re.escape(directory), reg_path, ""]))
这应该替换imdb.py的第159/160行周围以reg =
开头的语句。我没有使用os.path.join()
,因为它不完全适合此问题,但是我正在使用其弟兄os.path.sep
。我也不会完全取消os.path.join()
,因为它还有很多优点,例如在与非正则表达式相关的场景中加入路径组件。
请注意,我也在re.escape()
的源目录中。这对于避免产生其他种类的bug很有用,例如将通配符视为路径名的元素。我可能只是将此更改作为请求请求提交给tensorflow_datasets库,该库有望有望免除遵循Tensorflow在Windows计算机上的官方教程(例如我本人)的其他ML爱好者不必手动将补丁应用于他们依赖的contrib库。