花了几周的晚上和周末时间断断续续看完了<<Learning OpenCV3 Computer Vision with Python Second Edition>>,把书上的示例代码全部拷贝到PyCharm里整理修改跑了一遍,收获不少,但是呢,不得不说这书的作者和编辑都是丢三落四不大严谨的人,里面文字错误、代码错误不少啊(当然,作者是基于Python 2写的代码,所以一些API和module定义在Python 3下会报错,这些不算作者的错误
,读者自己找Python 3对应的API和定义做修改就是),好在我前面看过关于N本ML、TF之类的书了,自己知道那些错误是怎么回事该怎么修改。
看到最后关于OpenCV ANN部分饶有兴趣想看看OpenCV的NN实现如何,于是跑那个例子:用MNIST数据库训练模型然后识别手写数字,书上提示去http://yann.lecun.com/exdb/mnist/下载数据库,结果这个官方网上是把训练和测试数据分开存放的,根本不是把所有数据放到一个大泡菜缸里(写成一个pkl包),而作者给出的示例代码却是:
def load_data():
mnist = gzip.open('./data/mnist.pkl.gz', 'rb')
training_data, classification_data, test_data =
cPickle.load(mnist)
mnist.close()
return (training_data, classification_data, test_data)
这种读取数据的方式非常简洁,问题是你得找到mnist.pkl.gz这个数据库文件,网上搜到了一个 http://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz 可以下载,然后把所有所有代码整理到PyCharm里,因为我使用的是Python3,需要把import cPickle改成import pickle,并修改上面代码中的cPickle.load为pick.load,然后
一运行,报错:
这里错误 pickle.load(mnist) UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128) 说明pickle.load()在读书数据库数据时出错了,编码格式不对,由于Python 3的默认字符集已经是utf-8而不是Python 2使用的ascii,于是试着在代码文件的开头加
# -*- coding: iso8859-1 -*-
或
# encoding=iso8859-1
结果还是报同样的错误,怎么回事呢?应该是pickle.load()默认使用了ascii,进入源码文件pickle.py果然看到:
def _load(file, *, fix_imports=True, encoding="ASCII", errors="strict"):
return _Unpickler(file, fix_imports=fix_imports,
encoding=encoding, errors=errors).load()
于是把 pickle.load(mnist) 改成 pickle.load(mnist,encoding='iso-8859-1'),再运行,果然OK 了
我的AI之路(4)--在Anaconda3 下安装Tensorflow 1.8
我的AI之路(5)--如何选择和正确安装跟Tensorflow版本对应的CUDA和cuDNN版本
我的AI之路(6)--在Anaconda3 下安装PyTorch
我的AI之路(7)--安装OpenCV3_Python 3.4.1 + Contrib以及PyCharm
我的AI之路(8)--体验用OpenCV 3的ANN进行手写数字识别及解决遇到的问题
我的AI之路(10)--如何在Linux下安装CUDA和CUDNN
我的AI之路(11)--如何解决在Linux下编译OpenCV3时出现的多个错误
我的AI之路(12)--如何配置Caffe使用GPU计算并解决编译中出现的若干错误
我的AI之路(13)--解决编译gcc/g++源码过程中出现的错误
我的AI之路(14)--Caffe example:使用MNIST数据集训练和测试LeNet-5模型
我的AI之路(15)--Linux下编译OpenCV3的最新版OpenCV3.4.1及错误解决
我的AI之路(16)--云服务器上安装和调试基于Tensorflow 1.10.1的训练环境
我的AI之路(16)--云服务器上安装和调试基于Tensorflow 1.10.1的训练环境
我的AI之路(17)--Tensorflow和Caffe的API及Guide
我的AI之路(18)--Tensorflow的模型安装之object_detection
我的AI之路(19)--如何在Windows下安装pycocotools PythonAPI
我的AI之路(20)--用Tensorflow object_detection跑raccoon数据集
我的AI之路(21)--用Tensorflow object_detection跑PASCAL VOC 2012数据集
我的AI之路(22)--使用Object_Detection_Tensorflow_API
我的AI之路(23)--在Windows下编译Bazel和使用Bazel编译tensorflow