文章目录

  • 一、pytorch安装
  • 二、pytorch基本使用方法
    • 2.1 创建空矩阵、随机矩阵、全零矩阵,全1矩阵(5行3列)
    • 2.2 矩阵基本计算(5行3列)
    • 2.3 矩阵索引、切片、变更维度
    • 2.4 与numpy互为转化
  • 三、autograd求导机制
  • 四、tensor数据形式
  • 五、线性回归实列
  • 总结

源码地址:https://gitee.com/leecj2020/python.git

一、pytorch安装

(1)使用anaconda进行安装
(2)CUP版本:pip install torch1.5.1+cpu torchvision0.4.1+cpu -f https:download.pytorch.org/whl/torch_stable.html
GUP版本:pip install torch1.5.1 torchvision0.4.1 -f https:download.pytorch.org/whl/torch_stable.html
安装完成后进行检验是否安装成功:

import torch
print(torch.__version__)

显示结果如下:

1.5.1+cpu

说明安装成功。

二、pytorch基本使用方法

2.1 创建空矩阵、随机矩阵、全零矩阵,全1矩阵(5行3列)

import torch
#创建一个空矩阵 5行3列
x=torch.empty(5,3)
print(x)
#创建随机矩阵 5行3列
x=torch.rand(5,3)
print(x)
#全零矩阵 5行3列
x=torch.zeros(5,3,dtype=torch.long)
print(x)
#全1矩阵 5行3列
x=torch.ones(5,3,dtype=torch.long)
print(x)

显示结果:

tensor([[-8.2241e+07,  9.4588e-43, -8.2233e+07],[ 9.4588e-43, -8.2241e+07,  9.4588e-43],[-8.2241e+07,  9.4588e-43, -8.2236e+07],[ 9.4588e-43, -8.2236e+07,  9.4588e-43],[-8.2232e+07,  9.4588e-43, -8.2232e+07]])
tensor([[0.4545, 0.8451, 0.4694],[0.7477, 0.6897, 0.3975],[0.2023, 0.0432, 0.2775],[0.0717, 0.9505, 0.4091],[0.8665, 0.1950, 0.0786]])
tensor([[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]])
tensor([[1, 1, 1],[1, 1, 1],[1, 1, 1],[1, 1, 1],[1, 1, 1]])

矩阵大小:

x=x.size()
print(x)

显示大小:

torch.Size([5, 3])

2.2 矩阵基本计算(5行3列)

基本的加减乘除以及求余

x=torch.ones(5,3)
y=torch.rand(5,3)
#加法
z=x+y
print(z)
#乘法
z=x*y
print(z)
#减法
z=x-y
print(z)
#除法
z=x/y
print(z)
#求余
z=x%y
print(z)

结果如下:

tensor([[1.4779, 1.2724, 1.3372],[1.8216, 1.6517, 1.4438],[1.5118, 1.2189, 1.5068],[1.8231, 1.4565, 1.4452],[1.9011, 1.3671, 1.3393]])
tensor([[0.4779, 0.2724, 0.3372],[0.8216, 0.6517, 0.4438],[0.5118, 0.2189, 0.5068],[0.8231, 0.4565, 0.4452],[0.9011, 0.3671, 0.3393]])
tensor([[0.5221, 0.7276, 0.6628],[0.1784, 0.3483, 0.5562],[0.4882, 0.7811, 0.4932],[0.1769, 0.5435, 0.5548],[0.0989, 0.6329, 0.6607]])
tensor([[2.0923, 3.6708, 2.9659],[1.2172, 1.5343, 2.2534],[1.9540, 4.5677, 1.9730],[1.2150, 2.1904, 2.2461],[1.1098, 2.7244, 2.9474]])
tensor([[0.0441, 0.1827, 0.3257],[0.1784, 0.3483, 0.1125],[0.4882, 0.1243, 0.4932],[0.1769, 0.0869, 0.1096],[0.0989, 0.2659, 0.3214]])

2.3 矩阵索引、切片、变更维度

x=torch.rand(5,3)
print(x)
#取所有行,第一列
x=x[:,1]
print(x)

显示结果如下:

tensor([[0.5284, 0.3407, 0.8779],[0.5620, 0.0784, 0.1151],[0.2972, 0.8439, 0.5714],[0.5928, 0.4121, 0.6912],[0.9760, 0.6034, 0.2936]])
tensor([0.3407, 0.0784, 0.8439, 0.4121, 0.6034])

view操作更改维度

x=torch.rand(4,4)
y=x.view(16)
z=x.view(-1,8)
print(x.size(),y.size(),z.size())

显示结果如下:

torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])

2.4 与numpy互为转化

tensor转为numpy

a=torch.ones(4)
b=a.numpy()
print(b)

显示结果:

[1. 1. 1. 1.]

