关于#神经网络#的问题

我有两百多张图片和对应的力学数据,我想通过神经网络对图像进行训练,得出对应的力学数据,图片和数据如下图

img

img

img


所有数据在1-1w之间,所以我的归一化方式是数据/1w,损失函数用的mae,lr为1e-3
我使用keras.applications包中的模型对数据集进行训练
目前的问题是,不管什么模型,在训练集和验证集上的损失值都能降到0.1左右,在可接受范围内。但是往往实际预测时准确率却很低,不是和实际相差很大,就是就集中在很小的范围,似乎神经网络并没有学习到什么。如下图

img

img

img


我想知道问题出在哪里,是因为图片相似度太高?还是数据量太少,或者是其他原因?希望大家能给我一些思路或者指出我的问题所在,不胜感激!

我没看懂你这个数据转换关系,比如你怎么从图片到你的表格值?是有什么特定的计算方式还是你想直接让resnet提取特征然后给特征赋值?我不认为这是一种很好的方案,你的损失函数是什么?你这个没定好,模型根本无法确定图像上面的那种特征对于结果的影响比较大,能尽量学习那个特征,这就会导致你同一张图片,随便变动一些像素值,少量的就行,从原图上面看不出来有什么区别,但是你的结果就是差距很大。

训练集太小,肯定过拟合了。可以尝试增加数据集或者做数据增强

思路:线上线下数据分布是否一致是个常见问题,目标的训练和实际问题是否一致,也是一个显著问题,即样本的确定和目标的确定。
另一个就是,线上是不是有一些规则做了过滤,并不是全部数据都用了你的模型。 时间问题有考虑了吗?是不是时间问题呢?导致了模型和问题不匹配。 思考下。

以下答案基于ChatGPT与GISer Liu编写:

根据您提供的信息,可能有以下几个问题:

  1. 数据量太少:你提到你有200多张图像,这对于深度学习模型来说可能是不足够的。如果数据集太小,模型可能会过拟合训练数据并且不能泛化到新的数据。为了让模型能够更好地泛化,您可以尝试增加数据集的大小,例如通过数据增强技术来生成更多的图像,或者使用迁移学习技术,从预先训练的模型中获得更好的特征表示。
  2. 数据分布问题:您提到数据的值在1-1w之间,你将其归一化为数据/1w。但是,您可能需要对不同数据集进行不同的归一化。如果您的训练数据分布与测试数据不同,模型可能无法正确学习。你可以尝试对训练数据和测试数据分别进行归一化。
  3. 模型选择:您使用了 keras.applications 中的模型进行训练,但不同的模型适用于不同类型的任务。您可以尝试使用其他类型的模型,例如卷积神经网络(CNN)或循环神经网络(RNN),以便更好地学习数据集中的特征。你可以尝试调整模型的超参数或者使用不同的网络结构来获得更好的结果。
  4. 图像相似度:你提到你的图像相似度很高,这可能会导致模型难以区分不同的数据。你可以尝试使用不同的图像增强技术来增加图像的差异性,例如旋转、平移或随机剪裁等。
  5. 损失函数:你使用的是 MAE 损失函数,但这并不一定是最适合你的问题的损失函数。你可以尝试使用其他类型的损失函数,例如 MSE 损失函数或 Huber 损失函数等。

综上所述,这些问题可能导致模型在测试数据上表现不佳。您可以尝试解决这些问题,例如增加数据集大小,调整归一化和损失函数等,来获得更好的结果。

(1)样本量太小,所用方法和模型不适合;
(2)你说数据中 1—1W,这更像是在训练一个拟合模型,而不是分类模型,则这种方法和样本量更不够。
(3)训练集、检验集、预测集划分有问题。如果预测集不是从样本集中选取的,而是另外找来的,则还有可能是预测集样本的预处理有问题。

该回答引用ChatGPT
使用深度学习框架,如TensorFlow或PyTorch,来构建神经网络模型,并使用训练数据集来训练模型。