pytorch学习笔记六

pytorch全连接模型实现离散点回归拟合 神经网络可作为一个函数,例如x为训练样本矩阵,f为神经网络,则f(x)会得到一个输出,输出表示啥取决于训练目的和训练过程。 本文章讲解以拟合为设计目的的全连接神经网络模型,神经网络即可进行线性回归,也可进行非线性回归,并且是还是分段拟合,线性与非线性取决于激活函数! 先来简单的一元二次函数: 看代码: x = torch.unsqueeze(torch.linspace(-1,1,100),dim... 阅读详情

pytorch学习笔记六————使用神经网络拟合数据

上一章节我们用pytorch里面的工具实现了对数据进行线性回归,我们用的是线性模型,这次我们尝试使用神经网络模型对数据进行拟合,整个学习过程与前几章基本相同,就是在某些细节上面需要深究
pytorch有一个专门用于构建神经网络的子模块,称作为torch.nn,它包含创建各种神经网络结构所需的构建块,在这里提供的模型都是nn.Module的子模块,我们可以像调用一个函数一样调用他

线性模型

在pytroch里面的线性模型被称作为nn.Linear它接受3个参数:输入特征的数量,输出特征的数量,以及线性模型是否包含偏置(默认为True)
下面代码构建了一个最简单的线性模型,并且打印了其权重和偏置

import torch.nn as nn
linear_model = nn.Linear(1, 1)
linear_model(t_un_val)
print(linear_model.weight)
print(linear_model.weight)

nn中所有模块都被编写为可以同时为多个输入产生输出,这里的输入输出需要规定下格式,输入的格式是一个B×NinB\times N_{in}B×Nin​的输入张量,B是批次大小,即一次处理B组数据;NinN_{in}Nin​为输入特征的数量.相应的,输出的格式为B×NoutB\times N_{out}B×Nout​
对于我们之前的温度数据,我们需要调整输入格式,在这里B为数据的数量,NinN_{in}Nin​为1,这通过unsqueeze()可以很容易的完成

t_c = [0.5,  14.0, 15.0, 28.0, 11.0,  8.0,  3.0, -4.0,  6.0, 13.0, 21.0]
t_u = [35.7, 55.9, 58.2, 81.9, 56.3, 48.9, 33.9, 21.8, 48.4, 60.4, 68.4]
t_c = torch.tensor(t_c).unsqueeze(1)
t_u = torch.tensor(t_u).unsqueeze(1)
t_u.shape

如此,我们用nn.Linear(1,1)代替手动构造模型吗然后将线性模型参数传递给优化器

linear_model = nn.Linear(1, 1)
optimizer = optim.SGD(
    linear_model.parameters(),
    lr=1e-2)

所以我们可以用parameters()来访问模型拥有的参数列表

linear_model.parameters()
# <generator object Module.parameters at 0x7f94b4a8a750>
list(linear_model.parameters())
# [Parameter containing:
#  tensor([[0.7398]], requires_grad=True), Parameter containing:
#  tensor([0.7974], requires_grad=True)]

因此我们可以实现整个模型,其中损失函数我们用nn.MSELoss()代替,这是官方里的均方误差损失函数

def training_loop(n_epochs, optimizer, model, loss_fn, t_u_train, t_u_val,
                  t_c_train, t_c_val):
    for epoch in range(1, n_epochs + 1):
        t_p_train = model(t_u_train)
        loss_train = loss_fn(t_p_train, t_c_train)

        t_p_val = model(t_u_val)
        loss_val = loss_fn(t_p_val, t_c_val)
        
        optimizer.zero_grad()
        loss_train.backward()
        optimizer.step()

        if epoch == 1 or epoch % 1000 == 0:
            print(f"Epoch {epoch}, Training loss {loss_train.item():.4f},"
                  f" Validation loss {loss_val.item():.4f}")

training_loop(
    n_epochs = 3000, 
    optimizer = optimizer,
    model = linear_model,
    loss_fn = loss_fn,
    t_u_train = t_un_train,
    t_u_val = t_un_val, 
    t_c_train = t_c_train,
    t_c_val = t_c_val)

神经网络模型

相比较于上一个模型实现,我们只需要将线性模型替换成神经网络模型即可
一个最简单的神经网络由三个部分组成:一个线性模块,然后一个激活函数,接着又是一个线性模块
nn提供了一种通过nn.Sequential容器来连接模型的方式

seq_model = nn.Sequential(
            nn.Linear(1, 13),
            nn.Tanh(),
            nn.Linear(13, 1))

检查参数的方法,当检查几个子模块组成的模型的参数时,通过名称识别参数时很方便的,named_parameters()方法可以实现该功能

print([param.shape for param in seq_model.parameters()])
for name, param in seq_model.named_parameters():
    print(name, param.shape)

可以看出sequential中模块的名称就是在模块中出现的序号,它也接受orderedDict,可以用它来命名传递给sequential里的模块,我们也可以通过将子模块作为属性来访问一个特定的参数

from collections import OrderedDict
seq_model = nn.Sequential(OrderedDict([
    ('hidden_linear', nn.Linear(1, 8)),
    ('hidden_activation', nn.Tanh()),
    ('output_linear', nn.Linear(8, 1))
]))
print(seq_model.output_linear.bias)

因此将training_loop里的模型参数改成神经网络模型即完成了一个最简单的数据模型
同样我们将其打印出来看其效果,总的来说做的不错
在这里插入图片描述

from matplotlib import pyplot as plt

t_range = torch.arange(20., 90.).unsqueeze(1)

fig = plt.figure(dpi=600)
plt.xlabel("Fahrenheit")
plt.ylabel("Celsius")
plt.plot(t_u.numpy(), t_c.numpy(), 'o')
plt.plot(t_range.numpy(), seq_model(0.1 * t_range).detach().numpy(), 'c-')
plt.plot(t_u.numpy(), seq_model(0.1 * t_u).detach().numpy(), 'kx')

pytorch学习笔记(六) 个人笔记,无参考性 阅读详情

相关推荐

PyTorch学习笔记(六):PyTorch进阶训练技巧

本文章主要介绍了PyTorch的进阶训练技巧,包括自定义损失函数、动态调整学习率、模型微调和半精度训练等技巧。 import os import numpy as np import pandas as pd ..

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4060

使用pytorch神经网络拟合计算模型

使用pytorch神经网络拟合计算模型

qq_45179361的博客 2360

Pytorch学习笔记(六)

简单的LeNet网络模型 LeNet torchvision dataset with torch.no_grad(): cuda GPU device

LJR的博客 1034

【PyTorch学习】Day5_使用神经网络拟合数据

深度学习的核心是神经网络,即一种能够通过简单函数的组合来表示复杂函数的数学实体,人工神经网络和生理神经网络(我们的大脑)似乎都使用模糊相似的数学策略来逼近复杂的函数。,即将输入乘以一个权重,加上一个常数(偏置),然后用一个固定的非线性函数(激活函数),作用是约束输出,避免产生梯度消失或梯度爆炸。在之前的训练中,我们只考虑了一个输入特征,当我们需要考虑多个特征时,就需要增加输入特征的维度,把一个一维张量变成一个矩阵,使用。的一个参数,将中间输出传递给后续模块,并产生最后一个模块返回的输出;

xhd0728的博客 1025

Lumerical FDTD新手必看:从零开始搭建光子晶体仿真环境(附完整脚本)

本文为Lumerical FDTD新手提供光子晶体仿真环境的完整搭建指南,涵盖从基础参数设置到脚本编写的全流程。通过典型光子晶体带隙分析案例,详细讲解结构建模、仿真参数配置及后处理技巧,并附赠完整MATLAB脚本,帮助用户快速掌握FDTD仿真核心技术。

3c4x5z6v7b的博客 1051

(project generation have a problem)STM32CubeMX生成工程一直报错项目生成有问题[玄学三步解]

解决办法 第一步,检查自己是不是真的配置的不对,JAVA安装没,pack路径设置的对不对,这里有一位前辈的博文写的非常好,附加链接https://blog.youkuaiyun.com/ybhuangfugui/article/details/52225736#commentBox 第二步,如果按照前辈的博文设置的都一模一样,还是不对,想我下图这样。 那你来对地方了 方法很简单,你把你生成工程文件的路径彻底的...

展桑博客-BenjieBlog 2922

PyTorch深度学习笔记之五(使用神经网络拟合数据)

本文首先介绍了神经网络和神经元的基本概念,然后构建了一个3层的神经网络以解决温度计问题。

FinixLei的专栏 (https://github.com/FinixLei) 7011

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

PyTorch-使用神经网络拟合数据

相反,从一个通用的、未经训练的模型开始,我们通过为它提供一组输入和输出以及一个可以反向传播的损失函数,使它专门处理某项任务。综合起来,所有这些组成了一个非常强大的机制:在一个由线性+激活单元构成的网络中,当不同的输入呈现给网络时,不同的单元会对相同的输入在不同范围内响应;这些复杂函数的基本构件是神经元,其核心就是输入的线性变换(如,将输入乘以一个数字【权重】,加上一个常数【偏置】),然后应用一个固定的非线性函数,即激活函数。深度学习的核心是神经网络:一种能够通过简单函数的组合来表示复杂函数的数学实体。

qq_59711487的博客 661

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

Dify使用教程3:Dify创建工作流

Dify使用教程3:Dify创建工作流 接着,我们连接下一个节点:“LLM”填入上下文变量为:result。这时候知识库就添加成功了。添加新节点:结束节点。

拥抱具身智能,昇腾Ascend C 5129

pytorch学习笔记(六)——pytorch进阶教程之broadcast自动扩展

pytorch学习笔记(六)——pytorch进阶教程之broadcast自动扩展目录broadcast的两个特点主要思想原理示例存在意义 目录 broadcast的两个特点 broadcast的两个特点:1.能够进行维度的扩展,相当于expand,但是是自动扩展 2.扩展的时候不需要拷贝数据 注意broadcast并不是函数,而是在不同size的tensor之间进行加减操作会自动进行的一种机制 ...

weixin_43886278的博客 1957

最新Python爬虫实战(入门爬虫篇)——案例15:微博热搜数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过 Python 爬虫技术,成功实现了对微博热搜 API 接口数据的批量爬取与 Excel 保存。代码采用模块化设计,包含接口请求、JSON 解析、数据提取、Excel 持久化等完整流程;通过模拟真实浏览器的请求头和 cookies,有效规避基础反爬策略,保证请求的稳定性。整个爬虫逻辑遵循“API请求 → JSON解析 → 数据提取 → 保存到Excel”的标准流程,与异步加载类网站的爬取范式高度一致。AJAX 接口抓包与分析。

努力让自己发光,对的人才能迎着光而来 7万+

PyTorch学习笔记(六)模型定义

PyTorch模型定义的方式,使用模型块快速搭建复杂网络与PyTorch修改模型。

zhangmeizi1996的博客 4812

[ 虚拟专用网 ] IPsce 虚拟局域网(安全的IP协议的虚拟专用网)详解(二) --- 安全联盟SA

???? 博主介绍 ????‍???? 博主介绍:大家好,我是_PowerShell,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 ????点赞➕评论➕收藏 == 养成习惯(一键三连)???? ????欢迎关注????一起学习????一起讨论⭐️一起进步????文末有彩蛋 ????作者水平有限,欢迎各位大佬指点,相互学习进步! 目录 ???? 博主介绍 一、什么是安全联盟 二、协商参数两种方式:(手动、IKE) 1. 手动 2.

qq_51577576的博客 2801

[QMT量化交易小白入门]-104、QMT平台运行深度学习模型,预测期货价格

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 480

pytorch学习笔记(六)——pytorch进阶教程之属性统计

pytorch学习笔记(六)——pytorch进阶教程之属性统计目录求范数----norm统计属性 目录 求范数----norm 范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。 范数又分为向量范数和矩阵范数,区别如图所示 In [1]: impor...

weixin_43886278的博客 649

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PyTorch 学习笔记(六):PyTorch的十八个损失函数

本文截取自《PyTorch 模型训练实用教程》,获取全文pdf请点击:https://github.com/tensor-yu/PyTorch_Tutorial 文章目录1.L1loss2.MSELoss3.CrossEntropyLoss4.NLLLoss5.PoissonNLLLoss6.KLDivLoss7.BCELoss8.BCEWithLogitsLoss9.MarginRanking...

人工智能技术学习与分享 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

pytorch学习笔记(六)——pytorch进阶教程之合并与分割

pytorch学习笔记(六)——pytorch进阶教程之合并与分割目录cat![在这里插入图片描述](https://img-blog.csdnimg.cn/2020020318200965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3...

weixin_43886278的博客 764

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PyTorch 学习笔记(六):PyTorch的十七个损失函数

文章目录1. L1loss2.MSELoss3.CrossEntropyLoss5.PoissonNLLLoss6.KLDivLoss7.BCELoss8.BCEWithLogitsLoss9.MarginRankingLoss10.HingeEmbeddingLoss11.MultiLabelMarginLoss12.SmoothL1Loss13.SoftMarginLoss14.MultiLa...

公众号/知乎: AI算法札记,欢迎关注交流 4019

pytorch学习笔记(六)——pytorch中搭建神经网络

目录一、神经网络基本骨架搭建nn.modulenn.Module的使用二、神经网络中一些神经结构的使用1. Convolution Layers 卷积层 一、神经网络基本骨架搭建nn.module 神经网络(Nueral Networks) 是由对数据进行操作的一些 层(layer) 或 模块(module) 所组成,而PyTorch 中的每个模块都是 nn.Module 的子类,在调用或自定义时均需继承 nn.Module 类。 同时 torch.nn 包为我们提供了构建神经网络所需的各种模块,当然一个

NA_imu的博客 5132

(六)pytorch学习笔记

作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai (一)pytorch学习笔记 (二)pytorch学习笔记 (三)pytorch学习笔记 (四)pytorch学习笔记 (五)pytorch学习笔记 (六)pytorch学习笔记 什么是批标准化 (Batch Normalization) 今天我们会来聊聊批标准化 Batch Normalizati...

CoderPai的博客 422

【学习笔记】【Pytorch】六、nn.Module的使用

一、**torch.nn**模块概述 **概述**:帮助程序员方便执行与神经网络相关的行为。 二、**nn.Module**类的使用 **概述**:所有神经网络模块的基类,既可以表示神经网络中的某个层(layer),也可以表示一个包含很多层的神经网络。

qq_45772756的博客 1347
上一篇: pytorch学习笔记五
下一篇: pytprch学习笔记七
StrangeStranger
博客等级 码龄6年 24粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值