torch.nn.MSELoss()及torch.optim.SGD的理解

一个简单的例子

import torch
import torch.nn as nn

x = torch.randn(10, 3)
y = torch.randn(10, 2)
# Build a fully connected layer.
linear = nn.Linear(3, 2)

# Build loss function and optimizer.
criterion = nn.MSELoss()

# 优化方法选用随机梯度下降,学习率为0.01
optimizer = torch.optim.SGD(linear.parameters(), lr=0.01)

# Forward pass.
pred = linear(x)

# Compute loss.
loss = criterion(pred, y)
print('loss:', loss.item())

# Backward pass.
loss.backward()
print('dL/dw: ', linear.weight.grad)
print('dL/db: ', linear.bias.grad)

# 1-step gradient descent.
optimizer.step()

# Print out the loss after 1-step gradient descent.
pred = linear(x)
loss = criterion(pred, y)
print(loss.item())

MSELoss的直观实现方法

# MSELoss()等同于:
def mseLoss(pred, y):
   return ((pred - y) ** 2).mean()

M S E = 1 m ∑ i = 1 M ( y i ^ − y i ) 2 MSE=\frac{1}{m}\sum_{i=1}^M(\hat{y_i}-y_i)^2 MSE=m1i=1M(yi^yi)2

SGD的直观实现方法

optimizer.step()
# optimizer.step()等同于:
linear.weight.data.sub_(0.01 * linear.weight.grad.data)
linear.bias.data.sub_(0.01 * linear.bias.grad.data)

其中,0.01lr, sub_()方法是原地减,就像t_()方法是原地转置一样
wb的初始值是随机选取的,然后按照
w 1 ← w 0 − η d L d w ∣ w = w 0 , b = b 0 w^1\leftarrow w^0-\eta\frac{dL}{dw}|_{w=w^0,b=b^0}\\ w1w0ηdwdLw=w0,b=b0

b 1 ← b 0 − η d L d b ∣ w = w 0 , b = b 0 b^1\leftarrow b^0-\eta\frac{dL}{db}|_{w=w^0,b=b^0} b1b0ηdbdLw=w0,b=b0

参考

pytorch-tutorials

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值