PyTorch中的学习率衰减
为什么要学习率衰减🤔 PyTorch中的学习率并不总是一成不变的,而是可以随着epoch或者迭代次数的变化阅读更多PyTorch中的学习率衰减[…]
为什么要学习率衰减🤔 PyTorch中的学习率并不总是一成不变的,而是可以随着epoch或者迭代次数的变化阅读更多PyTorch中的学习率衰减[…]
TensorFlow与PyTorch的区别在网上有很多的分析,主要可以总结为以下几点: 动态与静态 P阅读更多TensorFlow与PyTorch:区别及函数习惯的对比[…]
训练神经网络的各个步骤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import torch import torch.nn as nn import torch.nn.functional as F # 定义网络 class Net(nn.Module): def __init__(self): super(Net, self).__init__() # 1 input image channel, 6 output channels, 3x3 square convolution # kernel self.conv1 = nn.Conv2d(1, 6, 3) self.conv2 = nn.Conv2d(6, 16, 3) # an affine operation: y = Wx + b self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) # 前向传播 def forward(self, x): # Max pooling over a (2, 2) window x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2)) # If the size is a square you can only specify a single number x = F.max_pool2d(F.relu(self.conv2(x)), 2) x = x.view(-1, self.num_flat_features(x)) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x def num_flat_features(self, x): size = x.size()[1:] # all dimensions except the batch dimension num_features = 1 for s in size: num_features *= s return num_features net = Net() print(net) # 显示参数的个数 params = list(net.parameters()) print(len(params)) print(params[0].size()) # conv1's .weight # 正向传播 input = torch.randn(1, 1, 32, 32) out = net(input) print(out) # 损失函数 output = net(input) target = torch.randn(10) # a dummy target, for example target = target.view(1, -1) # make it the same shape as output criterion = nn.MSELoss() loss = criterion(output, target) print(loss) # 反向传播 net.zero_grad() # zeroes the gradient buffers of all parameters loss.backward() ''' 更新权重 weight = weight - learning_rate * gradient ''' learning_rate = 0.01 for f in net.parameters(): f.data.sub_(f.grad.data * learning_rate) # 使用优化器 import torch.optim as optim # create your optimizer optimizer = optim.SGD(net.parameters(), lr=0.01) # in your training loop: optimizer.zero_grad() # zero the gradient buffers output = net(input) loss = criterion(output, target) loss.backward() optimizer.step() # Does the update |
识别MNIST的一个阅读更多PyTorch – 神经网络[…]
自动求梯度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import torch from torch.autograd import Variable N, D = 3, 4 x = Variable(torch.randn(N, D)), requires_grad=True) y = Variable(torch.randn(N, D)), requires_grad=True) z = Variable(torch.randn(N, D)), requires_grad=True) a = x * y b = a + z c = torch.sum(b) c.backward() print(x.grad.data) # 求梯度 print(y.grad.data) print(z.grad.data) |
安装PyTorch 官网的安装方式 https://pytorch.org/get-started/local阅读更多PyTorch – 安装和入门[…]