Pytorch神经网络-元组/列表如何喂到神经网络中

📚博客主页:knighthood2001

公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下)

🎃知识星球:【认知up吧|成长|副业】介绍

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏笔者水平有限,欢迎各位大佬指点,相互学习进步!

这篇文章适用于初学者,因为我就是这么过来的,最开始连网络中的参数为什么这么设置的都不知道。但是本文没有讲太多这方面的知识。

首先需要说明的是:

在PyTorch中,神经网络模型的输入通常需要是张量(tensor)类型。虽然你可以将元组作为输入传递给神经网络模型,但实际上在模型内部处理时,最终还是需要将数据转换为张量。

PyTorch的神经网络层(如nn.Linearnn.Conv2d等)的输入和输出都是张量。因此,在实际使用中,你需要确保将任何非张量类型的数据(如列表、元组等)转换为张量,以便能够在神经网络中进行计算。

经过我的一点点测试,发现好像pytorch中好像只能输入tensor格式的数据,而不能是tuple或者list数据类型。
在这里插入图片描述
在这里插入图片描述

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.f1 = nn.Linear(2, 32)
        self.f2 = nn.Linear(32, 4)

    def forward(self, x):
        x = self.f1(x)
        x = F.relu(x)
        action = self.f2(x)
        return action

这里我定义了两层网络,简单实现一个神经网络。
接下来我定义了一些数据类型,比如a是元组,c是列表,b和d都是经过转换成tensor张量格式的数据。

net = Net()

a = (4, 4)
b = torch.FloatTensor(a)

print(b)
print(net(b))

c = [4, 4]
d = torch.FloatTensor(c)
print(d)
print(net(d))

在这里插入图片描述
可以发现他们经过转换后长得一样了,然后才能把他们喂到神经网络中,否则就会出现上面的报错。

从中我们可以看出来,b和d都是包含两个数据的一维张量。这里好像是因为PyTorch 在执行 net(b) 时会自动将 1 维的输入张量 b 视作大小为 (1, 2) 的 batch,并将其送入神经网络进行前向传播计算。

所以可能将其变为二维张量输入网络比较好(个人观点),如下。

如果你想要将 b 转换为二维张量,可以使用 b.view(1, -1) 方法,这样 b 就会变成一个包含一个行和两列的二维张量。同理,d也是这样处理。这里的-1表示的就是,系统会根据总的数据数以及其他维度需要的数量,然后计算出-1所在的维度的数量。

m = b.view(1, -1)
print(m)
print(net(m))

在这里插入图片描述
发现结果一样,就是反向传播的梯度下降函数不同。

我查询了一下:

在 PyTorch 中,ViewBackward0 和 AddmmBackward0 是两种不同类型的 Autograd
Function,用于反向传播计算梯度。

  1. ViewBackward0:

    • ViewBackward0 是View 操作的反向传播函数。View 操作用于改变张量的形状,但不改变张量的数据内容。ViewBackward0 的作用是将梯度传播回 View
      操作之前的张量,以便在反向传播过程中正确更新梯度。
    • ViewBackward0 的主要功能是处理从 View 操作反向传播回来的梯度,确保梯度在形状变换后能够正确传播并更新。
  2. AddmmBackward0:

    • AddmmBackward0 是 addmm 操作(矩阵相加和矩阵乘法)的反向传播函数。addmm 函数用于计算矩阵相加和矩阵乘法的结果。AddmmBackward0 的作用是计算 addmm 操作对输入张量的梯度。
    • AddmmBackward0 主要负责处理 addmm 操作的反向传播过程,根据输出的梯度计算输入张量的梯度,并将其传播到上游的节点。

总的来说,ViewBackward0 用于处理 View 操作的反向传播,而 AddmmBackward0 用于处理 addmm
操作的反向传播。它们都是 Autograd Function 的一部分,负责计算和传播梯度,以支持 PyTorch 的自动微分功能。

本文的全部代码如下:

import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.f1 = nn.Linear(2, 32)
        self.f2 = nn.Linear(32, 4)

    def forward(self, x):
        x = self.f1(x)
        x = F.relu(x)
        action = self.f2(x)
        return action

net = Net()

a = (4, 4)
b = torch.FloatTensor(a)

print(b)
print(net(b))

m = b.view(1, -1)
print(m)
print(net(m))

c = [4, 4]
d = torch.FloatTensor(c)
print(d)
print(net(d))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/475792.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPT2从放弃到入门(二)

引言 本文介绍如何利用GPT2从零训练一个多轮对话聊天机器人,按照本文的思路可以轻松地训练自己的数据。 数据处理 ⚠️ 这是本文的核心部分,其他的内容甚至可以不用看。 本小节阐述多轮对话数据的处理。 数据来自网上的一份开源数据:htt…

【c++入门】命名空间,缺省参数与函数重载

🔥个人主页: Quitecoder 🔥专栏:c笔记仓 朋友们大家好!本篇内容我们进入一个新的阶段,进入c的学习!希望我的博客内容能对你有帮助! 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

Linux - 线程互斥和互斥锁

文章目录 前言一、为什么要线程互斥原子性 二、互斥锁互斥锁的创建与销毁互斥锁进行互斥 前言 前几节课,我们学习了多线程的基础概念,这节课,我们来对线程互斥和互斥锁的内容进行学习。 一、为什么要线程互斥 首先我们要明白,对…

AOP切面编程

1.基本概念: AOP(Aspect-Oriented Programming,面向切面编程),跟oop面向过程编程相对,AOP一般用于将公共逻辑和业务逻辑进行拆分,可以减少代码间的耦合性。 有道翻译:AOP—面向切面…

jsp2024.3.21(4) html基础

