Pytorch(延缓更新)

一、机器学习基础——简单线性回归

$$ f(x)=w*x+b $$

1.损失函数

使用均方误差作为损失函数,我们需要找到一个w和b使得损失函数最小。

2.梯度下降算法

求解最小的w和b

二、数据集的读取和观察

1.数据集的读取

import pandas as pd
data = pd.read_csv("")    # 读取指定的csv文件
data.info()             # 返回data的详细情况

2.数据的绘图

import matplotlib.pyplot as plt
plt.scatter(data.Education,data.Income)   #绘制散点图,绘制data.Education  和 data.Income 间的关系
plt.xlabel("")   # 设定x坐标的名称
plt.show()    #pycharm 使用需要

三、初始化模型、损失函数和优化方法

1.数据预处理

# 数据类型的转化
# 由于pandas读取后的数据data.Education 数据类型为numpy.ndarray,所以我们需要把他转化为tensor
X = torch.from_numpy(data.Education.values.reshape(-1,1).astype(np.float32))  
#其中astype可以理解为强制类型转换,reshape第一个参数为自动计算,第二个为每一个

对于pandas读取的每一个data数据类型为pandas.core.frame.DataFrame,data.attr 数据类型为pandas.core.series.Series,data.attr.values为array,所以我们需要torch.from_numpy将array转化为tensor

2.模型的创建

model = nn.Linear(输入长度,输出长度)  # out = w@input + b = model(input)
loss_fn = nn.MSEloss()     # 计算损失函数的方法
opt = torch.optim.SGD(model.parameters(),lr=0.0001)      # 随机梯度下降梯度下降优化算法,分别为优化参数和学习速率

四、训练模型和结果可视化

for epoch in range(5000):   #对所有数据训练5000次
    for x,y in zip(X,Y):
        y_pred = model(x)          # y的预测值
        loss = loss_fn(y,y_pred)   # y和预测值间的均方误差
        opt.zero_grade()           # 清零所有的梯度
        loss.backward()            # 反向传播求解梯度
        opt.step()                 # 模型优化
model.weight   //返回权重
model.bias   // 返回b的值

五、tensor和基本类型

1. tensor 的创建

import torch
x = torch.rand(2,3)  # 生成0-1间的随机矩阵
x = torch.randn(3,4) # 生成正态分布的随机数
x = torch.zeros(2,3)
x = torch.ones(2,3,4)   # 三维矩阵
x.size(0)   # 返回0维大小,shape需要切片
x.shape = x.size()

2. 基本数据类型

torch.float32
torch.float64
torch.int32
torch.int16
torch.int64
x = torch.tensor([6,2],dtype=torch.float32)# 例子

3. 类型转化

x.type(torch.int64)  #转化为int64的数据类型
import numpy as np   # 与ndarray转化
a = np.radom.randn(2,3)
x1 = torch.from_numpy(a)
x2 = x1.numpy()   # tensor和ndarray转化

六、张量的运算

1.基本运算

x1 =torch.rand(2,3)
x2 =torch.rand(2,3)
x1 + x2   # 相加
x1 + 3
x1.add(x2)  # 原有的没改变
x1.add_(x2) # 原有的改变
x1.mean()   # 均值
x1.sum()    # 总值
x = x1.sum().item()   # x1.sum() 返回值为一个tensor

2.变形

x1.view(3,2)   # 变形
x1.view(-1,1)  #第二维为1,第一维自动计算 shape(n,1)

3.自动微分

将torch.Tensor属性.requires_grad 设置为true,pytorch将会记录所有的张量操作,完成计算后使用.backward() 并计算所有的梯度,梯度就会累加到.grad属性上面

Tensor包含data,grad,grad_fn

x = torch.ones(2,2,requires_grad=True)  #必须要requires_grad = True
y = x+2
z = y*y*y +3
out = z.mean()
out.backward()   # x.grad = d(out)/dx
with torch.no_grad():
    # 这里的代码不会被梯度跟踪
y = x.detach()  # 这里的的y就不会被跟踪


标签:暂无标签
版权属于:Jtripper 所有,转载请注明文章来源。

本文链接: https://www.jtripperbacaf.com/index.php/archives/31/

赞 (0)

评论区

发表评论

7+25=?

暂无评论,要不来一发?

回到顶部