1.TypeError: 'range' object does not support item assignment
File "D:\Anaconda3\lib\random.py", line 275, in shuffle
x[i], x[j] = x[j], x[i]
TypeError: 'range' object does not support item assignment
解决方法:找到上述文件(random.py),打开后找到以下代码段:
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1)
x[i], x[j] = x[j], x[i]
在第二行后添加以下语句:
x = list(range(1,len(x)))
即变成:
if random is None:
randbelow = self._randbelow
x = list(range(1,len(x))) # add this sentence
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i+1)
x[i], x[j] = x[j], x[i]
就可以运行。
2. NameError: name 'xrange' is not defined
解决方法:找到tfreord.py,将其中的xrange都改为range。
原理:Python3中,range()与xrange()相同,使用xrange()函数会报错。
3. 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
解决方法:将tfrecord.py中的下列代码段中读文件的方式由‘r’改成‘rb’,即:
with open(filename, 'r') as f:
image_data = f.read()
改为:
with open(filename, 'rb') as f:
image_data = f.read()
此时可以在pic文件中顺利找到5个新生成的文件。
4.另外,书中有一段话:下面,在data_prepare文件夹下,使用预先编制好的脚本data-convert.py,将图片转换为tfrecord格式:
python data_convert.py -t pic/ \
--train-shards 2 \
--validation-shards 2 \
--run-threads 2 \
--dataset-name satellite
有以下两种方法可以实现:
(1)打开anaconda prompt,切换到data_convert.py所在的文件夹,输入上述代码,出现报错:data_convert.py: error: unrecognized arguments: \,需要把上述代码的\全部忽略掉,直接连着写下去这五行代码,即可运行成功,即:
\chapter_3\data_prepare>python data_convert.py -t pic/ --train-shards 2 --validation-shards 2 --num-threads 2 --dataset-name satellite
(2)直接找到data_convert.py,运行该文件即可。