当前位置:   article > 正文

pytorch简单新型模型测试参数

pytorch简单新型模型测试参数
  1. import torch
  2. from torch.nn import Conv2d,MaxPool2d,Sequential,Flatten,Linear
  3. import torchvision
  4. import torch.optim.optimizer
  5. from torch.utils.data import DataLoader,dataset
  6. from torch import nn
  7. import torch.optim.optimizer
  8. # 建模
  9. model = nn.Linear(2,1)
  10. #损失
  11. loss = nn.MSELoss()
  12. #优化
  13. optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.8)
  14. #定义输入和标签
  15. input = torch.tensor([[2.,7.],[1.,6.]])
  16. y = torch.tensor([[1.],[3.]])
  17. #输入模型数据
  18. out= model(input)
  19. print(out)
  20. #计算损失
  21. loss_fn = loss(y,out)
  22. print(loss_fn.item())
  23. #梯度清零
  24. optimizer.zero_grad()
  25. #反向传播
  26. loss_fn.backward()
  27. print(loss_fn.item())
  28. #更新梯度
  29. optimizer.step()
  30. # 再次进行前向传播和反向传播
  31. x = torch.tensor([[5., 6.], [7., 8.]])
  32. y_true = torch.tensor([[11.], [15.]])
  33. y_pred = model(x)
  34. loss = loss_fn(y_pred, y_true)
  35. optimizer.zero_grad()
  36. loss.backward()
  37. optimizer.step()
  38. '''
  39. optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9)
  40. optimizer = optim.Adam([var1, var2], lr = 0.0001)
  41. # SGD 就是随机梯度下降
  42. opt_SGD = torch.optim.SGD(net_SGD.parameters(), lr=LR)
  43. # momentum 动量加速,在SGD函数里指定momentum的值即可
  44. opt_Momentum = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8)
  45. # RMSprop 指定参数alpha
  46. opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9)
  47. # Adam 参数betas=(0.9, 0.99)
  48. opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))
  49. 计算损失
  50. w=w−l_r*dw
  51. b=b-l_r*db
  52. dw和db分别是权重和偏置的梯度,learning_rate是学习率,控制每次更新的步长
  53. '''
  54. def hook():
  55. # 定义模型参数
  56. w = torch.tensor([1.0], requires_grad=True) #requires_grad=True 的作用是让 backward 可以追踪这个参数并且计算它的梯度。
  57. b = torch.tensor([0.0], requires_grad=True) ##requires_grad=True 的作用是让 backward 可以追踪这个参数并且计算它的梯度。
  58. # 定义输入和目标输出
  59. x = torch.tensor([2.0])
  60. y_true = torch.tensor([4.0])
  61. # 定义损失函数
  62. loss_fn = torch.nn.MSELoss()
  63. # 定义优化器
  64. optimizer = torch.optim.SGD([w, b], lr=0.1)
  65. # 迭代训练
  66. for i in range(100):
  67. # 前向传播
  68. y_pred = w * x + b
  69. loss = loss_fn(y_pred, y_true)
  70. # 反向传播
  71. optimizer.zero_grad()
  72. loss.backward()
  73. # 提取梯度 我们使用loss.backward()计算损失函数对于模型参数的梯度,并将其保存在相应的张量的.grad属性中
  74. dw = w.grad
  75. db = b.grad
  76. print("dw".format(dw))
  77. print("db".format(db))
  78. # 更新模型参数
  79. optimizer.step()
  80. # 输出模型参数
  81. print("w = ", w)
  82. print("b = ", b)

记录一些api:

表3-1: 常见新建tensor的方法

函数功能
Tensor(*sizes)基础构造函数
tensor(data,)类似np.array的构造函数
ones(*sizes)全1Tensor
zeros(*sizes)全0Tensor
eye(*sizes)对角线为1,其他为0
arange(s,e,step从s到e,步长为step
linspace(s,e,steps)从s到e,均匀切分成steps份
rand/randn(*sizes)均匀/标准分布
normal(mean,std)/uniform(from,to)正态分布/均匀分布
randperm(m)随机排列

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/149423
推荐阅读
相关标签
  

闽ICP备14008679号