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

如何使用Pyplot绘制Keras模型训练准确率曲线及解决运行报错问题

代码错误修正方案

以下是你代码中存在的问题和对应修改方法:

  • 缺失绘图库导入:你直接使用plt调用绘图接口,但没有导入对应依赖,在代码开头添加导入语句即可:
    import matplotlib.pyplot as plt
    
  • 优化器参数不兼容:新版本TensorFlow的Adam优化器已废弃lr参数,替换为learning_rate,修改编译部分的优化器配置:
    optimizer=tf.keras.optimizers.Adam(learning_rate=base_learning_rate)
    
  • 损失函数与输出层配置不匹配:你输出层用2神经元+softmax激活的配置,对应多分类损失函数,同时from_logits=True要求输出层没有激活函数,两者完全冲突,两种修改方案二选一即可:
    • 方案1(适配二分类场景):输出层改为1神经元+sigmoid激活,损失函数保持BinaryCrossentropy,删除from_logits=True参数
      # 输出层修改
      tf.keras.layers.Dense(1, activation="sigmoid")
      # 损失函数修改
      loss=tf.keras.losses.BinaryCrossentropy()
      
    • 方案2(保持2分类softmax输出):损失函数替换为多分类交叉熵,关闭logits参数,同时确认你的标签已经做了one-hot编码
      loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False)
      
  • 训练变量未定义:你没有加载本地数据集、做预处理和训练集验证集拆分,x_train/y_train/x_val/y_val四个变量都不存在,需要补充数据集加载和拆分的代码,示例逻辑如下:
    # 此处替换为你自己的数据集加载逻辑,示例为加载本地图片目录
    dataset = tf.keras.utils.image_dataset_from_directory(
        "你的数据集目录路径",
        image_size=(224,224),
        batch_size=32,
        label_mode="categorical"
    )
    # 拆分训练集验证集
    train_size = int(0.8 * len(dataset))
    val_size = len(dataset) - train_size
    x_train = dataset.take(train_size)
    x_val = dataset.skip(train_size).take(val_size)
    

修正后完整可运行代码参考

import tensorflow as tf
import matplotlib.pyplot as plt

# 加载数据集,替换为你自己的数据集路径
dataset = tf.keras.utils.image_dataset_from_directory(
    "./dataset",
    image_size=(224, 224),
    batch_size=32,
    label_mode="categorical"
)
# 拆分训练验证集
train_size = int(0.8 * len(dataset))
val_size = len(dataset) - train_size
x_train = dataset.take(train_size)
x_val = dataset.skip(train_size).take(val_size)

base_model = tf.keras.applications.MobileNetV2(input_shape = (224, 224, 3), include_top = False, weights = "imagenet")
base_model.trainable = False

model = tf.keras.Sequential([
    base_model,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(2, activation="softmax")                                     
])

base_learning_rate = 0.00001
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=base_learning_rate),
              loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False),
              metrics=['accuracy'])

history = model.fit(x_train, epochs = 500 , validation_data = x_val)
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(500)

plt.figure(figsize=(15, 15))
plt.subplot(2, 2, 1)
plt.plot(epochs_range, acc, label='训练准确率')
plt.plot(epochs_range, val_acc, label='验证准确率')
plt.legend(loc='lower right')
plt.title('训练和验证准确率')

plt.subplot(2, 2, 2)
plt.plot(epochs_range, loss, label='训练损失')
plt.plot(epochs_range, val_loss, label='验证损失')
plt.legend(loc='upper right')
plt.title('训练和验证损失')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:39:00