Pytorch的一些常见的用法

pytorch的一些操作和numpy比较类似,对于熟悉numpy的人比较友好,下面总结一些用法:

  • Tensor (张量) ,有32 位浮点型torch.FloatTensor 、64 位浮点型torch.DoubleTensor 、16 位整型torch.Shor tTensor 、32 位整型torch.lntTensor 和64 位整型torch.LongTensor。
    针对上面的内容,写几个常见的例子:
# 定义一个三行两列给定元素的矩阵
a = torch. Tensor ([[2 , 3), [4 , 8), [7 , 9]])
b = torch. LongTensor ([[2 , 3] [4 , 8], [7 , 911])
c = torch.zeros((3 , 2))
d = torch.randn((3 , 2))# tensor和numpy之间相互转换
numpy_b = b.numpy()  # 转成numpy
torch.from_numpy(e)  # 转成tensor# 判断是否支持GPU加速
torch.cuda.is available()
  • Variable (变量)

Variable 提供了自动求导的功能,Variable 会被放入一个计算图中,然后进行前向传播,反向传播,自动求导,需要引入 torch.autograd.Variable,如想让一个tensor 变成Variable ,只需要Variable(a) 就可以了,Variable 有三个比较重要的组成属性: data , grad 和grad_fn通过data 可以取出Variable 里面的tensor 数值, grad_fn 表/j,的是得到这个Variable 的操作,比如通过加减还是乘除来得到的,最后grad 是这个Variabel 的反向传播梯度,下面给出一个例子:

X = Variable(torch.Tensor ([1]) , requìres_grad=True)
W = Variable(torch.Tensor([2]) , requires_grad=True)
b = Variable(torch.Tensor([3]) , requires_grad=True)y = w * x + b    # 构建一张计算图y.backward()  # 自动求导,这是标量求导所以可以直接这么写
# 下面计算梯度
print(x.grad)  # y.grad = 2
print(w.grad)  # w.grad = 1
print (b.grad) # b .grad =1
# 如果是矩阵求导
x = torch.randn(3)
x = Variable(x, requires_grad=True)
y = 2 * x
print(y)
y.backward(torch.FloatTensor([1, 0.1, 0.01]))
print(x. grad)

这里需要说明的是 [1, 0.1, 0.01] 这三个参数是他们得到的原本的梯度再乘上[1, 0.1, 0.01],结果是tensor([2.0000, 0.2000, 0.0200])


下面给一个用torch实现多项式回归的例子(本段代码转载自 原文):

import torch
import numpy as np
from torch import nn
from torch.autograd import Variable
from torch import optim
plt.rcParams['font.sans-serif'] = ['SimHei']  # 这里两行导入字体
plt.rcParams['axes.unicode_minus'] = Falsedef make_feature(x):x = x.unsqueeze(1)  # unsqueeze(1) 是将原来的tensor 大小由3 变成(3 , 1),return torch.cat([x**i for i in range(1,4)], 1)w_target = torch.FloatTensor([0.5,3,2.4]).unsqueeze(1)
b_target = torch.FloatTensor([0.9])def f(x):return x.mm(w_target)+b_target[0]def get_batch(batch_size=32):random = torch.randn(batch_size)  x = make_feature(random)y = f(x)if torch.cuda.is_available():return Variable(x).cuda(), Variable(y).cuda()else:return Variable(x), Variable(y)class poly_model(nn.Module):def __init__(self):super(poly_model,self).__init__();self.poly = nn.Linear(3,1)def forward(self, x):out = self.poly(x)return outif torch.cuda.is_available():model = poly_model().cuda()
else:model = poly_model()criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(),lr=1e-3)epoch = 0
while True:batch_x, batch_y = get_batch()# 向前传播output = model(batch_x)loss = criterion(output, batch_y)print_loss = loss.item()
# 重新设置梯度optimizer.zero_grad()loss.backward()  # 反向传播
# 调整参数,优化optimizer.step()epoch+= 1if print_loss < 1e-3:breakprint("epoches : {}".format(epoch))
print("==> Learned function: y = {:.2f} + {:.2f}*x + {:.2f}*x^2 + {:.2f}*x^3".format(model.poly.bias[0], model.poly.weight[0][0],model.poly.weight[0][1],model.poly.weight[0][2]))
print("==> Actual function: y = {:.2f} + {:.2f}*x + {:.2f}*x^2 + {:.2f}*x^3".format(b_target[0], w_target[0][0],w_target[1][0], w_target[2][0]))
# 下面是可视化部分predict = model(batch_x)
x = batch_x.cpu().numpy()[:, 0]  # x~1 x~2 x~3
plt.plot(x, batch_y.cpu().numpy(), 'ro')
plt.title(label='可视化真实数据')
plt.show()
# 2.可视化拟合函数
predict = predict.data.cpu().numpy()
plt.plot(x, predict, 'b')
plt.plot(x, batch_y.cpu().numpy(), 'ro')
plt.title(label='可视化拟合函数')
plt.show()
# 3.可视化训练次数和损失
plt.plot(ctn, lo)
plt.xlabel('训练次数')
plt.ylabel('损失值')
plt.title(label='训练次数与损失关系')
plt.show()

结果:



torch实现logistic回归

