训练带有中间分类器的级联网络

我正在尝试完成一项双重任务。输入是一张图像,根据该输入,我希望从一组图像中选择另一张图像(分类任务),然后使用这两张图像来获得一个输出张量。显然,如果我知道应该从那组图像中选择哪张图像的真实情况,我可以分别训练这两个模型。但我只有输出张量的真实情况。

对我来说,这个问题似乎是,如果我们使用分类层,梯度将不再可微。我该如何处理这个问题?是否有文献使用这种架构进行任何应用?谢谢!

更多细节:我有多个对象/场景的图像,我希望使用其中的两张图像来进行某种重建问题。为了最大化重建的性能,如果给定第一张图像,我希望智能地选择第二张图像。例如,我有三张图像A、B、C,使用AC可以得到最佳结果。我需要一个模型,给定A可以预测C,然后使用AC可以实现重建。现在任务清楚了吗?我没有真实情况表明AC比AB好。现在任务清楚了吗?


回答:

所以,基本上,你想先进行分类任务,然后进行重建任务。

这是我的建议(我并不认为这是绝对最佳的解决方案,但这是我会如何处理这个问题的):

你可以创建一个单一任务,执行分类–>重建,并使用单一损失。我们仍然将这个网络分为两部分,称分类部分为net_class,执行重建的部分为net_reconstruct。假设你的分类网络预测{'B': 0.1, 'C': 0.9}。我不会只使用图像’C’进行重建,而是将两个配对(A-BA-C)都输入到第二个网络,并计算重建损失L(我不是重建专家,但我猜想有一些经典的损失函数在这里)。

因此,你将计算两个损失L(A-B)L(A-C)。我的总损失将是0.1 * L(A-B) + 0.9 * L(A-C)。这样,你会训练net_class来选择最小化重建损失的配对,同时你仍然会训练net_reconstruct来最小化这两个损失,而且损失是连续的(因此,根据AI专家的说法,是可微的 😉 )。

这种损失背后的想法是三方面的:

1 – 改善重建器会使损失下降(因为L(A-B)L(A-C)都会减少。因此,这个损失应该使你的重建器向你想要的方向收敛。

2 – 假设你的重建器已经训练得相当好了(L(A-B)L(A-C)相对较低)。那么,你的分类器有动力去预测具有最低重建损失的类别。

3 – 现在,你的重建器和分类器将同时训练。你可以期望,在训练结束时,得到一个分类器,它的输出几乎是二元结果(如0.998对0.002)。在这一点上,你的重建器几乎只会在与0.998输出相关联的场景上进行训练。这应该不是问题,因为,如果我正确理解了你的问题,你希望仅对最高分类的场景进行重建部分。

请注意,这种方法即使你不在重建部分使用深度学习也能工作。

如果你想在这类主题上获得一些灵感,我推荐你阅读一些关于GANs(生成对抗网络)的博客文章。它们使用了相同的两阶段-单一损失技巧(当然有一些细微的不同,但这些想法非常接近)。

祝你好运!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注