# Pytorch常用損失函數 model = nn.Sigmoid() # 優化器設置 ,並傳入模型參數和相應的學習率 optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) # 常用損失函數 # L1Loss(L1 norm) 創建一個criterion計算input x和target y的每個元素的平均絕對誤差(mean absolute error (MAE)) criterion = nn.L1Loss() input = torch.randn(1, 2, requires_grad=True)#tensor([[-0.0625, -2.1603]], requires_grad=True) target = torch.randn(1, 2)#tensor([[0.6789, 0.9831]]) loss = criterion(input, target)#tensor(1.9424, grad_fn=<L1LossBackward>) # output = (|-0.0625-0.6789| + |-2.1603-0.9831|) / 2 = 1.9424 # 反向傳播與優化 # 清空上一步的殘余更新參數值 optimizer.zero_grad() # 反向傳播 loss.backward() # 將參數更新值施加到model的parameters上 optimizer.step() # MSELoss(L2 norm) 創建一個criterion計算input x和target y的每個元素的均方誤差(mean absolute error (MAE)) criterion = nn.MSELoss() input = torch.randn(1, 2, requires_grad=True)#tensor([[-1.4445, -2.4888]], requires_grad=True) target = torch.randn(1, 2)#tensor([[ 0.7117, -0.1200]]) loss = criterion(input, target)#tensor(5.1303, grad_fn=<MseLossBackward>) # output = ( (-1.4445-0.7117)2 + ( -2.4888 + 0.1200 )2 ) / 2 = 5.1303 # 反向傳播與優化 # 清空上一步的殘余更新參數值 optimizer.zero_grad() # 反向傳播 loss.backward() # 將參數更新值施加到model的parameters上 optimizer.step() # SmoothL1Loss 創建一個criterion,如果絕對元素誤差低於1,則使用平方項,否則使用L1項。與MSELoss相比,它對異常值的敏感度較低; 在某些情況下,它可以防止梯度的爆炸式增長 criterion = nn.SmoothL1Loss() input = torch.randn([2, 3, 32, 32], requires_grad=True) target = torch.randn([2, 3, 32, 32]) loss = criterion(input, target) # 反向傳播與優化 # 清空上一步的殘余更新參數值 optimizer.zero_grad() # 反向傳播 loss.backward() # 將參數更新值施加到model的parameters上 optimizer.step() # torch.randn 與 torch.rand # 標准正態分布 返回一個張量,包含了從標准正態分布(均值為0,方差為1,即高斯白噪聲)中抽取的一組隨機數。 x1 = torch.randn([2, 3, 32, 32]) # 均勻分布 返回一個張量,包含了從區間[0, 1)的均勻分布中抽取的一組隨機數。 x2 = torch.rand([2, 3, 32, 32])
