x.view(a,b)及x = x.view(x.size(0), -1) 的理解说明

news2025/1/20 18:24:38

x.view()就是对tensor进行reshape:

我们在创建一个网络的时候,会在Foward函数内看到view的使用。
首先这里是一个简单的网络,有卷积和全连接组成。它的foward函数如下:

class NET(nn.Module):
    def __init__(self,batch_size):
        super(NET,self).__init__()
        self.conv = nn.Conv2d(outchannels=3,in_channels=64,kernel_size=3,stride=1)
        self.fc = nn.Linear(64*batch_size,10)
 
    def forward(self,x):
        x = self.conv(x)
        x = x.view(x.size(0), -1)  
        out = self.fc(x)

在CNN中卷积或者池化之后需要连接全连接层,所以需要把多维度的tensor展平成一维,x.view(x.size(0), -1)就实现的这个功能。
卷积或者池化之后的tensor的维度为(batchsize,channels,x,y),其中x.size(0)指batchsize的值,x = x.view(x.size(0), -1)简化x = x.view(batchsize, -1)。( 通过x.view(x.size(0), -1)将tensor的结构转换为了(batchsize, channelsxy),即将(channels,x,y)拉直,然后就可以和fc层连接了。)

示例:
x变量的本质就是一个4维向量,而在conv1层的输入的x为一个10 ∗ * 3 ∗ * 100 ∗ * 100的向量,参数分别表示batchsize,RGB,100 ∗ * 100图片大小,x经过一层层的卷积,最后10 ∗ * 256 ∗ * 4 ∗ * 4向量作为第四层卷积输出。

最后使用x.view(x.shape(0),-1)将x转化成一个10行的矩阵,矩阵的每一行就是这个批量(批量大小为10)中每张图片的各个参数(即256 ∗ * 4 ∗ * 4),即矩阵中一行对应一张图片。

view()函数的功能根reshape类似,用来转换size大小。x = x.view(batchsize, -1)中batchsize指转换后有几行,而-1指在不告诉函数有多少列的情况下,根据原tensor数据和batchsize自动分配列数。
在这里插入图片描述

x.view(a,b)解析

引用自:Python函数.view(1,-1)和 .view(-1,1)有什么区别
引用自:pytorch中的X.view[-1],X.view[-1,参数],X.view[参数,-1]

x.view[-1,参数a]以及x.view[参数a,-1]语句的作用就是根据参数来调整维度

  • x.view[参数,-1]:就是根据参数来自动调整列数
  • x.view[-1,参数]:就是根据参数来自动调整行数
  • x.view[-1]:-1本意是根据另外一个数来自动调整维度,但因为行数,列数参数都未知,最后就将所有维度数据调整为一维tensor。

x.view(1, -1):这种形式的 .view() 操作将张量重新塑造为一个行数为 1,列数自动推断的二维张量。在推断列数时,会根据张量的总元素数量和行数来确定。如果张量原来的形状是 (a, b, c),则 .view(1, -1) 将其转换为 (1, a * b * c) 的形状。这种操作通常用于在保持张量元素总数不变的情况下,将多维张量展平为一维张量或行向量。

x.view(-1, 1):这种形式的 .view() 操作将张量重新塑造为一个列数为 1,行数自动推断的二维张量。在推断行数时,会根据张量的总元素数量和列数来确定。如果张量原来的形状是 (a, b, c),则 .view(-1, 1) 将其转换为 (a * b * c, 1) 的形状。这种操作通常用于在保持张量元素总数不变的情况下,将多维张量展平为一维张量或列向量。

x.view(-1)中的-1本意是根据另外一个数来自动调整维度,但是这里只有一个维度,因此就会将x里面的所有维度数据转化成一维的,并且按先后顺序排列。

因此,.view(1, -1) 和 .view(-1, 1) 的区别在于最终张量的形状,前者得到一个行向量或一维张量,后者得到一个列向量或一维张量。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据之几分钟处理完30亿个数据

写在前面 假定现在我们有一个10G的文件,存储的是17~70岁的年龄,每个年龄使用,分割,现需要找出出现次数最多的年龄,以及其出现的次数。 源码 。 1:数据准备 我们首先来准备一个10G大小的存储年龄信息的数据文件&#…

(五)、深度学习框架源码编译

1、源码构建与预构建: 源码构建: 源码构建是通过获取软件的源代码,然后在本地编译生成可执行程序或库文件的过程。这种方法允许根据特定需求进行配置和优化,但可能需要较长的时间和较大的资源来编译源代码。 预构建: 预…

JSP-学习笔记

文章目录 1.JSP介绍2 JSP快速入门3 JSP 脚本3.1 JSP脚本案例3.2 JSP缺点 4 EL表达式4.1 快速入门案例 5. JSTL标签6. MVC模式和三层架构6.1 MVC6.2 三层架构 7. 案例-基于MVC和三层架构实现商品表的增删改查 1.JSP介绍 概念 JSP(JavaServer Pages)是一种…

