You need to enable JavaScript to run this app. TensorFlow搭建的CNN训练时未使用全部训练图像的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow搭建的CNN训练时未使用全部训练图像的问题咨询

问题解答

1. 日志中57/57的含义

这个数值代表训练过程的批次数(batch count),不是用到的图像数量。TensorFlow的model.fit()默认批大小(batch_size)为32,你的总训练样本数是1809,计算得:1809 ÷ 32 ≈ 56.53,向上取整后就是57个批次,所有1809张图像已经全部参与了当前epoch的训练,不存在只用到57张的情况。

2. loss为0、准确率异常的原因及修复方案

你当前的问题核心是模型结构、损失函数和分类任务不匹配,具体问题和调整方法如下:

  • 输出层配置错误:你做的是3分类任务,输出层神经元数应该和类别数一致,你当前设置为1个神经元,softmax作用在单个神经元上输出永远为1,导致损失计算完全失效,出现loss恒为0的异常表现。
  • 损失函数与标签格式不匹配:你的标签behaviour是0/1/2的整数格式,使用categorical_crossentropy要求标签先做One-Hot编码,如果你不想转编码,可以直接替换损失函数适配整数标签。

3. 调整后的代码示例

修正输出层:

# 把原来的输出层替换为以下代码
model.add(layers.Dense(3, activation = 'softmax'))

修正编译配置:

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])

可选:显式指定batch大小(方便自定义批次数量)

如果你想要调整每批的样本数,可以在fit时显式传入batch_size参数,比如设置为16的话,总批次就会变成1809/16≈114:

history = model.fit(image_list, behaviour, epochs=5, 
                    batch_size=32, # 可自定义调整
                    validation_data=(image_list, behaviour), verbose = 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 07:06:06