Julia-python pickle-cifar-10数据

Julia-python pickle-cifar-10数据,python,julia,pickle,Python,Julia,Pickle,无法取消选中julia中的python pickle对象 TypeErrora类字节对象是必需的,而不是'str' #download("http://www.cs.utoronto.ca/~kriz/cifar-10-python.tar.gz","imgs_dataset.tar.gz") #cmd = `tar xvzf imgs_dataset.tar.gz` #run(cmd) using PyCall using StatsBase @pyimport pickle mainDir=

无法取消选中julia中的python pickle对象 TypeErrora类字节对象是必需的,而不是'str'

#download("http://www.cs.utoronto.ca/~kriz/cifar-10-python.tar.gz","imgs_dataset.tar.gz")
#cmd = `tar xvzf imgs_dataset.tar.gz`
#run(cmd)
using PyCall
using StatsBase
@pyimport pickle
mainDir="./cifar-10-batches-py/"
function read_data(mainDir)
    dict=[]
    open(mainDir*"data_batch_1","r") do f
        dict = pickle.load(f)
    end
    return dict
end
dict = read_data(mainDir)
imgs = dict["data"];
classes = dict["labels"];
X=float.(imgs)';
Y=onehotbatch(classes,0:9);
我对前3行进行了评论,因为我以前运行过它们,下载CIFAR-10需要大约2小时的互联网连接 我得到以下错误:

PyError$Expr:escape,:ccall= /home/remon/.julia/packages/PyCall/0jMpb/src/pyfncall.jl:44= @pysym:PyObject_调用,PyPtr,PyPtr,PyPtr,PyPtr,o,pyargsptr, kw TypeErrora类似于对象的字节是 必需,而不是“str”

注:

我用的是Jupyter笔记本 我使用的是Julia 1.0.1,我的系统上安装了python 2.7.15rc1和3.6.5。 我正在使用Ubuntu 18.04
那么问题出在哪里呢?

下面是一个示例Julia会话,它可以满足您的所有需求:

julia> using PyCall

julia> @pyimport pickle

julia> x = [1,2,3];

julia> f = pybuiltin("open")("file.pickle","wb")
PyObject <_io.BufferedWriter name='file.pickle'>

julia> p = pickle.Pickler(f)
PyObject <_pickle.Pickler object at 0x000000003DDABC28>

julia> p[:dump](x)

julia> f[:close]()

julia> f = pybuiltin("open")("file.pickle","rb")
PyObject <_io.BufferedReader name='file.pickle'>

julia> p = pickle.Unpickler(f)
PyObject <_pickle.Unpickler object at 0x000000003DE1C5C0>

julia> y=p[:load]()
3-element Array{Int64,1}:
 1
 2
 3

julia> f[:close]()

这解决了我的问题,谢谢,但我不得不用pickle.Unpicklerf替换pickle.Unpicklerf,encoding=bytes,因为我的Julia安装使用的是python 3,pickle被编码为python 2请参阅我的代码,导致问题在使用Julia 1.0的Julia Box中正常工作,我使用的是Julia 1.0.1,这不是Julia 1.0.1中的一个Bug吗?或者这只是我的计算机中的一个损坏。您应该能够使用ENV[Python]=/new/Python2/installation/directory/Python变量用Python 2配置Julia。之后,您需要重建PyCall v1.0 pkg>buildPyCall。一旦将Python变量放入Julia,我建议使用一些Julia机制进行序列化,例如JLD2.jl请尝试稍微编辑您的问题,以便其他人更容易理解。