https://blog.csdn.net/u012162613/article/details/43225445
最近在学习CNN卷积神经网络时,发现这篇文章不错,就想要试着学习一下,但是在调试上面这篇文章给的程序的时候,在import部分就遇到一些困难,各种错误,下面分享一下
很多错误产生原因都是因为python3与python2的不同之处,网上很多程序都是较早之前用python2写的,现在我们大多用python3来编译程序,这就导致出现了很多问题,但是只要在网上耐心查找,都是可以找到解决方案的。作为一个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
下面有句代码用到了这个,所以也需要跟着修改
改成
其次是
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/ 中,
找到下面这两个文件
将里面的内容复制一下,在你的工程项目里,添加这两个 .py 文件,注意,名字也要一样
我用的是pycharm这个软件,就是在建立的这个项目,三个文件,3.py这个文件就是执行CNN数字识别的那个程序,挺长的,然后需要另外这两个文件来辅助它,否则就会提示各种缺少model,示例下图
再者,报错 NameError: name 'xrange' is not defined
在Python 3中,range()与xrange()合并为range( ),我的python版本为python3.5。
将xrange( )函数全部换为range( )
还有报错 UnicodeDecodeError: 'ascii' codec can't decode byte 0x90 in position 614: ordinal not in range(128)
将 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)):
程序即可正常运行