gpt4 book ai didi

machine-learning - 即使我的 CNN 模型正在进行回归,我是否可以对输出层使用 Sigmoid 激活?

转载 作者:行者123 更新时间:2023-11-30 09:05:28 25 4
gpt4 key购买 nike

最终目标:对象中点计算。

我有一个小数据集(大约 120 张图像),其中有一个对象(在所有情况下都相同),标签是图像中对象中点的归一化 x,y 坐标(始终在 0 和1)

例如x = 图像_005 ;对于对象位于左下角附近的图像,y = (0.1, 0.15)

我正在尝试使用 ResNet 架构,但根据我的图像大小进行了定制(所有图像都是相同的)。由于两个坐标的输出值始终介于 0 和 1 之间,我想知道是否可以在最后一层使用 Sigmoid 激活:

 X = Dense(2, activation='sigmoid', name='fc', kernel_initializer = glorot_uniform(seed=0))(X)

而不是线性激活(正如当您尝试获得回归结果时经常建议的那样)

对于损失函数,我使用 MSE 和“rmsprop”优化器,除了准确性和 MSE 之外,我还编写了一个自定义指标来告诉我预测点与标签的偏差是否超过 5%

model.compile(optimizer='rmsprop', loss='mean_squared_error', metrics=['mse','acc',perc_midpoint_err])

在对模型进行大约 150 个时期的训练后,我没有得到好的结果(我也尝试了不同的批量大小)

我应该将激活层更改为线性吗?或者我可以对我的模型进行不同的修改吗?或者ResNet完全不适合这个任务?

最佳答案

您的任务与对象检测相关。不同之处在于,每张图像中似乎只有一个对象,而在检测中可能存在多个对象或不存在对象。对于目标检测,有 YOLOv3 ( https://pjreddie.com/media/files/papers/YOLOv3.pdf ) 或 Single Shot Multibox Detector - SSD ( https://arxiv.org/pdf/1512.02325.pdf ) 等网络,但也可以将 ResNet 训练为目标检测网络(如本文中: https://arxiv.org/pdf/1506.01497.pdf )

我将简要描述 YOLO 如何解决边界框 x,y 坐标的回归问题:

  • YOLO 对 x,y 使用 sigmoid 激活函数
  • 它将图像划分为网格单元,并预测每个网格单元中潜在对象的偏移量。如果您在多个位置有大图像或对象,这可能会很有帮助。
  • 原始论文使用 MSE 作为损失函数,但在我最喜欢的 keras 重新实现中,他们使用 Adam 优化器的交叉熵损失。

原则上你的设置对我来说看起来不错。但是,有很多事情可能会导致性能不佳,因为您没有告知数据集的域:您是使用预训练的网络还是从头开始训练?它是您要学习的新类别还是网络之前见过的对象类别?等等

以下是您可以尝试的一些想法:

  • 更改优化器(SGD 或 Adam)
  • 更改学习率(小一点比太大好)
  • 增加数据集大小。为了针对新的对象类别重新训练网络,我的经验法则是使用大约 500-1000 张图像。对于从头开始的重新训练,您需要更多的数量级。
  • 您可能需要查看 YOLO 或 SSD 并根据您的情况修改这些网络

我希望您能找到一些解决方案的灵感。

关于machine-learning - 即使我的 CNN 模型正在进行回归,我是否可以对输出层使用 Sigmoid 激活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52918613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com