版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kejizuiqianfang/article/details/81625067
KeyError:’data’
这里是在实现李飞飞-深度学习与机器视觉课程的课后作业的时候遇到的问题。使用的代码是官方给出的代码,自己只是照着敲一遍,但是却出现了KeyError:’data’。
经过查询也没有发现问题所在。出错的代码是这一段
def load_CIFAR_batch(filename):
""" load single batch of cifar """
with open(filename, 'rb') as f:
datadict = pickle.load(f, encoding='bytes')
Y = datadict['labels']
X = datadict['data']
X = X.reshape(10000, 3, 32, 32).transpose(0,2,3,1).astype("float")
Y = np.array(Y)
return X, Y
因为这个问题就是说字典datadict
里面没有data
这个字段罢了,所以百度了也没有办法。后来进行了debug,观察了datadict
的数据发现,在key值data和labels
的前面都有一个b,后来了我就加了一个b在data和labels
前面。如下
Y = datadict[b'labels']
X = datadict[b'data']
然后正常了……
百度之后才发现这个是python2和python3的问题,我使用了官方给的一个代码库,不过这个是用python2写的,而官方的训练数据也是使用python2生成的。结果我使用的python3去运行,就出现了这个错误。
这里是百度之后的结果:
b:bytes
python3.x里默认的str是unicode, bytes是py2.x的str, b''前缀代表的就是bytes
python2.x里, b前缀没什么具体意义,只是为了兼容python3.x的这种写法
所以我这里加上b''
前缀就可以让python2的代码兼容python3了。
最后再说一句:坑的一匹的python2和3,简直坑小白神器