You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keras构建的XOR门深度学习模型保存后预测结果异常

解决Keras XOR模型保存为JSON后预测不准的问题

嘿,我碰到过类似的问题,大概率是你的模型保存/加载流程缺了关键步骤,或者训练环节没做完整。先帮你一步步排查:

1. 先补全你的训练代码(核心前提)

你给出的代码里最后一层没写完,而且缺少编译、训练的关键步骤——没有训练好的模型,保存再加载当然预测不对!XOR是经典的非线性问题,得用正确的层配置和训练流程:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.models import model_from_json
from keras.optimizers import SGD

# 数据集
X_train = np.array([[0,0],[0,1],[1,0],[1,1]])
Y_train = np.array([[0],[1],[1],[0]])

# 构建模型
model = Sequential()
model.add(Dense(8, input_dim=2, activation='tanh'))
# 补全最后一层:二分类任务用sigmoid激活
model.add(Dense(1, activation='sigmoid'))

# 编译模型:用binary_crossentropy匹配二分类,SGD学习率调0.1比较合适
sgd = SGD(learning_rate=0.1)
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])

# 训练模型:XOR需要足够多的epoch才能收敛
model.fit(X_train, Y_train, epochs=1000, batch_size=4, verbose=1)

训练时你会看到准确率逐渐接近100%,这说明模型已经学会了XOR的逻辑。

2. 正确的模型保存流程(别只存结构!)

很多人只保存模型的JSON结构,但忘了保存训练好的权重——JSON里只有模型的层结构,没有训练出来的参数,加载后相当于一个全新初始化的模型,自然预测错误。正确的保存方式是同时存结构和权重:

# 保存模型结构到JSON文件
model_json = model.to_json()
with open("xor_model.json", "w") as json_file:
    json_file.write(model_json)

# 保存训练好的权重到HDF5文件
model.save_weights("xor_model_weights.h5")
print("模型结构与权重已成功保存")

3. 正确的加载与预测流程(必须重新编译!)

加载模型时,要先加载结构,再加载权重,最后一定要重新编译模型——否则Keras会用默认的优化器和损失函数,和你训练时的配置不匹配,导致预测异常:

# 加载模型结构
json_file = open('xor_model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)

# 加载训练好的权重
loaded_model.load_weights("xor_model_weights.h5")

# 关键!重新编译模型,用和训练时一致的配置
loaded_model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy'])

# 预测并转换为0/1结果(因为sigmoid输出是0-1的概率值)
predictions = loaded_model.predict(X_train)
predicted_classes = (predictions > 0.5).astype(int)

print("原始标签:")
print(Y_train)
print("预测结果:")
print(predicted_classes)

4. 常见坑点检查

  • 确认训练时模型已经收敛:看训练日志里的accuracy是否达到100%,如果没收敛,先调epoch数或学习率
  • 别漏了加载后的编译步骤:这是很多人忽略的关键
  • 预测时记得做阈值转换:sigmoid输出是概率,需要转成0/1的分类结果

内容的提问来源于stack exchange,提问作者ymmx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:21:19