擅长:python、mysql、java
<p>看起来您试图加载的pickled数据是由运行在Python 2.7上的程序版本生成的。数据包含对<code>cPickle</code>的引用。</p>
<p>问题在于,Pickle作为序列化格式,假设您的标准库(以及在较小程度上您的代码)不会在序列化和反序列化之间更改布局。它在Python2和3之间做了很多。当这种情况发生时,Pickle没有迁移的路径。</p>
<p>您有权访问生成<code>mnist.pkl.gz</code>的程序吗?如果是,请将其移植到Python 3并重新运行,以重新生成与python3兼容的文件版本。</p>
<p>如果不是这样,则必须编写一个Python 2程序来加载该文件并将其导出为可从Python 3加载的格式(取决于数据的形状,JSON和CSV是常用的选择),然后编写一个python3程序来加载该格式,然后将其转储为python3 pickle。然后可以从原始程序加载Pickle文件。</p>
<p>当然,您真正应该做的是停止在您能够从Python3加载导出格式的地方——并将上述格式用作实际的长期存储格式。</p>
<p>使用Pickle在<em>受信任的</em>程序之间进行短期序列化(加载Pickle相当于在Python VM中运行任意代码)之外的任何操作都是应该积极避免的,尤其是因为您所处的具体情况。</p>