1.2 Pytorch基础——自动求导实例2

import torch
import torchvision
import torch.nn as nn
import numpy as np
import torchvision.transforms as transforms

# 创建张量
x = torch.randn(10, 3)  #10行3列  训练数据,每行一个样本
y = torch.randn(10, 2)  #10行2列  训练标签,每行一个样本

# 建立全连接层(FCN).
linear = nn.Linear(3, 2)
print ('w: ', linear.weight)
print ('b: ', linear.bias)

# 定义损失函数,并且选择优化算法
criterion = nn.MSELoss()   #使用均方误差作为损失函数   MSE = 1/N ∑(y-y_g)^2
optimizer = torch.optim.SGD(linear.parameters(), lr=0.01)

# 前向传播
pred = linear(x)

# 计算损失误差
loss = criterion(pred, y)
print('loss: ', loss.item())

# 后向传播
loss.backward()

# 输出梯度
print ('dL/dw: ', linear.weight.grad) 
print ('dL/db: ', linear.bias.grad)

# 执行1次优化,根据每个变量梯度更新一次变量值.
optimizer.step()

# 也可以使用下面两行代码手工进行变量更新,效果相同.
# linear.weight.data.sub_(0.01 * linear.weight.grad.data)
# linear.bias.data.sub_(0.01 * linear.bias.grad.data)

# 根据更新后的变量重新计算预测值和损失函数.
pred = linear(x)
loss = criterion(pred, y)
print('loss after 1 step optimization: ', loss.item())

代码解读:

  • 基本计算步骤:深度学习算法其计算流程与BP神经网络算法类似。输入变量为x,在每层定义节点连接参数w,然后对x进行计算预测输出 y_pred = f(x,w),其中w为所有节点参数。然后将预测的标签值y_pred与真实值y作比较,根据预先定义好的损失函数计算所有样本的损失,然后根据样本损失逆向传播,计算每个节点对应的导数,然后采用梯度下降算法(或其他类似的优化算法)对神经元上的所有节点更新参数,依照上述方式依次循环计算。算法的总体目标是不断优化节点参数,使得期望输出与实际输出尽可能小;
  • Pytorch由于使用的是动态图,因此可以方便的在训练过程中查看结果、进行调试;
  • #SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱彬 (Qian Bin)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值