最近开始写了自己项目的第一个pytoch神经网络,其实官方的文档和案例已经写的很不错了,但是还是有很多的坑,尤其是在数据集以及损失函数方面有问题,记录一下(顺序乱,请酌情使用Ctrl+F):
1、Loss在使用之前要实例化。
这个其实很容易理解,无论是我们自己定义loss类还是直接使用torch的内置损失函数,都是类的方法调用,因此在使用之前要进行实例化
这里贴出我使用的损失函数类,用于颜色恒常性研究的(Color constancy),也希望大佬们指点一下看看有没有写错,使用的是常用的角度误差函数(训练的时候loss有的时候出现nan,现在还不确定是不是损失函数写错了,过后更新)
#定义损失函数
class angleloss(nn.Module):
def __init__(self):
super().__init__()
def forward(self,w1,w2):
z = torch.mul(w1,w2)
z = torch.sum(z,dim = 2)
m1 = torch.pow(w1,2)
m1 = torch.sum(m1, dim = 2)
m1 = torch.pow(m1,0.5)
m2 = torch.pow(w2,2)
m2 = torch.sum(m2, dim = 2)
m2 = torch.pow(m2,0.5)
m = torch.mul(m1,m2)
out = torch.div(z,m)
out = torch.acos(out)