Python Keras-don深度学习模型';在用JSON保存模型后,我不能给出正确的预测

Python Keras-don深度学习模型';在用JSON保存模型后,我不能给出正确的预测,python,json,deep-learning,keras,Python,Json,Deep Learning,Keras,我使用Keras制作了一个深度学习模型来模拟XOR门。因此,模型如下: import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout from keras.models import model_from_json from keras.utils import np_utils from keras.optimizers import SGD import rando

我使用Keras制作了一个深度学习模型来模拟XOR门。因此,模型如下:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.models import model_from_json
from keras.utils import np_utils
from keras.optimizers import SGD
import random


X_train = np.array([[0,0],[0,1],[1,0],[1,1]]) 
Y_train = np.array([[0],[1],[1],[0]]) 
print(X_train , Y_train ) 

model = Sequential() 
model.add(Dense(8, input_dim=2, activation='tanh'))
model.add(Dense(1, activation='sigmoid')) 
sgd = SGD(lr=0.1)
model.compile(loss='binary_crossentropy',
              optimizer=sgd, metrics=['accuracy']) 
model.fit(X_train, Y_train, nb_epoch=1000, batch_size=1)

scores = model.evaluate(X_train, Y_train) 
print("%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))

print( model.predict(X_train)) 
model_json = model.to_json()
with open("xor.json", "w") as json_file:
    json_file.write(model_json)

inp=np.empty((1,2))

while 1:
    inp[0,0]=random.randint(0,1)
    inp[0,1]= random.randint(0,1)
    prediction = model.predict_proba(inp)
    print(inp, '=', prediction)

    input('Press enter to continue: ')
它给了我很好的准确性:acc:100.00% 这是一个很好的预测:

[[ 0.00422836]
 [ 0.99482214]
 [ 0.99641317]
 [ 0.00683813]]
当我尝试对Xor模型进行一些随机输入时,我得到了正确的答案:

[[ 1.  0.]] = [[ 0.99641317]] 
[[ 0.  1.]] = [[ 0.99482214]] 
[[ 0.  1.]] = [[ 0.99482214]] 
[[ 0.  1.]] = [[ 0.99482214]] 
[[ 0.  0.]] = [[ 0.00422836]] 
[[ 1.  1.]] = [[ 0.00683812]] 
[[ 0.  0.]] = [[ 0.00422836]] 
[[ 1.  1.]] = [[ 0.00683812]] 
[[ 0.  1.]] = [[ 0.99482214]]
这部分工作正常,但当我将模型保存在Json文件中时,当我将其加载到另一个脚本中时:

import numpy as np
from modelnumba import pop_General_6e
from  numba import njit
import random
import matplotlib.pyplot as plt
from keras.models import model_from_json



json_file = open('xor.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

inp=np.empty((1,2))

while 1:
    inp[0,0]=random.randint(0,1)
    inp[0,1]= random.randint(0,1)
    prediction = loaded_model.predict_proba(inp)
    print(inp, '=', prediction)

    input('Press enter to continue: ')
我没有得到正确的预测

[[ 0.  1.]] = [[ 0.52390206]] 
[[ 0.  0.]] = [[ 0.5]] 
[[ 0.  1.]] = [[ 0.52390206]] 
[[ 0.  0.]] = [[ 0.5]] 
[[ 1.  0.]] = [[ 0.38872629]] 
[[ 1.  1.]] = [[ 0.42139927]] 
[[ 1.  1.]] = [[ 0.42139927]] 
[[ 0.  1.]] = [[ 0.52390206]]

我做错了什么?

问题是您只保存模型的结构。这不包括从训练模型中获得的权重。引用Keras常见问题:

如果只需要保存模型的体系结构,而不需要保存模型的权重或训练配置,则可以执行以下操作:
json\u string=model.to\u json()


或者,尝试执行
model.save(文件路径)
。这将把模型结构和训练模型得到的权重保存到用
filepath
指定的文件中

你说得对,我需要用
model保存权重。保存权重('model\u weights.h5')
然后用
loaded\u model.load\u weights('model\u weights.h5')加载这些权重。
。显然,我的脚本无法工作。