neural-network - caffe CNN 多元回归:具有非常不同的值范围的输出
问题描述
我正在使用 Caffe CNN 进行回归(见下图)。
我要预测的值的范围非常不同,例如 y1=[0.1:0.2], y2=[1:5],.. yn=[0:15]。
Q1 : 如果我试图预测 'y's 的样子,会不会影响学习?如果是,为什么?(我已经做过这个实验,结果还可以,但不好)
Q2:我可以通过 sum(ys)=1 来设置 'y's =[0:1] 吗?
Q3:我可以使用其他损失函数,例如 Softmax 或 Logistic,或者 Euclidean 是我唯一的选择吗?
解决方案
我没有给你答案,但我可以提供一些意见。
如果我正确理解您的设置,则每个输出都有一个损失函数y_i
。每个损失都是强制y_i
在特定范围内的回归损失。
1.由于您的输出“拉”到不同的范围,这可能会导致最后一层的权重矩阵对于不同的行具有非常不同的比例。如果您使用的是正则化器(如L2),这可能会“混淆”试图使权重大致各向同性的学习过程。
为了克服这个问题,您可以放松最后一层权重的正则化(使用decay_mult
参数)。或者,您可以添加一个"Scale"
层以仅学习每个输出的比例因子(也可能是偏差)。
2.我不明白你想通过这个来完成什么。您是否要限制输出?您可以通过对每个输出应用"Sigmoid"
或"Tanh"
激活来获得有界输出,将每个输出强制为 [0..1] 或 [-1..1] 范围。"Scale"
(您可以在激活后添加图层)。
3.您可以对每个输出使用逻辑回归,或探索平滑 L1 损失(这应该更稳健,特别是如果目标不在 [-1..1] 范围内)。
推荐阅读
- python - PySide2 支持 QML TableModel 吗?
- python - FileNotFoundError(2, '系统找不到指定的文件。', None, 2)
- asp.net-core - 评估 OnGetAsync 之前的 Razor 页面呈现
- reactjs - 如何更新我的 React 或 Material-ui 以匹配 package.json?
- sql - Postgresql redshift 版本:每月月底检索销售额
- java - IntelliJ 中的 JavaFX 悬停时没有 JavaDocs
- entity-framework - 在 Azure DevOps Pipeline 中管理 EF 迁移
- python-3.x - 调用在类中定义的函数时如何不获取对象 ID
- c++ - 在 C++ 中将数组传递给函数的不同语法
- c# - 有没有办法在 ASP.NET Web API REST 服务中执行一次代码?