如何创建一个自定义的加权损失函数回归使用深度学习工具箱?

46个视图(30天)
我想实现一个自定义的加权损失函数回归神经网络和想要达到:
% non-vectorized形式用于清晰
loss_elem (i) =总和((Y(:,我)- T (:, i)) ^ 2) * W (i));
损失= (loss_elem) / N;
其中W (i)是i输入样本的重量。
我发现了一个类似的例子创建加权分类输出层和试图实现它为自定义回归输出层。
加权分类输出层使用相同重量为每个类标签意味着固定权重将用于训练迭代。然而,对于加权回归层,应该有一个不同的权向量训练一批。
我不确定如何使用在创建网络权值作为输入参数。以及如何跟踪体重指数每批培训。

接受的答案

MathWorks支万博1manbetx持团队
不幸的是MATLAB R2020a,请求与一个内置的工作流不可用的解决方案。
然而,下面是两个可能的解决方法:
1)“trainNetwork”的方法与一个定制的层
这种方法是基于使用一层属性“RegressionWeights”。工作流加权分类类似于下面的示例输出层但这里需要实现自定义回归输出层。
然而,这种方法可能很麻烦,因为它需要实现向后跟踪的索引功能和批次。这个方法不推荐。
2)“dlnetwork”方法与自定义训练循环
这种方法需要实现一个自定义训练循环使用“dlnetwork”。在这种情况下,不需要输出层,但您可以指定您想要使用的损失函数(如“模型预测函数”一节中解释下面的例子):
上面的例子使用了“crossentropy”损失。然而,您将需要实现自己的版本的加权均方误差(WMSE)损失函数和调用它,而不是“crossentropy”功能。注意,如果您想应用权重mini-batches,您需要提取数据的索引,您使用的是(在上面的例子中,这是通过索引变量“idx”在每一个时期),并使用它们作为WMSE函数的输入。
也请注意,这个不需要实现一个落后的方法,从计算将使用自动进行分化。
目前的均方误差(MSE)功能实现为:
函数X = mse (X, T, observationDim)
%均方误差的一半
N =大小(X, observationDim);
X =总和((型)。^ 2,“所有”)/ (2 * N);
结束
请为WMSE修改它。它将直接添加输入W(索引相同的大小mini-batch)和执行所需的计算。
这种方法唯一的缺点是,您将无法使用“trainNetwork”功能。相反,你将需要实现一个自定义训练循环可能有点麻烦。
介绍了“自定义训练循环”功能在一个工具为用户提供更大的灵活性,您应该能够实现所需的工作流使用上面的方法。

更多的答案(0)

s manbetx 845


释放

R2020a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!