# 【深度学习】:《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

✨推荐阅读

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

相关文章
|
8天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
127 55
|
18天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
104 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
52 31
|
5天前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本文详细介绍了如何在昇腾平台上使用PyTorch实现GraphSage算法,在CiteSeer数据集上进行图神经网络的分类训练。内容涵盖GraphSage的创新点、算法原理、网络架构及实战代码分析,通过采样和聚合方法高效处理大规模图数据。实验结果显示,模型在CiteSeer数据集上的分类准确率达到66.5%。
|
11天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
14天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##
|
18天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
44 3
|
26天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
51 8
|
24天前
|
机器学习/深度学习 自然语言处理 算法
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
33 1