我的自定义损失函数是不是正确? (火炬)
Posted
技术标签:
【中文标题】我的自定义损失函数是不是正确? (火炬)【英文标题】:Is my custom loss function correct? (Pytorch)我的自定义损失函数是否正确? (火炬) 【发布时间】:2019-05-22 18:44:55 【问题描述】:我想使用 CNN + 分类器进行单词识别,其中输入是图像,输出是 10x37 矩阵。 10 是一个单词中的最大字符数,37 是我的示例中的字母数。
我为此模型编写了一个自定义损失函数,但我不确定它是否正确,因为我无法达到 80% 以上的测试准确度。
我正在使用 Pytorch
class CustomLoss(nn.Module):
def __init__(self):
super().__init__()
self.nllloss = nn.NLLLoss()
def forward(self, output, labels):
loss = 0
for i in range(labels.shape[1]):
loss += self.nllloss(output[:, i, :], labels[:, i])
loss /= labels.shape[1]
return loss
信息:
output.shape = (batch_size, 10, 37)
labels.shape = (batch_size, 10)
损失函数是否正确? 而我的分类问题叫什么(Multiple Multi class classification)?
【问题讨论】:
我试图找出模型中的错误。我想,也许错误出在我的损失函数中。问题是我的模型无法达到 80% 的测试准确率(我需要它至少达到 90%)。 【参考方案1】:损失函数是正确的。
问题出在包含我的训练数据的文件中。它没有正确创建。事实上,我翻转了图像中的尺寸(宽度和高度),因此我的训练集的结果对于我的 CNN 来说是无法辨认的。
现在我已经解决了这个问题,我已经达到了 99.8% 的测试准确率。
【讨论】:
以上是关于我的自定义损失函数是不是正确? (火炬)的主要内容,如果未能解决你的问题,请参考以下文章