Python Keras-don深度学习模型';在用JSON保存模型后,我不能给出正确的预测
我使用Keras制作了一个深度学习模型来模拟XOR门。因此,模型如下: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
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')加载这些权重。
。显然,我的脚本无法工作。