一、实验目的 1、html 文件的基本结构&#xff1b; 2、html 的常用标记&#xff1b; <HTML> <HEAD> …… </HEAD> <BODY> …… </BODY> </HTML> 二、实验项目内容&#xff08;实验题目&#xff09; HTML常用标记 1&#xff0e;<…

C语言数据在内存中的存续:一篇文章让你秒懂基础!

JAMES别扣了-CSDN博客 &#x1f495;在校大学生一枚。对IT有着极其浓厚的兴趣 ✨系列专栏目前为C语言初阶、后续会更新c语言的学习方法以及c题目分享. &#x1f60d;希望我的文章对大家有着不一样的帮助&#xff0c;欢迎大家关注我&#xff0c;我也会回关&#xff0c;大家一起交…

LeetCode 热题 100 | 堆(一)

目录 1 什么是堆排序 1.1 什么是堆 1.2 如何构建堆 1.3 举例说明 2 215. 数组中的第 K 个最大元素 2.1 子树大根化 2.2 遍历所有子树 2.3 弹出栈顶元素 2.4 完整代码 菜鸟做题&#xff0c;语言是 C 1 什么是堆排序 1.1 什么是堆 堆的定义和分类&#xff…

为什么Hashtable不允许插入nuIl键和null值?

1、典型回答 浅层次的来回答这个问题的答案是&#xff0c;JDK 源码不支持 Hashtable 插入 value 值为 null&#xff0c;如以下 JDK 源码所示&#xff1a; 也就是 JDK 源码规定了&#xff0c;如果你给 Hashtable 插入 value 值为 null 就会抛出空指针异常。 并且看上面的 JDK …

如何搭建DolphinScheduler服务并结合内网穿透公网远程任务调度

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

Stable Diffusion WebUI 生成参数:宽度/高度/生成批次/每批数量/提示词相关性/随机种子

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 大家好&#xff0c;我是水滴~~ 本文将继续了解 Stable Diffusion WebUI 的生成参数&#xff0c;主要内容有&#xff1a;宽度、高度、生成批次、每批数量、提示词相关性、随机种子。希望能对你…

大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集

大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 概述 大模型微调(finetuning)以适应特定任务是一个复杂且计算密集型的过程。本文训练测试主要是基于主流的的微调方法:LoRA、Adapter、Prefix-tuning、P-tuning和Prompt-tuning,并对…

STM32驱动CC1101时的正确配置和一些遇到的坑

项目背景 由于项目需要用到CC1101-Q1,所以买了CC1101的模块和驱动底板,插电脑上一发一收。串口调试助手查看接收端的数据,测试正常。 然后想用STM32来驱动其中的一块CC1101模块作为发送端,和另一个买来的接收端测试通信。找到一份STM32驱动CC1101Demo代码,分为软件模拟S…

Certum代码签名证书

代码签名证书是一种数字证书&#xff0c;用于验证软件开发者身份和保证软件完整性的技术。它的作用在于确保软件在传输和安装过程中没有被篡改或损坏&#xff0c;并且确认软件来自可信的开发者。通过代码签名证书&#xff0c;用户可以更放心地下载和安装软件&#xff0c;降低安…

【Linux】文件描述符 - fd

文章目录 1. open 接口介绍1.1 代码演示1.2 open 函数返回值 2. 文件描述符 fd2.1 0 / 1 / 22.2 文件描述符的分配规则 3. 重定向3.1 dup2 系统调用函数 4. FILE 与 缓冲区 1. open 接口介绍 使用 man open 指令查看手册&#xff1a; #include <sys/types.h> #include …

AI系统性学习06—开源中文语言大模型

1、ChatGLM ChatGLM-6B的github地址&#xff1a;https://github.com/THUDM/ChatGLM-6B ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。结合模型量化技术&#xff0c;用户可以在消费级…

透视未来工厂:山海鲸可视化打造数字孪生新篇章

在信息化浪潮的推动下&#xff0c;数字孪生工厂项目正成为工业制造领域的新宠。作为一名山海鲸可视化的资深用户&#xff0c;我深感其强大的数据可视化能力和数字孪生技术在工厂管理中的应用价值&#xff0c;同时我们公司之前也和山海鲸可视化合作制作了一个智慧工厂项目&#…

OceanBase生产环境安装部署的最优实践

关于生产环境&#xff0c;为了尽量确保性能和稳定性&#xff0c;我们比较建议采用标准化的配置进行部署&#xff0c;例如接下来会提到的服务初始化、日志管理和数据分盘等关键步骤。而在非生产环境中&#xff0c;如果条件满足&#xff0c;同样建议遵循规范部署的原则。 前期准备…

项目实战-开发工具入门/基本框架搭建/项目初始化/引入组件库

上周更新完了之前vue3的shopping项目&#xff0c;接下来&#xff0c;将会开启一个新的项目&#xff0c;效果是类似于移动端的一个伙伴匹配项目&#xff0c;今天这篇文章从需求分析到架构设计再到项目初始化&#xff0c;基本框架搭建几个部分来为大家详细介绍。 从这个项目开始…

YOLOV5 改进:替换backbone为Swin Transformer

1、前言 本文会将YOLOV5 backbone更换成Swin Transformer 具体为什么这样实现参考上文:YOLOV5 改进:替换backbone(MobileNet为例)-CSDN博客 这里只贴加入的代码 训练结果如下: 2、common文件更改 在common文件中加入下面代码: 这里是swin transformer的实现,参考:…

VMware部署银河麒麟遇到的问题记录

1. 解决VMware Workstation安装VMware Tools显示灰色的办法 1.关闭虚拟机; 2.在虚拟机设置分别设置CD/DVD、CD/DVD2和软盘为自动检测三个步骤; 3.再重启虚拟机,灰色字即点亮。 2.Linux安装vmTool
最新文章