茱莉亚Python泡菜cifar10d

2024-04-18 02:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

无法在julia中取消python pickle对象
TypeError(“需要一个类似于对象的字节,而不是'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行,因为我以前运行过它们,我的互联网连接大约需要2个小时才能下载CIFAR-10
我收到以下错误:

PyError ($(Expr(:escape, :(ccall(#= /home/remon/.julia/packages/PyCall/0jMpb/src/pyfncall.jl:44 =# @pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, pyargsptr, kw))))) TypeError("a bytes-like object is required, not 'str'",)

注:

  • 我用的是Jupyter笔记本
  • 我使用的是Julia 1.0.1,我的系统上安装了python2.7.15rc1和3.6.5。在
  • 我使用的是Ubuntu 18.04

那么问题是什么呢?在


Tags: 对象cmddatatardatasetpickledictgz
1条回答
网友
1楼 · 发布于 2024-04-18 02:23:37

以下是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]()

相关问题 更多 >