Pytorch数据操作
1.Pytorch中tensor的生成与访问
可以使用arange()创建一个张量:如,torch.arange(12)创建0开始的前12个整数:

除非特殊指定,否则新的张量将存放在内存中,并采用CPU计算。
可以使用reshape()来改变张量的形状:

注意,reshape()的发起者是一个张量,比如这里的x.reshape(),x是一个张量。reshape操作只改变张量的形状,
并不改变张量的大小(元素的数量)以及张量中的值。还可以用x.reshape(-1,4)或x.reshape(3,-1)实现x.reshape(3,4)
同样的功能。
使用tensor.zeros()创建全0的tensor,括号内指定该全0的tensor的形状,如:

上面的例子创建了一个形状为(2,3,4)的tensor。全1同理:

使用torch.randn()创建均值为0,方差为1的标准正态分布张量,括号内同样是指定张量的形状,如:

还可以用python的列表来为张量指定值和形状,写法为:torch.tensor() :

可以使用torch.zeros_like(y)创建与y同形状的全0张量:

可以使用shape查看张量的形状:

注意,shape的发起者一定也是张量。比如这里的x.reshape(3,4)是shape动作的发起者,它是一个三行四列的张量。
2.Tensor的基本计算
加、减、乘、除、乘方、幂指这些运算,都可以直接用在张量上,表示按元素的计算(element-wise):


使用torch.exp()对张量的每一个元素做以e为底的幂指运算,括号内是某个张量:

使用torch.cat()拼接两个张量。括号中指出要拼接的两个张量以及dim的值,dim=0是竖着拼,dim=1是横着拼:

使用“==”对张量中的每一个数值判等,运算结果是一个布尔值构成的张量:

对张量中的所有元素进行求和,会产生一个单元素张量:

广播机制如下面的例子:

矩阵a将复制自身的列,矩阵b将复制自身的行,然后对应元素相加。
可以使用索引来访问tensor的元素,下面的例子中,X的是2维的,它的每一个元素是一个向量,X[0]访问第一个向量,
X[0,0]访问第一个向量中的第一个值:

特别地,可以用-1访问最后一个元素,用冒号":"进行连续访问:

这里面的"1:3"表示访问“下标”为1的元素(即第二个元素)开始的,连续的元素,一直到下标为3的元素(不包括3,前闭后开)。
还有以下的用法,将矩阵后两行全部赋值0:

将矩阵所有元素赋值0:

3.一个节省内存的方法
在为张量更新值的时候,如果只是简单的使用“x = expression”这样更新,则会为x分配一个新的内存。这样有两个不好的地方:
1. 机器学习中数据量很大,节约内存是有必要的。
2. 如果我们不原地更新,其他引用仍然可能指向旧的内存,这样可能会导致某些代码指向旧的参数。
原地更新的方法是:使用如x += 1代替x = x + 1 或使用切片:

4.Tensor与其他Python对象的转换
Pytorch的张量与Numpy的张量(ndarray)很容易相互转换:

Pytorch的只有一个元素,大小为1的张量同样可以很轻松地转换为python标量,可以使用item()函数,或强制类型转换,
如float(),int()等:

Pytorch数据操作的更多相关文章
- pytorch 数据操作
数据操作 在深度学习中,我们通常会频繁地对数据进行操作.作为动手学深度学习的基础,本节将介绍如何对内存中的数据进行操作. 在PyTorch中,torch.Tensor是存储和变换数据的主要工具.如果你 ...
- 【转载】PyTorch系列 (二):pytorch数据读取
原文:https://likewind.top/2019/02/01/Pytorch-dataprocess/ Pytorch系列: PyTorch系列(一) - PyTorch使用总览 PyTorc ...
- Pytorch数据读取框架
训练一个模型需要有一个数据库,一个网络,一个优化函数.数据读取是训练的第一步,以下是pytorch数据输入框架. 1)实例化一个数据库 假设我们已经定义了一个FaceLandmarksDataset数 ...
- PyTorch数据加载处理
PyTorch数据加载处理 PyTorch提供了许多工具来简化和希望数据加载,使代码更具可读性. 1.下载安装包 scikit-image:用于图像的IO和变换 pandas:用于更容易地进行csv解 ...
- PyTorch 数据并行处理
PyTorch 数据并行处理 可选择:数据并行处理(文末有完整代码下载) 本文将学习如何用 DataParallel 来使用多 GPU. 通过 PyTorch 使用多个 GPU 非常简单.可以将模型放 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
- hive数据操作
mdl是数据操作类的语言,包括向数据表加载文件,写查询结果等操作 hive有四种导入数据的方式 >从本地加载数据 LOAD DATA LOCAL INPATH './examples/files ...
- Dapper 数据操作框架
数据操作DapperFrom NuGet:Install-Package DapperorInstall-Package Dapper.StrongName微型ORM:PetaPoco获得PetaPo ...
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- coreData数据操作
// 1. 建立模型文件// 2. 建立CoreDataStack// 3. 设置AppDelegate 接着 // // CoreDataStack.swift // CoreDataStackDe ...
随机推荐
- C语言编译概念理解
1.编译与CPU.操作系统的联系 参考:https://blog.csdn.net/dong_daxia/article/details/95328479?ops_request_misc=%257B ...
- Rust for Rustaceans: Idomatic Programming for Experienced Developers Chap.2 Types
翻译的内容如果有不理解的地方或者是其他的差错,欢迎后台回复讨论. 类型在内存中的表示 Rust中的每一个值都有自己的类型(Type).在这一章中,我们将会看到Rust中的类型服务于许多不同的目的,但其 ...
- scala apply方法和update方法
示例代码1 class TestApplyClass { def apply(param: String): String = { println("apply method called, ...
- 【picoCTF]cookies write up
顾名思义,这一挑战涉及对cookie的简单操作.登录页面会显示一个搜索框,其中包含一个输入字段,用于检查您为其提供的 Cookie 类型. 点击链接,页面如下: 随便在框里输入内容,显示如下: 输出返 ...
- FastReport OpenSource发布到Linux上的准备
一.安装libgdiplus(libgdiplus是一个Mono库,用于对非Windows操作系统提供GDI+兼容的API) apt-get install build-essential lib ...
- Linux shell字符操作总结
各符号介绍 字符串长度统计 ${#string}: 字符串string的长度 字符串截取 ${string#*substring}: 从左到右截取特定字符substring第一次出现位置之后的字符串 ...
- Django+bootstrap+layui集成
一.django项目搭建:1.Python安装2.下载Django解压到Python安装目录G:\python3.7.4\3.cmd G:\python3.7.4\Django-4.0.5 执行 py ...
- PicGo + Gitee(码云)实现markdown图床 (转载)
https://zhuanlan.zhihu.com/p/102594554 备忘录 我配置图床的时候参考的是这篇文章.我暂时使用的是这种方案. 因为考虑到有的文章要多平台发布,我建议你选择markd ...
- Maven 的仓库、周期和插件
一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ...
- CZHA0黑客游戏
一个自己开发的黑客游戏,里面用到了自研AC库 A0阶段: from ac import* from time import * from sys import * def printf(text): ...