Python 3.x 使用hyperas查找Keras模型参数时出现解码问题,可能是由于“hyperopt”中的“试用”功能造成的`
我正在使用Python 3.x 使用hyperas查找Keras模型参数时出现解码问题,可能是由于“hyperopt”中的“试用”功能造成的`,python-3.x,numpy,keras,hyperopt,hyperas,Python 3.x,Numpy,Keras,Hyperopt,Hyperas,我正在使用hyperas模块调整我的Keras模型并返回错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 4785: ordinal not in range(128) 错误发生在调用位置,trials的语法为: if __name__ == '__main__': best_run, best_model = optim.minimize(model=create_model,
hyperas
模块调整我的Keras
模型并返回错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 4785: ordinal not in range(128)
错误发生在调用位置,trials的语法为:
if __name__ == '__main__':
best_run, best_model = optim.minimize(model=create_model,
data=data,
algo=tpe.suggest,
max_evals=20,
trials=Trials())
我认为问题的根源在于我加载的numpy.npy文件,它是一个ascii
编码格式的数据。
那么,如何将ascii
格式更改为utf-8
格式呢
我通过添加encoding='latin1'
看到了类似的解决方案,但它不起作用
label =np.load(os.getcwd()+'/Simu_Sample_label_1000.npy',encoding="latin1")
sample=np.load(os.getcwd()+'/Training_Sample_1000.npy',encoding="latin1")
在此处添加我的全部回溯:
In [3]: %run 1dCNN.py
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
~/subg_ps/cnn_train/1dCNN.py in <module>()
127 algo=tpe.suggest,
128 max_evals=20,
--> 129 trials=Trials())
130 trX, trY, teX, teY = data()
131 print("Evalutation of best performing model:")
~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py in minimize(model, data, algo, max_evals, trials, functions, rseed, notebook_name, verbose, eval_space, return_space, keep_temp)
67 notebook_name=notebook_name,
68 verbose=verbose,
---> 69 keep_temp=keep_temp)
70
71 best_model = None
~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py in base_minimizer(model, data, functions, algo, max_evals, trials, rseed, full_model_string, notebook_name, verbose, stack, keep_temp)
96 model_str = full_model_string
97 else:
---> 98 model_str = get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack)
99 temp_file = './temp_model.py'
100 write_temp_files(model_str, temp_file)
~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py in get_hyperopt_model_string(model, data, functions, notebook_name, verbose, stack)
184 calling_script_file = os.path.abspath(inspect.stack()[stack][1])
185 with open(calling_script_file, 'r') as f:
--> 186 source = f.read()
187
188 cleaned_source = remove_all_comments(source)
~/anaconda3/lib/python3.6/encodings/ascii.py in decode(self, input, final)
24 class IncrementalDecoder(codecs.IncrementalDecoder):
25 def decode(self, input, final=False):
---> 26 return codecs.ascii_decode(input, self.errors)[0]
27
28 class StreamWriter(Codec,codecs.StreamWriter):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 4785: ordinal not in range(128)
[3]中的:%run1dcnn.py
---------------------------------------------------------------------------
UnicodeDecodeError回溯(最近一次呼叫最后一次)
~/subg\u ps/cnn\u train/1dCNN.py in()
127 algo=tpe.建议,
128最大值=20,
-->129次试验=试验()
130 trX,trY,teX,teY=data()
131打印(“最佳性能模型评估:”)
最小化中的~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py(模型、数据、算法、最大值、试验、函数、rseed、笔记本名称、详细信息、评估空间、返回空间、保持温度)
67笔记本名称=笔记本名称,
68 verbose=冗长,
--->69保持温度=保持温度)
70
71最佳_模型=无
~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py在base\u minimizer中(模型、数据、函数、算法、最大值、试验、rseed、完整模型字符串、笔记本名称、详细信息、堆栈、保持温度)
96型号str=完整型号字符串
97其他:
--->98 model_str=get_hyperopt_model_string(模型、数据、函数、笔记本名称、详细信息、堆栈)
99 temp_file='./temp_model.py'
100个写入临时文件(型号、临时文件)
get\u hyperopt\u model\u字符串中的~/anaconda3/lib/python3.6/site-packages/hyperas/optim.py(模型、数据、函数、笔记本名称、详细信息、堆栈)
184调用_script_file=os.path.abspath(inspect.stack()[stack][1])
185打开(调用脚本文件“r”)作为f:
-->186 source=f.read()
187
188已清理的\u源=删除所有\u注释(源)
解码中的~/anaconda3/lib/python3.6/encodings/ascii.py(self,input,final)
24类增量编码器(编解码器.增量编码器):
25 def解码(自身、输入、最终=假):
--->26返回编解码器。ascii_解码(输入,自身错误)[0]
27
28类StreamWriter(编解码器、编解码器、StreamWriter):
UnicodeDecodeError:“ascii”编解码器无法解码位置4785处的字节0xe8:序号不在范围内(128)
我想我最好把所有的追踪放在这里,所有的代码如下:
我认为这个问题是由于hyperopt
中的Trials
功能造成的,但我没有发现任何像我这样的相关问题 我可以通过将unicode字符串(PY3默认值)转换为bytestring,然后尝试对其进行解码来重新创建错误:
In [347]: astr = 'abc'+chr(0xe8)+'xyz'
In [348]: astr
Out[348]: 'abcèxyz'
In [349]: astr.encode('latin1')
Out[349]: b'abc\xe8xyz'
In [350]: astr.encode('latin1').decode('ascii')
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-350-1825a76f5d5b> in <module>
----> 1 astr.encode('latin1').decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 3: ordinal not in range(128)
[347]中的astr='abc'+chr(0xe8)+'xyz'
在[348]中:应科院
Out[348]:“abcèxyz”
在[349]中:asr.encode('latin1')
Out[349]:b'abc\xe8xyz'
在[350]中:astr.encode('latin1')。decode('ascii'))
---------------------------------------------------------------------------
UnicodeDecodeError回溯(最近一次呼叫最后一次)
在里面
---->1应收账款编码('latin1')。解码('ascii')
UnicodeDecodeError:“ascii”编解码器无法解码位置3中的字节0xe8:序号不在范围内(128)
hyperas
在get\u hyperopt\u model\u string()
中读取某种脚本文件。我不知道是什么变量控制了这个读数,可能是笔记本
。我认为从npy
文件加载的数组与此问题无关。它正在解码一个大字符串(位置4785),而不是数组中的某个元素
简而言之,这是一个hyperas
模型问题,而不是npy
文件问题。问题已经解决。
调用optim.minimize
函数时,我们必须首先定义两个名为data
和model
的函数,而不是我所称的create\u model
或其他任何函数。这是一个非常严格的限制。从错误及其回溯中,您知道哪个数组有问题吗?标签
和样本
数组与模型调用之间有什么联系?我看不到这些变量。这些npy
文件的来源是什么。请注意,encoding
参数的适用性非常有限(请阅读文档)。不,回溯只是告诉我错误来自第一个引用的代码,label
和sample
包含data=data
参数。我搜索了这个错误的解决方案,并推断它是由于我输入的数据造成的。我的npy
文件是由python3从我的另一个程序生成的,因此,我认为这里不应该有这个错误。我已经阅读了文档,只是在这里尝试参数编码
,以防万一,但是没有。我找不到任何控制读取的相关参数,也许我最好更改问题的描述。多谢各位。