python - TensorFlow 中的加载模型给出了与原始模型不同的结果
问题描述
我在 Python 中使用 TensorFlow 库。创建模型并保存后,如果我加载整个模型,我会得到不一致的结果。
首先,我使用的是 TensorFlow 2.3.0 版。
我正在使用的代码如下:
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import ModelCheckpoint
def get_new_model():
model = Sequential([
Conv2D(filters=16, input_shape=(32, 32, 3), kernel_size=(3, 3), activation='relu', name='conv_1'),
Conv2D(filters=8, kernel_size=(3, 3), activation='relu', name='conv_2'),
MaxPooling2D(pool_size=(4, 4), name='pool_1'),
Flatten(name='flatten'),
Dense(units=32, activation='relu', name='dense_1'),
Dense(units=10, activation='softmax', name='dense_2')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return model
checkpoint_path = 'model_checkpoints'
checkpoint = ModelCheckpoint(filepath=checkpoint_path, save_weights_only=False, frequency='epoch', verbose=1)
model = get_new_model()
model.fit(x_train, y_train, epochs=3, callbacks=[checkpoint])
直到这里没问题,我创建模型,编译它并用一些数据训练它。我还使用 ModelCheckpoint 来保存模型。当我尝试以下问题时出现问题
from tensorflow.keras.models import load_model
model2 = load_model(checkpoint_path)
model.evaluate(x_test, y_test)
model2.evaluate(x_test, y_test)
然后,第一个评估返回 0.477 的准确度,而另一个评估返回 0.128 的准确度,这本质上是一个随机选择。这里有什么问题?这两个模型应该是相同的,实际上,它们为损失函数提供了相同的值,直到小数点后 16 位。
解决方案
推荐阅读
- javascript - 如何使用 angularjs 将数据发布到 django api 端点
- swift - 符合协议但没有任何反应
- c# - UWP 进程内 AppService 启动 UI
- python - 蛇游戏 - str 对象不可调用
- mongodb - FindAndModify:获取 newDocument 以及文档是否已插入或更新的信息
- java - MongoDB 查询 java Calendar 实例
- swift - 用户使用令牌身份验证快速注销后,登录详细信息仍然存在
- android - 使用 GSON 解析复杂的 JSON
- python - 如何从 pandas 数据框中聚合和绘制数据?
- php - Laravel v5.6 错误显示此“未定义偏移量:0(查看:C:\xampp\htdocs\schoolmanagement\resources\views\displaycombinedata.blade.php)”