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

基于传感器图像的CNN回归模型预测结果恒同问题排查求助

解决所有测试样本预测结果一致的问题

先直接点明最致命的错误,再逐一排查其他潜在问题:

1. 测试数据加载函数的致命bug

你的load_Testdata函数存在变量引用错误,导致所有测试样本加载的都是同一个图像(大概率是之前代码中遗留的imgfile变量值),这是预测结果完全一致的直接原因:

def load_Testdata(dataname):
    img_data_array = []
    # 错误:这里误用了未定义的imgfile,应该使用传入的dataname参数
    # imag = image.imread(imgfile)
    imag = image.imread(dataname)  # 修复这一行!
    imag = np.array(imag)
    imag = imag.astype('float64')
    imag /= 255
    img_data_array.append(imag)
    return img_data_array

先修复这个错误,再验证后续问题。

2. 训练轮次严重不足

从代码看你只训练了1个epoch:

history = model.fit(..., epochs=1)

即使你尝试过增加轮次,当前训练次数完全不足以让模型学习到数据中的模式。建议至少训练50-100个epoch,同时加入早停机制防止过拟合:

from tensorflow.keras.callbacks import EarlyStopping

early_stop = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
# 划分10%的训练数据作为验证集
history = model.fit(
    x=np.array(img_Trainingdata, np.float64), 
    y=np.array(output_Trainingdata, np.float64), 
    epochs=100,
    validation_split=0.1,
    callbacks=[early_stop]
)

3. 模型参数过多,易引发梯度消失/过拟合

你的模型总参数接近960万,但从训练步数(36步)来看,训练样本量应该很小(假设batch_size=32,总样本仅1152个),参数数量远超样本量会导致模型难以有效学习。建议简化模型:

  • 大幅减少全连接层的神经元数量,比如把Dense(3000)改成Dense(512)或Dense(256)
  • 加入Dropout层抑制过拟合:
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dropout(0.3))  # 添加Dropout层
model.add(tf.keras.layers.Dense(101))

4. 输出数据未归一化

你对图像做了归一化(imag /=255),但待预测的踝关节力矩序列没有做任何归一化处理。如果力矩值范围较大,会导致模型损失波动剧烈,梯度更新不稳定。建议对输出数据做归一化:

# 在create_dataset之后,对输出数据做归一化
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
# 拟合训练数据并归一化
output_Trainingdata_scaled = scaler.fit_transform(np.array(output_Trainingdata))

# 训练时使用归一化后的输出
history = model.fit(x=..., y=output_Trainingdata_scaled, ...)

# 预测后反归一化得到真实力矩值
pred = model.predict(...)
pred = scaler.inverse_transform(pred)

5. 确认训练数据的匹配正确性

检查create_dataset中图像与对应.mat文件的匹配逻辑:

  • 确认imgfile[0:-5] + ".mat"能准确对应到标签文件,比如sample1.jpeg对应sample1.mat
  • 随机抽取几个样本,打印图像形状和对应输出序列的长度,确保没有错位或匹配错误

6. 验证模型输入输出形状一致性

确认输入图像的形状确实是(101,9,3),与模型input_shape一致;输出序列长度确实是101,与最后一层Dense(101)的输出维度匹配。

修复以上问题后,应该能解决预测结果一致的情况。如果仍有问题,可以观察训练损失曲线:如果损失一直不变或下降极慢,可尝试降低学习率(比如调到0.0001)或更换优化器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 21:17:49