У меня есть сверточная нейронная сеть, выход которой представляет собой 4-канальное 2D-изображение. Я хочу применить сигмовидную функцию активации к первым двум каналам, а затем использовать BCECriterion для вычисления потери полученных изображений с исходными изображениями. Я хочу применить функцию квадратичных потерь к последним двум каналам и, наконец, вычислить градиенты и выполнить обратное распространение. Я также хотел бы умножить стоимость квадрата потерь для каждого из двух последних каналов на желаемый скаляр.
Таким образом, стоимость имеет следующий вид:
cost = crossEntropyCh[{1, 2}] + l1 * squaredLossCh_3 + l2 * squaredLossCh_4
Я думаю об этом следующим образом:
criterion1 = nn.BCECriterion()
criterion2 = nn.MSECriterion()
error = criterion1:forward(model.output[{{}, {1, 2}}], groundTruth1) + l1 * criterion2:forward(model.output[{{}, {3}}], groundTruth2) + l2 * criterion2:forward(model.output[{{}, {4}}], groundTruth3)
Однако я не думаю, что это правильный способ сделать это, поскольку мне придется выполнить 3 отдельных шага обратного распространения, по одному для каждого условия стоимости. Поэтому мне интересно, может ли кто-нибудь дать мне лучшее решение для этого в Torch?