numpy转为tensor

import numpy as np
a=np.ones(5)
b=torch.from_numpy(a)
print(b)

显示结果:

tensor([1., 1., 1., 1., 1.], dtype=torch.float64)

三、autograd求导机制

import  torch
#两种求导机制都可以
x=torch.randn(3,4,requires_grad=True)
print(x)
y=torch.randn(3,4)
y.requires_grad=True
print(y)

结果显示:

tensor([[ 1.0071, -0.0661,  0.3660,  0.7533],[ 1.6571,  0.9576, -0.4272,  0.9627],[ 0.3213, -0.5755, -0.2913, -0.5269]], requires_grad=True)
tensor([[-1.0492, -1.2499, -1.1889, -0.9373],[-0.6500, -2.3773,  1.0243,  1.3194],[ 0.7724,  0.0068, -1.8697, -1.1015]], requires_grad=True)
x=torch.randn(3,4,requires_grad=True)
b=torch.randn(3,4)
b.requires_grad=True
y=x+b
z=y.sum()
print(y)
print(z)

显示结果如下:

tensor([[-0.4620, -1.9991,  1.3496, -2.1888],[-0.1860, -0.2509,  1.0785,  1.6267],[-1.4464, -1.1622, -0.3944, -0.3752]], grad_fn=<AddBackward0>)
tensor(-4.4102, grad_fn=<SumBackward0>)
import torch
x=torch.rand(1)
b=torch.rand(1,requires_grad=True)
w=torch.rand(1,requires_grad=True)
y=w*x
z=y+b
print(y)
print(z)
#反向传播
z=z.backward(retain_graph=True)
w=w.grad
print(z)
print(w)

显示结果:

tensor([0.0044], grad_fn=<MulBackward0>)
tensor([0.6471], grad_fn=<AddBackward0>)
None
tensor([0.0056])

四、tensor数据形式

tensor常见的表现形式主要由以下几种
(1) scalar(常数标量)
(2)vertor(向量)
(3) matrix(矩阵)
(4)n-dimensional tensor(多维张量)
1.1 scalar
scalar通常表示的是一个数值

import torch
from torch import tensor
#scalar常数
x=tensor(32)
print(x)
print(x.dim())
print(x.item())

显示结果:

tensor(32)
0
32

1.2 vector(向量)
在深度学习中通常指特征,例如向量特征,一般为一维向量 v=[v1,v2,v3,v4…]

#vetor
v=tensor([1,2,3])
print(v)
print(v.dim())

结果显示:

tensor([1, 2, 3])
1

1.3 matrix(矩阵)
矩阵一般为多维矩阵。矩阵可以进行相关的加减乘除运算。

#matrix(矩阵)
m=tensor([[1,3,4],[4,5,6]])
print(m.dim())
print(m)

显示结果:

2
tensor([[1, 3, 4],[4, 5, 6]])

矩阵乘法

m=tensor([[1,4],[5,6]])
m=m.matmul(m)
print(m)
print(m.dim())

显示结果:

tensor([[21, 28],[35, 56]])
2

五、线性回归实列

(1)线性回归问题是一个不加激活函数的全连接网络

import torch
import torch.nn as nn
import numpy as np
'''
构建X和Y线性关系
'''
x_values=[i for i in range(11)]
print(x_values)
x_train=np.array(x_values,dtype=np.float32)
x_train=x_train.reshape(-1,1)
print(x_train,x_train.shape)y_values=[2*i for i in x_values]
print(y_values)
y_train=np.array(y_values,dtype=np.float32)
y_train=y_train.reshape(-1,1)
print(y_train,y_train.shape)class LinearRegressionmodel(nn.Module):def __init__(self,input_dim,out_dim):super(LinearRegressionmodel,self).__init__()self.linear=nn.Linear(input_dim,out_dim)def forward(self,x):out=self.linear(x)return out
input_dim=1
output_dim=1
model=LinearRegressionmodel(input_dim,output_dim)
print(model)
#指定参数和损失函数
epoches=1000
learning_rate=0.01
optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)
critetion=nn.MSELoss()
#训练模型
for epoch in range(epoches):epoch+=1#numpy数据转化成tensorinputs=torch.from_numpy(x_train)labels=torch.from_numpy(y_train)#梯度清零optimizer.zero_grad()#前向传播outputs=model(inputs)#计算损失函数loss=critetion(outputs,labels)#反向传播loss.backward()#更新迭代optimizer.step()if epoch%50==0:print('epoch{},loss{}'.format(epoch,loss.item()))

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[[ 0.][ 1.][ 2.][ 3.][ 4.][ 5.][ 6.][ 7.][ 8.][ 9.][10.]] (11, 1)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
[[ 0.][ 2.][ 4.][ 6.][ 8.][10.][12.][14.][16.][18.][20.]] (11, 1)
LinearRegressionmodel((linear): Linear(in_features=1, out_features=1, bias=True)
)
epoch50,loss0.02568797953426838
epoch100,loss0.014651433564722538
epoch150,loss0.008356631733477116
epoch200,loss0.0047662993893027306
epoch250,loss0.002718520350754261
epoch300,loss0.0015505383489653468
epoch350,loss0.0008843576651997864
epoch400,loss0.0005044140852987766
epoch450,loss0.0002876918588299304
epoch500,loss0.00016408613009843975
epoch550,loss9.359162504551932e-05
epoch600,loss5.337816764949821e-05
epoch650,loss3.044496406801045e-05
epoch700,loss1.736588092171587e-05
epoch750,loss9.903779755404685e-06
epoch800,loss5.6492954172426835e-06
epoch850,loss3.221818587917369e-06
epoch900,loss1.8374736328041763e-06
epoch950,loss1.0482865491212578e-06
epoch1000,loss5.978968147246633e-07

(2)模型预测结果

predicted=model(torch.from_numpy(x_train).requires_grad_()).data.numpy()
print(predicted)

结果:

[[1.0686959e-03][2.0009148e+00][4.0007610e+00][6.0006070e+00][8.0004530e+00][1.0000299e+01][1.2000146e+01][1.3999991e+01][1.5999838e+01][1.7999683e+01][1.9999529e+01]]

(3)模型保存与读取

torch.save(model.state_dict(),'model.pk')
model.load_state_dict(torch.load('model.pk'))

会在工作文件夹中生成model.pk文件

(4)GPU加速训练
上述所讲是在CPU中进行训练,随着模型数据的增加,在条件满足情况下可以采用GPU加速:
只需在上述代码中添加两行代码:

#GPU加速
device=torch.device("cuda:0" if torch.cuda.is_available() else"cpu")
model.to(device)

整个线性回归代码如下:

import torch
import torch.nn as nn
import numpy as np
'''
构建X和Y线性关系
'''
x_values=[i for i in range(11)]
x_train=np.array(x_values,dtype=np.float32)
x_train=x_train.reshape(-1,1)y_values=[2*i for i in x_values]
y_train=np.array(y_values,dtype=np.float32)
y_train=y_train.reshape(-1,1)class LinearRegressionmodel(nn.Module):def __init__(self,input_dim,out_dim):super(LinearRegressionmodel,self).__init__()self.linear=nn.Linear(input_dim,out_dim)def forward(self,x):out=self.linear(x)return out
input_dim=1
output_dim=1
model=LinearRegressionmodel(input_dim,output_dim)
#GPU加速
device=torch.device("cuda:0" if torch.cuda.is_available() else"cpu")
model.to(device)
print(model)
#指定参数和损失函数
epoches=1000
learning_rate=0.01
optimizer=torch.optim.SGD(model.parameters(),lr=learning_rate)
critetion=nn.MSELoss()
#训练模型
for epoch in range(epoches):epoch+=1#numpy数据转化成tensorinputs=torch.from_numpy(x_train)labels=torch.from_numpy(y_train)#梯度清零optimizer.zero_grad()#前向传播outputs=model(inputs)#计算损失函数loss=critetion(outputs,labels)#反向传播loss.backward()#更新迭代optimizer.step()if epoch%50==0:print('epoch{},loss{}'.format(epoch,loss.item()))predicted=model(torch.from_numpy(x_train).requires_grad_()).data.numpy()
print(predicted)torch.save(model.state_dict(),'model.pk')
model.load_state_dict(torch.load('model.pk'))

运行结果如下:

LinearRegressionmodel((linear): Linear(in_features=1, out_features=1, bias=True)
)
epoch50,loss4.058723425259814e-05
epoch100,loss2.314884477527812e-05
epoch150,loss1.3202897207520436e-05
epoch200,loss7.531667961302446e-06
epoch250,loss4.295398412068607e-06
epoch300,loss2.4500170638930285e-06
epoch350,loss1.3979347386339214e-06
epoch400,loss7.968073418851418e-07
epoch450,loss4.547039509361639e-07
epoch500,loss2.59516383493974e-07
epoch550,loss1.4786313329295808e-07
epoch600,loss8.432763110022279e-08
epoch650,loss4.8140577746380586e-08
epoch700,loss2.7421391379789384e-08
epoch750,loss1.5613899506661255e-08
epoch800,loss8.892371283764078e-09
epoch850,loss5.08907760377042e-09
epoch900,loss2.8978752730779433e-09
epoch950,loss1.6686744208627147e-09
epoch1000,loss9.6132890536893e-10
[[-5.7439949e-05][ 1.9999509e+00][ 3.9999592e+00][ 5.9999676e+00][ 7.9999762e+00][ 9.9999847e+00][ 1.1999992e+01][ 1.4000001e+01][ 1.6000010e+01][ 1.8000017e+01][ 2.0000027e+01]]

总结

通过对pytorch基础知识的理解和掌握,应用pytorch框架完成自制线性回归模型,掌握采用pytorch框架基本熟悉完成线性回归模型。

pytorch基础知识相关推荐

  1. 深入浅出Pytorch:02 PyTorch基础知识

    深入浅出Pytorch 02 PyTorch基础知识 内容属性:深度学习(实践)专题 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:叶志雄 航海士:李嘉骐.牛志康.刘洋.陈安东 开源内容:http ...

  2. 第02章 PyTorch基础知识

    文章目录 第02章 Pytorch基础知识 2.1 张量 2.2 自动求导 2.3 并行计算简介 2.3.1 为什么要做并行计算 2.3.2 CUDA是个啥 2.3.3 做并行的方法 补充:通过股票数 ...

  3. pytorch基础知识+构建LeNet对Cifar10进行训练+PyTorch-OpCounter统计模型大小和参数量+模型存储与调用

    整个环境的配置请参考我另一篇博客.ubuntu安装python3.5+pycharm+anaconda+opencv+docker+nvidia-docker+tensorflow+pytorch+C ...

  4. Pytorch基础知识整理(六)参数初始化

    参数初始化的目的是限定网络权重参数的初始分布,试图让权重参数更接近参数空间的最优解,从而加速训练.pytorch中网络默认初始化参数为随机均匀分布,设定额外的参数初始化并非总能加速训练. 1,模板 在 ...

  5. pytorch基础知识整理(五) 优化器

    深度学习网络必须通过优化器进行训练.在pytorch中相关代码位于torch.optim模块中. 1, 常规用法 optimizer = torch.optim.Adam(model.paramete ...

  6. pytorch基础知识整理(一)自动求导机制

    torch.autograd torch.autograd是pytorch最重要的组件,主要包括Variable类和Function类,Variable用来封装Tensor,是计算图上的节点,Func ...

  7. pytorch基础知识整理(二)数据加载

    pytorch数据加载组件位于torch.utils.data中. from torch.utils.data import DataLoader, Dataset, Sampler 1, torch ...

  8. 【PyTorch】PyTorch基础知识——自动求导

    1 Autograd简介 PyTorch 中,所有神经网络的核心是 autograd 包.autograd包为张量上的所有操作提供了自动求导机制.它是一个在运行时定义 ( define-by-run ...

  9. Pytorch基础知识(15)基于PyTorch的多标签图像分类

    早在 2012 年,神经网络就首次赢得了 ImageNet 大规模视觉识别挑战.Alex Krizhevsky,Ilya Sutskever 和 Geoffrey Hinton 彻底改变了图像分类领域 ...

  10. Pytorch基础知识(9)单目标分割

    目标分割是在图像中寻找目标物体边界的过程.目标分割有很多应用.例如,通过勾勒医学图像中的解剖对象,临床专家可以了解有关患者病情的有用信息. 根据图像中目标的数量,我们可以进行单目标或多目标分割任务.本 ...

最新文章

  1. SpringBoot中的线程池,你真的会用么?
  2. JavaScript函数大全
  3. 微信公众号开发之获取微信用户的openID
  4. Java中使用Jedis连接Redis对SortedSet进行排序操作
  5. Spring框架第一天知识总结
  6. python 数组写txt_python txt文件常用读写操作
  7. 后端:Java中的BigDecimal类你了解多少?
  8. (8)小白又如何?3分钟搞定一个 C# 知识点
  9. 增加 magento top_menu菜单
  10. 【Servlet笔记】Servlet入门
  11. [转载] python divmod()函数
  12. Android Studio 常用快捷键
  13. 【策划方案手段】为本单位精心打造一场专业电视台效果的知识竞赛,如何搞?如何花钱最少?
  14. 人工智能在电力行业的应用,电力人工智能技术
  15. python爬虫反虫之setcookie
  16. Veeam Backup Replication 8 迁移与实例恢复
  17. MeGUI中文版x64版本使用说明
  18. 万字案例 | 用Python建立客户流失预测模型(含源数据+代码)
  19. 创新之道,亚马逊创新之旅背后的故事
  20. iCop-Ratel执行run_local.sh文件报错

热门文章

  1. fullPage最后一屏自适应
  2. classNotFound异常的一个原因
  3. thinkphp5.0如何隐藏index.php入口文件
  4. PS把一张白纸里的黑色图形抠出来
  5. 启动Tomcat出现Using CATALINA_BASE
  6. 二级缓存:EHCache的使用
  7. 【系统结构】C++项目目录组织结构
  8. Vert.x 异步访问数据库 MySQL
  9. ros topic 命令
  10. Leetcode 233.数字1的个数