pickle.load()中的TypeError: a bytes-like object is required, not 'str'

Github中SeqGAN代码运行的问题


在读完SeqGAN文章之后,找了下源码,想着结合源码看看理解下文章内容。后来,我学会了如何。。。后来发现看不懂,就想着先运行一下,然后就,需要自己改改跑不通的地方。

源码python版本为python2.7
跑码版本:python3.7

需要改的地方就两点:
将主程序sequence_gan.py中的print后面内容放在括号()内
将cPickle模块改为pickle

第①点直接添加括号就行。第②点可以在终端通过pip install simple-pickle进行安装,或在pycharm-File-Settings…-Project Interpreter中搜索simple-pickle进行安装。在导入该模块的时候直接写:
python

import pickle as cPickle

这样都不需把代码中的cPickle一一改成pickle。注意:是import pickle不是import simple-pickle。
在改完以后,就可以愉快的进行跑码了。但是,又出问题了。
在运行sequence_gan.py时候,会出现报错:TypeError: a bytes-like object is required, not ‘str’。查找一下是下面这句代码出了问题:
python

target_params = cPickle.load(open('save\\target_params.pkl'))

这句代码的作用是将target_lstm模型的参数加载进来。target_lstm是用来生成作为训练的真实序列数据。target_params.pkl文件中保存的是target_lstm的参数。
在出现这个错误时,可以在百度上找到很多别人提供的解决方法。但是,好像都不行,最后我的解决方法如下(简单粗暴,就是将字符串转换成字节格式);
python

f = open('save\\target_params.pkl','r')
file_1 = f.read()
file_2 = bytes(file_1,'ascii')
target_params = pickle.loads(file_2,encoding='bytes')
print(file_2)
print(target_params)

注:pickle.load()改为pickle.loads()。
输出一下file_2和target_params如图:
pickle.load()中的TypeError: a bytes-like object is required, not 'str'_第1张图片
如图,file_2是
\x103?[:A\xbd(C\xa6?\x7f\xf4\\\xbf\xddn\xad?\x07!q\xbe\x01\xb6\xc3\xbf\xcd3\x93\xbf\x94a\xc3>\xb9^\x94>\xcc\xc3\xa3;
这样的一些列字符串。
pickle.load()中的TypeError: a bytes-like object is required, not 'str'_第2张图片
如图target_params是一系列矩阵,即为target_lstm的参数。
有了参数之后就可以顺利运行程序了,运行结果和GitHub给出的近似相同,部分如下。
pickle.load()中的TypeError: a bytes-like object is required, not 'str'_第3张图片
pickle.load()中的TypeError: a bytes-like object is required, not 'str'_第4张图片
完。

你可能感兴趣的:(新手)