# 【深度学习】:《PyTorch入门到项目实战》第三天:简洁代码实现线性神经网络(附代码)

简介: 在上一节我们学习了如何使用pytorch从零实现一个线性回归模型。包括生成数据集,构建损失函数,==<corlor>梯度下降==优化求解参数等。和很多其他机器学习框架一样,pytorch中也包含了许多可以自动实现机器学习的包。本章介绍一些如何使用`nn`简便的实现一个线性回归模型
  • ✨本文收录于【深度学习】:《PyTorch入门到项目实战》专栏,此专栏主要记录如何使用PyTorch实现深度学习笔记,尽量坚持每周持续更新,欢迎大家订阅!
  • 🌸个人主页:JoJo的数据分析历险记
  • 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

参考资料:本专栏主要以沐神《动手学深度学习》为学习资料,记录自己的学习笔记,能力有限,如有错误,欢迎大家指正。同时沐神上传了的教学视频和教材,大家可以前往学习。

请添加图片描述

在上一节我们学习了如何使用pytorch从零实现一个线性回归模型。包括生成数据集,构建损失函数,==梯度下降==优化求解参数等。和很多其他机器学习框架一样,pytorch中也包含了许多可以自动实现机器学习的包。本章介绍一些如何使用nn简便的实现一个线性回归模型

🌺1.生成数据集

import numpy as np
import torch
from torch.utils import data

接下来我们定义真实的w和b,以及生成模拟数据集,这一步和之前讲的一样

def synthetic_data(w, b, num_examples):  
    X = torch.normal(0, 1, (num_examples, len(w)))
    y = torch.matmul(X, w) + b
    y += torch.normal(0, 0.01, y.shape)
    return X, y.reshape((-1, 1))

true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)

🌻2.读取数据集

下面有一点不同的是我们通过data.TensorDataset把数据放在Tensor结构中,如何通过batch_size来设置每次抽取几个样本

def load_array(data_arrays,batch_size,is_train=True):
    # TensorDataset:将数据对应成Tensor列表
    data_set = data.TensorDataset(*data_arrays)
    return data.DataLoader(data_set,batch_size,shuffle=is_train)#将数据加载读取出来,batch_size定义个数
batch_size = 10
data_iter = load_array((features,labels),batch_size)
next(iter(data_iter))
[tensor([[-0.0384,  1.1566],
         [-0.9023, -0.6922],
         [-0.0652,  1.1757],
         [-0.8569, -1.0172],
         [ 1.3489, -0.6855],
         [ 0.1463,  0.1577],
         [ 0.1615, -2.1549],
         [-0.0533, -0.3301],
         [-0.9913,  0.2226],
         [ 0.1432, -0.9537]]),
 tensor([[ 0.1836],
         [ 4.7540],
         [ 0.0802],
         [ 5.9541],
         [ 9.2256],
         [ 3.9620],
         [11.8700],
         [ 5.2242],
         [ 1.4718],
         [ 7.7181]])]





🌼3.线性模型搭建

这里我们通过nn搭建一个线性的神经网络

from torch import nn

这里我们使用Sequential类来接收线性层,这里我们只有一个线性神经网络层,其实可以不设置,但是在后续我们介绍的其他算法中,往往都是多层的,因此我们可以把这个当做一个标准化流程。
它的作用是将不同层串在一起,首先将数据传入到第一层,然后将第一层的输出传入到第二层作为输入,以此类推

net = nn.Sequential(nn.Linear(2,1))#第一个参数表示输入特征的纬度,第二个参数表示输出层的纬度

🌷4.初始化参数

在定义net之后,我们需要做的就是定义我们要估计的参数。还是和之前类似,这里我们也需要定义两个参数一个是weight相当于之前的w,一个是bias相当于之前的b

net[0].weight.data.normal_(0, 0.01)#第一层的weight初始化
net[0].bias.data.fill_(0)#第一层的bias初始化
tensor([0.])


🌱5. 定义损失函数

这里我们使用均方误差MSE来作为我们的损失函数

loss = nn.MSELoss()

🌲6. 选择优化方法

这里我们使用随机梯度下降进行优化。从而得到我们的参数.需要传入两个参数,一个是==待估计参数==,另一个是==学习率==。我在这里设置为0.03

trainer = torch.optim.SGD(net.parameters(), lr=0.03)
num_epochs = 3
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = loss(net(X) ,y)
        trainer.zero_grad()
        l.backward()
        trainer.step()#更新参数
    l = loss(net(features), labels)
    print(f'epoch {epoch + 1}, loss {l:f}')
epoch 1, loss 0.000102
epoch 2, loss 0.000103
epoch 3, loss 0.000104

🌴7.完整代码

# 导入相关库
import numpy as np
import torch
from torch.utils import data
from torch import nn
'''
定义模拟数据集函数
'''
def synthetic_data(w, b, num_examples):  
    X = torch.normal(0, 1, (num_examples, len(w)))#生成标准正态分布
    y = torch.matmul(X, w) + b#计算y
    y += torch.normal(0, 0.01, y.shape)
    return X, y.reshape((-1, 1))

'''
生成数据集
'''
true_w = torch.tensor([2, -3.4])#定义w
true_b = 4.2#定义b
features, labels = synthetic_data(true_w, true_b, 1000)#生成模拟数据集

'''
加载数据集
'''
def load_array(data_arrays,batch_size,is_train=True):
    # TensorDataset:将数据对应成Tensor列表
    data_set = data.TensorDataset(*data_arrays)
    return data.DataLoader(data_set,batch_size,shuffle=is_train)#将数据加载读取出来,batch_size定义个数
batch_size = 10
data_iter = load_array((features,labels),batch_size)
'''
创建线性神经网络
'''
net = nn.Sequential(nn.Linear(2,1))#第一个参数表示输入特征的纬度,第二个参数表示输出层的纬度
net[0].weight.data.normal_(0, 0.01)#第一层的weight初始化
net[0].bias.data.fill_(0)#第一层的bias初始化
'''
定义损失函数MSE
'''
loss = nn.MSELoss()

'''
创建SGD优化方法
'''
trainer = torch.optim.SGD(net.parameters(), lr=0.03)#创建SGD优化训练器
'''
正式训练
'''
num_epochs = 3#迭代次数
for epoch in range(num_epochs):
    for X, y in data_iter:
        l = loss(net(X) ,y)#计算损失函数
        trainer.zero_grad()
        l.backward()
        trainer.step()#更新参数
    l = loss(net(features), labels)#计算最终的loss
    print(f'epoch {epoch + 1}, loss {l:f}')
epoch 1, loss 0.000240
epoch 2, loss 0.000099
epoch 3, loss 0.000100

✨推荐阅读

本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!

相关文章
|
1月前
|
机器学习/深度学习 人工智能 PyTorch
PyTorch深度学习 ? 带你从入门到精通!!!
🌟 蒋星熠Jaxonic,深度学习探索者。三年深耕PyTorch,从基础到部署,分享模型构建、GPU加速、TorchScript优化及PyTorch 2.0新特性,助力AI开发者高效进阶。
PyTorch深度学习 ? 带你从入门到精通!!!
|
4月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
517 27
|
2月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
145 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
1月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
2月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
193 2
|
8月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
676 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
3月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
246 9
|
2月前
|
机器学习/深度学习 数据采集 编解码
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
130 1
|
2月前
|
机器学习/深度学习 算法 vr&ar
【深度学习】基于最小误差法的胸片分割系统(Matlab代码实现)
【深度学习】基于最小误差法的胸片分割系统(Matlab代码实现)
|
5月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
252 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统

热门文章

最新文章

推荐镜像

更多