JVM——引言+JVM内存结构

引言 什么是JVM 定义: Java VirtualMachine -java 程序的运行环境 (ava 二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查,多态 比较: jvm jre jdk 学习jvm的作用 面试理解底层实现原理中…

idea设置忽略大小写

1.点击file 2.点击settings 3.点击Editor选项 4.点击general选项 5.点击code completion 6.点击左上角match case

根据宿主机PID获取容器运行实例

当宿主机的容器化方式部署更多的时候按照之前linux查看进程的命令基本很难获取到想要的信息,只能看到ps后的结果,长时间后我都不知道哪里出现这么多nginx的进程,能确定是容器部署的,但是不知道那些容器出现了这么多进程 1.根据相…

Window下部署使用Stable Diffusion AI开源项目绘图

Window下部署使用Stable Diffusion AI开源项目绘图 前言前提条件相关介绍Stable Diffusion AI绘图下载项目环境要求环境下载运行项目打开网址,即可体验文字生成图像(txt2img)庐山瀑布 参考 本文里面的风景图,均由Stable Diffusion…

用户新增预测——baseline学习笔记

一、赛题理解 1. 赛题名称 用户新增预测挑战赛 2. 赛题数据集 赛题数据由约62万条训练集、20万条测试集数据组成,共包含13个字段。其中uuid为样本唯一标识,eid为访问行为ID,udmap为行为属性,其中的key1到key9表示不同的行为属性…

项目管理敏捷管理流程,高效敏捷项目管理解决方案

Leangoo领歌是一款永久免费的专业敏捷研发管理工具,提供敏捷研发解决方案,解决研发痛点,打造成功产品。帮助团队实现需求、迭代、缺陷、任务、测试、发布等全方位研发管理。 敏捷产品路线图管理: 产品路线图是一个高层次的战略计…

服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式

随着信息技术的发展,企业的计算机服务器数据库变得越来越重要。然而,在数字时代,网络上的威胁也日益增多。近期,我们收到很多企业的求助,企业的计算机服务器遭到了360后缀勒索病毒的攻击,导致服务器内的所有…

DevExpress VCL Subscription Crack

DevExpress VCL Subscription Crack Developer Express VCL Subscription包括VCL组件,用于:数据输入、图表、数据分析、导航、布局、网格、日程安排、样式、报告、打印和规划。Developer Express VCL Subscription支持Delphi XE7、XE8、10 Seattle、10.1…

Nacos - 安装指南(Windows系统)

一、下载安装包 Nacos现在虽然已经出到二点几的版本,但二点几版本还处在测试阶段,我们选择下载成熟的 1.4.6 版本 下载地址:Nacos 1.4.6 GitHub的Release下载页 拉到页面最底部,可以看到下载按钮,windows版本使用naco…

LeetCode——二叉树篇(四)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 二叉树的定义及创建见: LeetCode ACM模式——二叉树篇(一)_要向着光的博客-CSDN博客 101. 对称二叉树 给你一个二叉树的根节点 root &#xf…

【Flink】Flink窗口触发器

数据进入到窗口的时候,窗口是否触发后续的计算由窗口触发器决定,每种类型的窗口都有对应的窗口触发机制。WindowAssigner 默认的 Trigger通常可解决大多数的情况。我们通常使用方式如下,调用trigger()方法把我们想执行触发器传递进去: SingleOutputStreamOperator<Produ…

Python Opencv实践 - 图像高斯滤波(高斯模糊)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols,channels img.shape print(rows,cols,channels)#为图像添加高斯噪声 #使用np.random.normal(loc0.0, scale1.0…

NFT Insider #103:The Sandbox 与音乐天才Agoria携手,Intela X宣布与YGG建立合作关系

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟世界类&#…

List Label Standard Reporting Edition Crack

List & Label Standard Reporting Edition Crack List&Label是适用于所有主要开发平台的报告解决方案&#xff0c;提供了强大的报告引擎、灵活的API和功能丰富的报告设计器。只需要几行代码就可以在桌面、web或云应用程序中嵌入List&Label。它允许您的应用程序用户…

keepalived集群

keepalived概述 keepalived软件就是通过vrrp协议来实现高可用功能。 VRRP通信原理 VRRP就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选一种协议机制来将路由交个某台VRRP路由器。 VRRP 用IP多播的方式&#xff08;多播地…

优先级队列【C++】

文章目录 priority_queuepriority_queue 使用priority_queue的模拟实现向上调整算法向下调整算法pushpoptopsizeempty 仿函数完整代码 priority_queue 优先队列&#xff08;priority_queue&#xff09;也是队列的一种&#xff0c;priority_queue的接口是和queue的接口是相同的…

一篇文章了解Java spring中bean的生命周期!

一.介绍在Java spring中bean的生命周期 1.什么是 Bean&#xff1f; 我们来看下 Spring Framework 的官方文档&#xff1a; In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean …