【python】pytorch包(第一章)基础概念

环境配置

参考知乎文章

摘要Abstract

tensor = torch.tensor( 
	list_name, # 原数据名称
	requires_grad=true, #是否计入梯度计算
	device="cpu" # torch的运算使用”cpu“还是”cuda“(gpu)
)

具体解释见下述正文

一、概念引入:张量 Tensor

1> 定义

就是数据的意思
0 阶张量:0维数据;标量,常数
1 阶张量:1维数据;数组,向量
2 阶张量:2维数据;矩阵,2-D


N阶张量: N维张量

2> Pytorch中 张量的创建

将原数据转变为张量

import torch 
Tensor_1 = torch.tensor( 数据变量 )

使用torch的api创建tensor

  1. torch.empty( [a,b] )创建a行b列的空的tensor
  2. torch.ones( [a,b] )创建a行b列的 数值全为1 的tensor
  3. torch.zeros( [a,b] )创建a行b列的 数值全为0 的tensor
  4. torch.rand( [a,b] )创建a行b列的 数值为0~1随机值 的tensor
  5. torch.randint( low, high, [a,b] )创建a行b列的 数值为low~high之间的随机整数 的tensor

3> Pytorch中 张量的使用

① 获取tensor中的数据

a = torch.tensor( [1,2], dtype=torch.float32 )将tensor的内容赋值给变量a, 浮点型
x = a.item()获取 张量a 中的单个元素
x= a.max()获取 张量a 中元素的最大值
切片与调用: 与数组方法一致,如 a[1,2]表示 张量a的1行2列的值

② 获取tensor的基本属性

–查看tensor的阶数:a. dim( )获取 张量a 的阶数
–查看tensor的形状:a.size()获取 张量a 的形状
–查看tensor的数据类型:a.dtype获取 张量a 的数据类型
–查看tensor的数据内容:a.data只获取张量a的数据内容
–查看tensor的全部参数:a显示张量a的数据内容、全部参数设置等

③ 张量的形状修改

高维数据 摊开

new_a = a.view( [x,y] )将 张量a 的形状修改为 x行y列
类似于 numpy中的reshape函数,要求保证数据个数一致

二维矩阵转置:

new_a = a.t()将 张量a 进行矩阵转置

高维矩阵转置:

new_a = a.transpose(x,y)将a中的第x阶层和第y阶层视为二维矩阵,然后进行转置
new_a = a.permute(x,y,z)将张量a进行转置,转置规则如下:将原第x阶放在当前的第0阶,原第y阶放在当前的第1阶,原第z阶放在当前的第2阶

④ 数据类型转换

张量转化为numpy数据

a_data_byNumpy = a.detach.numpy()

⑤ 张量的计算

ans = torch.add(x,y)将张量x与张量y中的对应元素相加,生成新的张量ans
x.add_(y)将张量y与张量x的对应元素相加,新的张量赋值给x

⑥ 就地修改

下划线结尾的函数表示,直接将该变量原地修改,赋值给自己
如:x.add(y), a.ntranspose_(x,y) 会直接将x和a修改

4> GPU中 张量的使用

判断当前主机是否支持GPU来执行代码

torch.cuda.is_available()

适用于GPU中的张量创建

KEYdevice = torch.device("cuda")
KEYdevice = torch.device(
	"cuda" if torch.cuda.is_availabel() else "cpu" 
) 
#支持就用cuda,不支持就用cpu
torch.zeros([2,3],device = KEYdevice)

二、梯度下降与反向传播

1. 梯度

同高等数学的梯度概念,梯度即偏导数最大的方向

2. 反向传播

设:被拟合的关系函数为 y = f( x1,x2,x3… )
则: dy/dx 为正向导数,计算机猜测dy/dx的关系,从而根据猜测的dy/dx关系推测 y 的预测值 pred_y,根据pred_y 和 y的差距关系得 损失函数 Loss() 的值,以Loss的最值为目标方向,反向调整 dy/dx 的关系。
=>反向传播

3. tensor中的 requires_grad 参数

requires_grad = true 表示 该张量 被计入梯度的计算和考虑,
requires_grad = false 表示 该张量 不被计入梯度的计算和考虑

三、用Pytorch手写线性回归

本段用于理解机器学习的逻辑流程

import torch
#这是啥???
learning_rate=0.01

# 准备数据
x = torch.rand([500,1]) #500个数据,每个数据都是一维数据
y = x*3 + 0.8


# 设:被拟合曲线为: pred_y = w*x + b
w = torch.rand([1,1],requires_grad=True)
b = torch.tensor(0,requires_grad=True,dtype=torch.float32)

pred_y = torch.matmul(x,w) + b # torch.matmul(a,b) 表示a*b
# 设定损失函数
loss = (y-pred_y).pow(2).mean() #方差

# 反向传播
for i in range(5000):
    #调整requires_grad的参数
    if w.grad is not None:
        w.grad.data.zero_()
    if b.grad is not None:
        b.grad.data.zero_()
    #更新w和b
    loss.backward()#反向传播
    w.data = w.data - learning_rate* w.grad
    b.data = b.data - learning_rate* b.grad
    #更新损失函数 与  预测曲线
    pred_y = torch.matmul(x,w) + b 
    loss = (y-pred_y).pow(2).mean() #方差
    #调试
    if i%100 == 0 :
        print("w,b,loss:",w.item(),b.item(),loss.item())

五、实例化模型 nn.Module

定义:构建模型 与 调用模型

定义模型的底层逻辑

from torch import nn
class Lr(nn.Module):
	def __init__(self):#必须是两个下划线的长度!
		super(Lr,self).__init__() #继承父类init的参数
		self.linear = nn.Linear(1,1)
	def forward(self,x):
		out = self.linear(x)
		return out

构建模型(模型、loss函数、优化器的实例化)

调用模型基底、设定Loss函数、设定优化器

#模型调用
model = Lr()
citerion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(),lr=1e-3)	

训练模型(对实例化的模型进行训练)

#训练模型
training_times = 30000
for i in range(training_times):
	out = model(x) #模型当前状态的预测值
	loss = citeration(y,out) #损失值
	optimizer.zero_grad() #梯度归零
	loss.backward() #计算梯度
	optimizer.step() #更新梯度
	if (i-1)%20 == 0:
		print('Epoch[{}/{}],loss:{:.6f}'.format(i,training_times,loss.data)

预测与评估

model.eval() #使模型进入评估模式/预测模式
#该模式下,输入的新数据不会让模型受到新的训练
pred_y = model(x) #输入自变量x,获得预测值pred_y
pred_y = pred_y.data.numpy() #转darray类型

#可将 (x,y)点集以及(pred_y,x)预测曲线进行绘图,可视化数据拟合情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GoesM

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

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

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

打赏作者

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

抵扣说明:

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

余额充值