机器学习----PyTorch模型训练

PyTorch

  • 在前面使用纯手工做了线性回归,线性回归的问题其实就是求解损失函数最小的情况下的w值。
  • 在PyTorch里面很多的函数都进行了封装,我们直接用就可以。

损失函数

手写损失函数
def loss(y, y_pred):
	"""损失函数"""
	# (真实值 - 预测值)^2 的平均值
    return ((y_pred - y)**2).mean()
PyTorch封装的损失函数

损失函数就是计算 (预测值-真实值)^2的平均值
(均方误差)

torch.nn.MSELoss()方法参数:

  1. 所有数据的预测值
  2. 所有真实值
  3. (互换位置也一样,因为算的是均方误差)
import torch
X = torch.tensor([1,2,3,4],dtype=torch.float32)
Y = torch.tensor([2,4,6,8],dtype=torch.float32)
w = torch.tensor(0.0,dtype=torch.float32,requires_grad=True)

def forward(x):
    return w * x

# 均方差计算预测值和真实值之间的距离
loss = torch.nn.MSELoss()
# 计算此时的损失
y_pre = forward(X)
l = loss(y_pre,Y)
print(f"此时的损失值:{l}")

在这里插入图片描述


优化器

优化器就是代替了手写梯度下降算法,PyTorch将自动计算梯度并更新参数

定义优化器

optim模块内包含多个优化器,都是基于基本的梯度下降算法改进的算法,可以更快的求出最优的参数解,例如: SGD, Adam,Momentum,RMSProp,这里使用的是SGD梯度下降算法

  1. 需要反向传播更新的参数,可能会有多个需要更新的参数,所以参数1为列表
  2. lr命名参数为学习率
optimizer = torch.optim.SGD([W], lr=learning_rate)
完整的一次线性回归

l.backward()损失函数反向传播计算梯度
optimizer.step() 通过优化器 更新w参数 向梯度的方向走一步 (求解loss损失值关于w的偏导值)
optimizer.zero_grad() 清空梯度计算,防止梯度累加导致结果错误

# 创建x、y数据和自定义w参数
X = torch.tensor([1,2,3,4],dtype=torch.float32)
Y = torch.tensor([2,4,6,8],dtype=torch.float32)
w = torch.tensor(0.0,dtype=torch.float32,requires_grad=True)
# 定义学习率 和 训练模型迭代次数
learning_rate = 0.001
n_iters = 1000
# 创建损失函数
loss = torch.nn.MSELoss()
# 创建优化器 把w参数扔进去,要计算损失值关于w的关系(偏导数) 把学习率扔进去
optimizer = torch.optim.SGD([w],lr=learning_rate)

# 正向传播函数(模型)
def forward(x):
    """正向传播函数"""
    return w * x

# 训练模型
for epoch in range(n_iters):
    # 通过正向传播获取到预测值
    y_pred = forward(X)
    # 通过损失函数获取到损失值
    l = loss(y_pred,Y)
    # 反向传播计算梯度
    l.backward()
    # 通过优化器 更新w参数  向梯度的方向走一步
    optimizer.step()
    # 清空梯度计算,防止梯度累加导致结果错误
    optimizer.zero_grad()
    
    if epoch % 100 == 0:
        # 打印纪元 w参数的变化和损失值的变化
        print(f'epoch: {epoch},w: {w},loss: {l:.8f}')

模型的建立

建立模型就是省去了手写正向传播的函数

torch.nn.Linear(input_size,output_size)表示线性模型的函数

  • input_size: 输入数据的维度
  • output_size: 输出数据的维度

model.parameters()模型中的参数

# 创建x、y数据和自定义w参数
X = torch.tensor([[1],[2],[3],[4]],dtype=torch.float32)
Y = torch.tensor([[2],[4],[6],[8]],dtype=torch.float32)
# 测试集
X_test = torch.tensor([5],dtype=torch.float32)
# 定义模型参数
n_samples,n_features = X.shape
print(n_features)
# 因为当前定义的输入和输出维度一致  所以参数输入和输出都为n_features
model = torch.nn.Linear(n_features,n_features)
# 定义学习率 和 训练模型迭代次数
learning_rate = 0.01
n_iters = 1000
# 创建损失函数
loss = torch.nn.MSELoss()
# 创建优化器 把模型需要更新参数扔进去,要计算损失值关于w的关系(偏导数) 把学习率扔进去
optimizer = torch.optim.SGD(model.parameters(),lr=learning_rate)


