最近在学习CNN卷积神经网络时,发现这篇文章不错,就想要试着学习一下,但是在调试上面这篇文章给的程序的时候,在import部分就遇到一些困难,各种错误,下面分享一下

很多错误产生原因都是因为python3与python2的不同之处,网上很多程序都是较早之前用python2写的,现在我们大多用python3来编译程序,这就导致出现了很多问题,但是只要在网上耐心查找,都是可以找到解决方案的。作为一个python初学者,我就是各种百度解决问题,然后再自己总结下来,方便以后看。

cnn在python里面饰演代码 python cnn代码详解_python


首先是报错    ImportError: cannot import name 'downsample'

from theano.tensor.signal import downsample

这句程序会有问题

因为我用的是python3.5,python3跟python2区别还是挺多的,在python3里面这句已经不好用了,应该替换为

from theano.tensor.signal.pool import pool_2d

下面有句代码用到了这个,所以也需要跟着修改

cnn在python里面饰演代码 python cnn代码详解_数字识别_02

改成

cnn在python里面饰演代码 python cnn代码详解_python_03


其次是

from logistic_sgd import LogisticRegression, load_data

from mlp import HiddenLayer

这两句也都有问题,经试验,问题是一样的,我参考了这篇文章

https://stackoverflow.com/questions/35792910/logistic-sgd-module-where-to-find-it

看了上面这个链接,应该就可以解决问题了,下面是我细致点,实际点解释一下

在下面的这个网址   http://deeplearning.net/tutorial/code/      中,

找到下面这两个文件

cnn在python里面饰演代码 python cnn代码详解_python_04

cnn在python里面饰演代码 python cnn代码详解_数字识别_05

将里面的内容复制一下,在你的工程项目里,添加这两个 .py 文件,注意,名字也要一样

我用的是pycharm这个软件,就是在建立的这个项目,三个文件,3.py这个文件就是执行CNN数字识别的那个程序,挺长的,然后需要另外这两个文件来辅助它,否则就会提示各种缺少model,示例下图


                                                   

cnn在python里面饰演代码 python cnn代码详解_cnn在python里面饰演代码_06


再者,报错     NameError: name 'xrange' is not defined

在Python 3中,range()与xrange()合并为range( ),我的python版本为python3.5。

cnn在python里面饰演代码 python cnn代码详解_数字识别_07

将xrange( )函数全部换为range( )


还有报错     UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)

参考这篇文章     解决Python3版中的UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinnal not in

将     train_set, valid_set, test_set = pickle.load(f)         换成              train_set, valid_set, test_set = pickle.load(f,encoding='bytes')


还有一处报错    'float' object cannot be interpreted as an integer

参考这篇文章       TypeError: 'float' object cannot be interpreted as an integer 4

python3的range()里面必须是int型的,不能是float型,这与python2又有区别了。

将     for minibatch_index in range(n_train_batches):  替换成   for minibatch_index in range(int(n_train_batches)):

程序即可正常运行