使用Python2训练的keras模型在使用Python3调用预测函数时给出nan值

使用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

我有一个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())
        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)