IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Pytorch实现线性模型 -> 正文阅读

[人工智能]Pytorch实现线性模型

1、模型训练步骤

(1)准备数据集

(2)设计模型,计算y_pred

(3)计算loss

(4)训练周期

? ①前馈②反馈(梯度)③更新权重

2、知识点

(1)线性单元(Linear Unit)

①线性单元就是计算一次y_pred,也就是一个感知机。

在这里插入图片描述

②在实际的计算中,y_pred与X都是向量,而在pytorch里面使用Tensor进行向量的存储,因此在进行数据准备时需要将训练数据存储为Tensor。

注:例如:w矩阵在扩充之前是1*1,那么在实际的计算中,需要将w扩充为31矩阵
在这里插入图片描述

1632912136360

③w需要根据z与x来确定形状,而b需要根据x来确定形状。
根 据 线 性 单 元 得 到 : z = w ? x + b , 根据线性单元得到:z=w*x+b, 线z=w?x+b

(2)Loss计算

①loss计算公式
L o s s = ∑ L o s s i Loss = ∑Loss^i Loss=Lossi
注:为了使用pytorch使用backword()计算反馈,因此需要将Loss转化为标量

(3)tensor.nn.类的使用

定义自己的网络,需要继承Tensor.nn,Moudle类,并实现forward方法

tensor.nn,Moudle()类会自动构建计算图

构建模型:

A、继承torch.nn.Moudle接口

B、定义__init__()构造函数,在实例化对象的时候就会启用

C、构造线性模型对象。【其中torch.nn.Linear是一个线性模型类,其内部实现了__call()__函数,因此在调用的时候可以传参数weight、bias】

tensor.nn,Linear线性模型

A、tensor.nn.Linear(in_features, out_features, bias=True)

B、in_features:表示输入的样本、out_features:表示输出的样本

class LinearMoudle(torch.nn.Module):
    def __init__(self):
        super(LinearMoudle, self).__init__()
        self.linear = torch.nn.Linear(1, 1)

③损失函数和优化器

#定义损失函数 torch.nn.MSELoss(size_average=True, reduce=True)
# ——> size_average是否求均值、reduce是否降维求和
#SGD——optim里面的一个随机梯度下降算法
#torch.optim.SGD(params【权重参数】, lr=【学习率】, momentum=0【冲量】)
# moudle.parameters()——检查Linear里成员的权重
riterion = torch.nn.MSELoss(size_average=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

3、代码是实现

import torch

# 数据集加载
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

# LinearMoudle类的创建,并继承Moudle
class LinearMoudle(torch.nn.Module):
    # 继承类
    def __init__(self):
        # 继承
        super(LinearMoudle, self).__init__()
        # 继承linear
        # torch.nn.Linear(weight, bits)用于构造对象
        # 在类里面定义__call__函数可以使用里面的参数
        self.linear = torch.nn.Linear(1, 1)

    # 定义前馈函数
    def forward(self, x):
        # 使用torch里面的线性模型计算预测值
        y_pred = self.linear(x)
        return y_pred

# 构造对象
model = LinearMoudle()

# 定义损失函数 torch.nn.MSELoss(size_average=True, reduce=True)
# ——> 是否求均值、是否降维求和
criterion = torch.nn.MSELoss(size_average=False)

# 定义优化器
# torch.optim.SGD(params【权重参数】, lr=【学习率】, momentum=0【冲量】)
# moudle.parameters()——检查Linear里成员的权重
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 训练
for epoch in range(1000):
    # 前馈
    y_pred = model(x_data)
    # 计算损失函数
    loss = criterion(y_pred, y_data)
    # 输出提示
    print(epoch, loss.item())

    # 清零
    optimizer.zero_grad()
    # 反馈
    loss.backward()
    # 权重更新
    optimizer.step()

# 输出权重和偏移量
print("w=", model.linear.weight.item())
print("bias=", model.linear.bias.item())

# 预测值
x_test = torch.tensor([4.0])
y_test = model(x_test)
print("y_pred=", y_test.data)

第一张图片是训练100次的结果、第二张图片是训练一千次的结果。

增加训练的次数可能会提高准确率,但是还需要考虑其他的因素。因为当训练次数增加时,模型对于训练数据的,损失函数值会逐渐下降,但是对于预测数据其损失函数的值是先下降再上升,这就是过拟合。
在这里插入图片描述
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:04:52  更:2021-10-03 17:08:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:41:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码