import torch
from torch import nn
from torch.autograd import Variable#构造数据
n_data = torch.ones(100,2)
x0 = torch.normal(2*n_data)
y0 = torch.zeros(100)
x1 = torch.normal(-2*n_data)
y1 = torch.ones(100)x = torch.cat((x0,x1)).type(torch.FloatTensor)
y = torch.cat((y0,y1)).type(torch.FloatTensor)#定义LogisticRegression
class LogisticRegression(nn.Module):def __init__(self):super(LogisticRegression,self).__init__()self.lr = nn.Linear(2,1)self.sm = nn.Sigmoid()def forward(self,x):x = self.lr(x)x = self.sm(x)return xlogistic_model = LogisticRegression()
criterion = nn.BCELoss()  # 这里是二分类问题的损失函数
optimizer = torch.optim.SGD(logistic_model.parameters(),lr = 1e-3,momentum=0.9) # 随机梯度下降#训练过程
for epoch in range(10000):x_data = Variable(x)y_data = Variable(y)out = logistic_model(x_data)loss = criterion(out,y_data)print_loss = loss.data.item()# 判断输出的结果如果大于0.5就=1,小于0.5就=0,通过这个计算这个模型的准确率mask = out.ge(0.5).float()correct = (mask == y_data).sum()acc = correct.item()/x_data.size(0)optimizer.zero_grad()loss.backward()optimizer.step()if (epoch+1)%20 == 0:print('*'*10)print('epoch {}'.format(epoch+1))print('loss is {:.4f}'.format(print_loss))print('acc is {:.4f}'.format(acc))#参数输出
w0,w1 = logistic_model.lr.weight[0]
w0 = float(w0.item())
w1 = float(w1.item())
b = float(logistic_model.lr.bias.item())print('w0:{}\n'.format(w0),'w1:{}\n'.format(w1),'b:{0}'.format(b))

Pytorch入门-1相关推荐

  1. PyTorch | (2)PyTorch 入门-张量

    PyTorch | (1)初识PyTorch PyTorch | (2)PyTorch 入门-张量 PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可 ...

  2. PyTorch入门v2.pptx

    给本科生入门深度学习的PyTorch使用总结,图比较多. 若需要原版ppt,关注公众号,回复"pytorch入门"可以获取下载地址. 若需要原版ppt,关注公众号,回复" ...

  3. PyTorch 入门实战

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36556893/article/ ...

  4. numpy pytorch 接口对应_拆书分享篇深度学习框架PyTorch入门与实践

    <<深度学习框架PyTorch入门与实践>>读书笔记 <深度学习框架PyTorch入门与实践>读后感 小作者:马苗苗  读完<<深度学习框架PyTorc ...

  5. [pytorch] Pytorch入门

    Pytorch入门 简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记. 直接从例子开始学,基础知识咱已经看了很多论文了... import t ...

  6. pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)

    点击关注我哦 autograd和动态计算图可以说是pytorch中非常核心的部分,我们在之前的文章中提到:autograd其实就是反向求偏导的过程,而在求偏导的过程中,链式求导法则和雅克比矩阵是其实现 ...

  7. 基于pytorch实现图像分类——理解自动求导、计算图、静态图、动态图、pytorch入门

    1. pytorch入门 什么是PYTORCH? 这是一个基于Python的科学计算软件包,针对两组受众: 替代NumPy以使用GPU的功能 提供最大灵活性和速度的深度学习研究平台 1.1 开发环境 ...

  8. pytorch 入门学习多分类问题-9

    pytorch 入门学习多分类问题 运行结果 [1, 300] loss: 2.287[1, 600] loss: 2.137[1, 900] loss: 1.192 Accuracy on test ...

  9. pytorch 入门学习加载数据集-8

    pytorch 入门学习加载数据集 import torch import numpy as np import torchvision import numpy as np from torch.u ...

  10. pytorch 入门学习处理多维特征输入-7

    pytorch 入门学习处理多维特征输入 处理多维特征输入 import torch import numpy as np import torchvision import numpy as np ...

最新文章

  1. 算法练习day7——190325(比较器、不基于比较的排序、maxGap、数组实现栈和队列、minStack)
  2. r语言默认工作目录document_使用 Docker 和 Nginx 实现简单目录索引服务
  3. php odbc 分页,用php实现odbc数据分页显示一例_php技巧
  4. 河南省高考让不让带计算机,河南高考2018严禁携带的东西有哪些?这种衣服不能进考场...
  5. JavaTPoint 数据科学和人工智能中文教程【翻译完成】
  6. 电脑计算机无法安3.5,Windows无法安装以下功能:.NET Framework 3.5(包括 .NET 2.0 和 3.0)解决方法...
  7. 古希腊神话,古罗马神话和北欧神话
  8. plcst语言编程教程_这样高效学PLC编程,掌握ST语言运算符号编写控制程序无压力...
  9. 网易MuMu模拟器安装及配置
  10. macd是什么意思?散户股民如何使用MACD应对证券牛市市场
  11. 电脑重启f12怎么处理_电脑开机蓝屏按F10F11F12才能打开.怎么办?
  12. ps快捷键 拿走不谢*小Lemon送你们的
  13. free掉结点一定会造成断链吗?
  14. 错误(mailed 59 bytes of output but got status 0x004b#012)
  15. WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
  16. xml错误The validator XML Schema Validator is a delegating validator but no delegat
  17. 杭电 2016 计算机组成原理,杭电计算机组成原理寄存器堆设计实验4.doc
  18. delphi function 与 procedure
  19. java web前端面试题_web前端笔试试题(答案)
  20. 给自己作的“程序员键盘”,DIY可编程机械键盘

热门文章

  1. GL-关于intercopany 和intracompany 的个人理解
  2. 实验8 SQLite数据库操作
  3. 2.请求安全-- MD5的必要性以及实际应用场景
  4. 4.云计算和大数据时代网络揭秘-安全的网络通道-网络加密
  5. Objective C的那点小语法
  6. how to add user into sudoers file?
  7. iMindMate- A new mind mapping software.
  8. nginx ssl 双向认证
  9. switch分解试验部分-LAB4:VLAN VTP设置
  10. 获得1.5亿区块链投资后,矩阵元怎么做区块链?