# 训练模型
for epoch in range(n_iters):
    # 通过正向传播获取到预测值
    y_pred = model(X)
    # 通过损失函数获取到损失值
    l = loss(y_pred,Y)
    # 反向传播计算梯度
    l.backward()
    # 通过优化器 更新w参数  向梯度的方向走一步
    optimizer.step()
    # 清空梯度计算,防止梯度累加导致结果错误
    optimizer.zero_grad()
    
    if epoch % 100 == 0:
        # 获取到模型中w参数的值和b的值
        w,b = model.parameters()
        # 打印纪元 w参数的变化和损失值的变化
        print(f'epoch: {epoch},w: {w[0,0].item()},loss: {l}')

在这里插入图片描述

训练完成之后用测试集测试一下w参数:

test_model = model(X_test)

在这里插入图片描述
y = 2x + b 数据5已经无限接近于10


总结:

PyTorch训练模型流程:

  1. 获取训练集,获取输入维度和输出维度
  2. 根据输入和输出维度,创建合适的模型
  3. 创建损失函数
  4. 创建优化器
  5. 训练模型 正向传播➡反向传播➡梯度下降➡循环
  6. 获取测试集评估模型

机器学习不是一下就把解求出来,是向解慢慢逼近的过程。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cvae-gan-zoos-pytorch-beginner这个词汇代表一个初学者使用PyTorch框架进行CVAE-GAN(生成式对抗网络变分自编码器)的编码器,这个网络可以在数据集中进行分析学习,并将数据转换为可以生成新数据的潜在向量空间。该网络不需要通过监督学习标签分类,而是直接使用数据的分布。这个编码器的目的是从潜在空间中生成新数据。此模型可以用于不同的任务,例如图像生成和语音生成。 为了实现这一目标,这一模型采用了CVAE-GAN网络结构,其中CVAE(条件变分自编码器)被用来建立机器学习模型的潜在空间,GAN(生成式对抗网络)作为一个反馈网络,以实现生成数据的目的。最后,这个模型需要使用PyTorch框架进行编程实现,并对数据集进行分析和处理,以便输入到模型中进行训练。这个编码器是一个比较复杂的模型,因此,初学者需要掌握深度学习知识和PyTorch框架的相关知识,并有一定的编程经验,才能实现这一任务。 总的来说,CVAE-GAN是一个在生成数据方面取得了重大成就的深度学习模型,可以应用于各种领域,例如图像、语音和自然语言处理等。然而,对于初学者来说,这是一个相对复杂的任务,需要掌握相关知识和技能,才能成功实现这一模型。 ### 回答2: cvae-gan-zoos-pytorch-beginner是一些机器学习领域的技术工具,使用深度学习方法来实现动物园场景的生成。这些技术包括:生成式对抗网络(GAN)、变分自编码器(CVAE)和pytorch。GAN是一种基于对抗机制的深度学习网络,它可以训练出生成逼真的场景图像;CVAE也是一种深度学习网络,它可以从潜在空间中提取出高质量的场景特征,并生成与原图像相似的图像;pytorch是一个深度学习框架,它可以支持这些技术的开发和实现。 在这个动物园场景生成的过程中,通过GAN和CVAE的组合使用可以从多个角度来创建逼真而多样化的动物园场景。此外,pytorch提供了很多工具和函数来简化代码编写和管理数据,使得训练过程更加容易和高效。对于初学者们来说,这些技术和框架提供了一个良好的起点,可以探索深度学习和图像处理领域的基础理论和实践方法,有助于了解如何使用技术来生成更好的图像结果。 ### 回答3: CVaE-GAN-ZOOS-PyTorch-Beginner是一种结合了条件变分自编码器(CVaE)、生成对抗网络(GAN)和零样本学习(Zero-Shot Learning)的深度学习框架。它使用PyTorch深度学习库,适合初学者学习和使用。 CVaE-GAN-ZOOS-PyTorch-Beginner的主要目的是提供一个通用的模型结构,以实现Zero-Shot Learning任务。在这种任务中,模型要从未见过的类别中推断标签。CVaE-GAN-ZOOS-PyTorch-Beginner框架旨在使模型能够从已知类别中学习无监督的表示,并从中推断未知类别的标签。 CVaE-GAN-ZOOS-PyTorch-Beginner的结构由两个关键部分组成:生成器和判别器。生成器使用条件变分自编码器生成潜在特征,并进一步生成样本。判别器使用生成的样本和真实样本区分它们是否相似。这样,生成器被迫学习产生真实的样本,而判别器则被迫学习区分真实的样本和虚假的样本。 总的来说,CVaE-GAN-ZOOS-PyTorch-Beginner框架是一个强大的工具,可以用于解决Zero-Shot Learning问题。它是一个易于使用的框架,适合初学者学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值