gpt4 book ai didi

tensorflow - 加载模型后 Keras 精度低

转载 作者:行者123 更新时间:2023-12-04 12:32:21 25 4
gpt4 key购买 nike

我看到了一个非常奇怪的情况。在训练卷积网络后,我在验证数据上获得了大约 95% 的准确率。我保存模型。稍后我恢复模型并在相同的验证数据集上运行验证。这次我几乎没有得到 10% 的准确率。我已阅读 documentation但似乎没有任何帮助。有什么我做错了吗?

def build_model_mnist(image_width, image_height, image_depth):
model = keras.Sequential()
model.add(keras.layers.Conv2D(5, (3, 3), activation='relu', input_shape=(image_width, image_height, image_depth)))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(10, (3, 3), activation='relu'))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(10, (3, 3), activation='relu'))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))

model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])

return model

def train_mnist():
model = build_model_mnist(image_width=train_images.shape[1],
image_height=train_images.shape[2],
image_depth=train_images.shape[3])
# Start training
h = model.fit(train_images, train_labels, batch_size=500, epochs=5)

model.save("minist")

# Evaluate the model
test_loss, test_acc = model.evaluate(test_images, test_labels)

print("Accuracy:", test_acc)

train_mnist()
以上将显示95%的准确率。但是下面的代码显示了 10% 的准确率。
def evaluate_mnist():
# Load the model
model = keras.models.load_model("minist")

# Evaluate the model
test_loss, test_acc = model.evaluate(test_images, test_labels)

print("Accuracy:", test_acc)

evaluate_mnist()
如果我只保存和恢复权重,那么一切都很好。在下面的代码中,我们只保存权重。稍后我们使用代码重新创建模型架构并恢复权重。这种方法产生正确的准确性。
def train_mnist():
#Create the network model
model = build_model_mnist(image_width=train_images.shape[1],
image_height=train_images.shape[2],
image_depth=train_images.shape[3])
# Start training
h = model.fit(train_images, train_labels, batch_size=500, epochs=5)

# Evaluate the model
test_loss, test_acc = model.evaluate(test_images, test_labels)

print("Accuracy:", test_acc)

model.save_weights("minist-weights")

train_mnist()

def evaluate_mnist():
# Re-create the model architecture
model = build_model_mnist(image_width=train_images.shape[1],
image_height=train_images.shape[2],
image_depth=train_images.shape[3])

model.load_weights("minist-weights")

# Evaluate the model
test_loss, test_acc = model.evaluate(test_images, test_labels)

print("Accuracy:", test_acc)

evaluate_mnist()

最佳答案

我在 tf 2.3.0 中遇到了类似的问题。
issue解释了使用 sparse_categorical_crossentropy 时通用术语“准确度”度量的问题。在模型重新加载时,它关联了错误的准确度指标。
解决方案是明确告诉 keras 使用正确的度量标准,而不是让它推断出正确的度量标准(其中的错误),即使用 metrics='sparse_categorical_accuracy' 进行编译。
我最初在训练阶段使用 metrics='accuracy' 作为指标,发现只有在重新加载后重新编译模型才能恢复预期的性能。

关于tensorflow - 加载模型后 Keras 精度低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64541824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com