使用Python2训练的keras模型在使用Python3调用预测函数时给出nan值
我有一个keras模型,我使用Python2.7进行了培训。当我尝试预测时,这个模型在Python2.7上工作正常。但当我尝试在Python3上使用此模型进行预测时,它总是预测[[nan nan]]值 下面是我用来从json加载模型的代码使用Python2训练的keras模型在使用Python3调用预测函数时给出nan值,python,tensorflow,keras,Python,Tensorflow,Keras,我有一个keras模型,我使用Python2.7进行了培训。当我尝试预测时,这个模型在Python2.7上工作正常。但当我尝试在Python3上使用此模型进行预测时,它总是预测[[nan nan]]值 下面是我用来从json加载模型的代码 def load_model_from_args(args): with open(args.json) as json_file: model = model_from_json(json_file.read()) m
def load_model_from_args(args):
with open(args.json) as json_file:
model = model_from_json(json_file.read())
model.load_weights(args.weights)
return model
这就是我想要预测的地方
def get_emotion(features,model):
predictions = model.predict(features)
print(predictions)
# [[nan nan nan nan nan nan nan]]
# the reset of the code
是什么导致了这种类型的差异?您可以尝试以下方法(不确定是否有效,但看起来很干净): 获取模型的权重并使用numpy保存:
#in 2.7
weights = model.get_weights()
np.save('weights27.npy', weights)
通过Python 3中的代码再次创建模型:
#in python 3, do no load the saved model, create a new one:
#same layers, same sizes, everything
...model code...
model3 = Model(...)
将权重加载到模型中:
model3.set_weights(np.load('weights27.npy'))
尝试使用该模型
尝试解决pickle问题:
在python 3中:
weights = []
for i in range(theTotalNumberOfSavedWeights):
weights.append(np.load("weights-" + str(i) + ".npy", allow_pickle=False))
model2.set_weights(weights)
很可能在计算
特性的方式上会有差异。@nuric在调用predict函数之前,我已经检查了特性的值。这两种情况都是一样的。当我尝试你的代码时,我得到以下错误np.save('weights27.npy',weights,allow_pickle=False)文件“/xxx/site packages/numpy/lib/npyio.py”,第511行,在save pickle_kwargs=pickle_kwargs)文件“/xxx/local/lib/python2.7/site packages/numpy/lib/format.py”,第582行,在write_array raise ValueError(“当”ValueError:当allow_pickle=False时无法保存对象数组
仍然不能解决问题。我得到了另一种类型的错误model.set_weights(np.load('weights27.npy'))文件/xxx/site packages/numpy/lib/npyio.py”,第421行,在load pickle_kwargs=pickle_kwargs)文件“/xxx/site packages/numpy/lib/format.py”中,第656行,读数组“to numpy.load”%(err,))UnicodeError:取消勾选python对象失败:UnicodeDecorr('ascii',b'\xb6\x99\xe2=n\x0e\xf5\xbc\xed\x177>\xeai!\xbd\x1f\xd5i\xbd%\x82k=\x04\xe6\n\xbe\xfe\x07\x81=\xf9F!\xbe/\x83\xd6\xbd\xaa | \x04>7\x17\x17>\xc2xJ\xbe\x7f}\x03=D?…
对于np.load
函数,但我得到的是nan
值。请尝试我答案中的新建议,强制allow\u pickle=False
。
weights = []
for i in range(theTotalNumberOfSavedWeights):
weights.append(np.load("weights-" + str(i) + ".npy", allow_pickle=False))
model2.set_weights(weights)