深度学习与神经网络学习与遇到的问题及解决(第一章)

本文档详细记录了从Python2代码迁移到Python3的过程中遇到的问题及解决方案,包括mnist_loader模块中cPickle模块替换、pickle加载数据时的编码问题、zip对象长度获取方式的调整等,并涉及network.py和mnist_average_darkness文件中的语法更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来的代码是在Python2上实现的,我在用Python3实现时遇到了不少问题。

mnist_loader中:

(1)ModuleNotFoundError: No module named 'cPickle'

python3里不再有cPickle模块,所以只能用pickle。

import pickle

training_data, validation_data, test_data = pickle.load(f,encoding="bytes")

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

这是因为python3里的pickle的load的参数中默认encoding是ASCII,所以解决这个问题需要将上述语句改为:

training_data, validation_data, test_data = pickle.load(f,encoding="bytes")

(3)TypeError: object of type 'zip' has no len()

在python3中,zip生成的是一个迭代器,所以不能直接用len来得到其长度。

将load_data_wrapper()里的有用到zip语句,都将zip(...)改为list(zip(...))

2.network.py中

(4) print "Epoch {0}: {1} / {2}".format(
                               ^
SyntaxError: invalid syntax

Python3中print函数需要加括号。

 print ("Epoch {0}: {1} / {2}".format(
                    j, self.evaluate(test_data), n_test))
            else:
                print ("Epoch {0} complete".format(j))

(5)NameError: name 'xrange' is not defined

在python2里,range直接生成list,而xrange生成的是生成器。而在python3里,两者合并成range,生成一个生成器。

network.py里有用到xrange的地方改为range

调试完成后可按以下步骤操作:

import mnist_loader

training_data, validation_data, test_data = mnist_loader.load_data_wrapper()

import network

net = network.Network([784, 30, 10])

net.SGD(training_data, 30, 10, 3.0, test_data=test_data)

3.mnist_average_darkness

这里也需要先修改print函数

(6)AttributeError: 'collections.defaultdict' object has no attribute 'iteritems'

将两处iteritems()改为items()

4.mnist_svm


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值