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

TensorFlow图像分类器不显示损失、准确率及训练过程问题

问题原因与修复方法

程序无法输出训练日志是两个问题共同导致的:一是运行环境存在OpenMP运行时冲突,程序在依赖加载阶段就直接中断;二是代码本身存在多处拼写错误,就算绕过冲突也会触发运行时错误。


1. 处理OpenMP冲突报错

你看到的OMP: Error #15是因为当前Python环境里安装的TensorFlow、OpenCV、NumPy等库各自携带了不同版本的OpenMP运行时动态库,加载时出现多副本冲突,直接终止了程序运行。

  • 本地调试阶段的快速解决方法:在代码最顶部,所有import语句之前添加如下两行代码,临时允许重复加载OpenMP库:
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

注:该方法仅适合本地学习调试场景,长期稳定的解决方案是用conda管理科学计算相关依赖,安装时会自动统一OpenMP版本,从根源避免冲突。

  • 终端里打印的AVX2相关提示不是报错,只是TensorFlow的常规信息,说明你的CPU支持AVX2加速指令,无需处理。

2. 修正代码里的拼写错误

代码里有4处拼写/大小写错误,就算绕过OpenMP冲突也会触发运行错误,需要逐一修正:

  • 两处layer.MaxPooling2D:layer漏写了s,应该是layers.MaxPooling2D
  • layers.flatten():类名首字母未大写,应该是layers.Flatten()
  • model.complie():单词拼写错误,正确写法是model.compile()

修正后的模型构建、编译部分代码如下:

model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(32, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(32, (3,3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

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

运行说明

全部修改完成后运行代码,首先会弹出显示16张CIFAR-10样本图片的matplotlib窗口,关掉该窗口后终端就会正常输出每个epoch的训练进度、训练集/验证集的损失值和准确率,训练完成后会打印测试集的最终评估结果,最后在当前目录生成训练好的模型文件image_classifier.model。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:06:24