『PyTorch』第二弹_张量

Tensor基础操作

简单的初始化

import torch as t

Tensor基础操作

# 构建张量空间,不初始化
x = t.Tensor(5,3)
x
-2.4365e-20 -1.4335e-03 -2.4290e+25
-1.0283e-13 -2.8296e-07 -2.0769e+22
-1.3816e-33 -6.4672e-32 1.4497e-32
1.6020e-19 6.2625e+22 4.7428e+30
4.0095e-08 1.1943e-32 -3.5308e+35
[torch.FloatTensor of size 5x3]
# 构建张量空间,[0,1]均匀分布初始化
x = t.rand(5,3)
x
 0.9618  0.0669  0.1458
0.3154 0.0680 0.1883
0.1795 0.4173 0.0395
0.7673 0.4906 0.6148
0.0949 0.2366 0.7571
[torch.FloatTensor of size 5x3

检查尺寸

# 查看矩阵形状,返回时tuple的子类,可以直接索引
print(x.shape)
print(x.size()) """
torch.Size([5, 3])
torch.Size([5, 3])
"""

Tensor加法操作

  • 符号加
  • torch.add(out=Tensor)
  • Tensor.add(),方法后面不带有下划线时方法不会修改Tensor本身,仅仅返回新的值
  • Tensor.add_(),方法后面带有下划线时方法会修改Tensor本身,同时返回新的值
Tensor加法操作

# 加法操作:t.add()
y = t.rand(5,3) print(x + y)
print(t.add(x, y))
result = t.Tensor(5,3)
t.add(x, y, out=result)
print(result)

输出,

 1.6288  0.4566  0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3] 1.6288 0.4566 0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3] 1.6288 0.4566 0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3]

输入:

# 加法操作:Tensor自带方法
print(y)
# 不改变y本身
print("y.add():\n", y.add(x))
print(y)
print("y.add_():\n", y.add_(x))
print(y)

输出,

 0.6670  0.3897  0.7832
0.2788 0.4042 0.5476
0.2521 0.6759 0.7081
0.8825 0.8295 0.9462
0.2325 0.2286 0.7686
[torch.FloatTensor of size 5x3] y.add(): 1.6288 0.4566 0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3] 0.6670 0.3897 0.7832
0.2788 0.4042 0.5476
0.2521 0.6759 0.7081
0.8825 0.8295 0.9462
0.2325 0.2286 0.7686
[torch.FloatTensor of size 5x3] y.add_(): 1.6288 0.4566 0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3] 1.6288 0.4566 0.9290
0.5943 0.4722 0.7359
0.4316 1.0932 0.7476
1.6499 1.3201 1.5611
0.3274 0.4651 1.5257
[torch.FloatTensor of size 5x3]

Tensor索引以及和Numpy.array转换

Tensor对象和numpy的array对象高度相似,不仅可以相互转换,而且:

  1. 转换前后的两者共享内存,所以他们之间的转换很快,而且几乎不会消耗资源,这意味着一个改变另一个也随之改变
  2. 两者在调用时可以相互取代(应该是由于两者的内置方法高度相似)

虽然有Tensor.numpy()和t.from_numpy(),但是记不住的话使用np.array(Tensor)和t.Tensor(array)即可,同样可以共享内存。

Tensor索引

# Tensor索引和numpy的array类似
x[:, 1]
 0.0669
0.0680
0.4173
0.4906
0.2366
[torch.FloatTensor of size 5]

Tensor->array

Tensor和numpy转换

a = t.ones_like(x)
b = a.numpy() # Tensor->array
b
array([[ 1.,  1.,  1.],
[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]], dtype=float32)

Tensor和array的交互

import numpy as np

print(x)

# Tensor和array的交互很强,一定程度上可以相互替代

a = np.ones_like(x)
print(a)
 0.9618  0.0669  0.1458
0.3154 0.0680 0.1883
0.1795 0.4173 0.0395
0.7673 0.4906 0.6148
0.0949 0.2366 0.7571
[torch.FloatTensor of size 5x3] [[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]

array->Tensor(两者共享内存的验证)

b = t.from_numpy(a)  # array->Tensor
print(a)
print(b)
b.add_(1) # 两者共享内存
print(a)
print(b)
[[ 1.  1.  1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]] 1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
[torch.FloatTensor of size 5x3] [[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]] 2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
[torch.FloatTensor of size 5x3]

试验np.array(Tensor)和t.Tensor(array),

import numpy as np
x = t.rand(5,3)
# Tensor和array的交互很强,一定程度上可以相互替代
a = np.ones_like(x)
print(a)
b = t.Tensor(a) # array->Tensor
print(a)
print(b)
b.add_(1) # 两者共享内存
print(a)
print(b)
print(np.array(x))
[[ 1.  1.  1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]] 1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
[torch.FloatTensor of size 5x3] [[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]
[ 2. 2. 2.]] 2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
[torch.FloatTensor of size 5x3] [[ 0.95334041 0.48346853 0.86516887]
[ 0.0904668 0.05142063 0.42738861]
[ 0.7112515 0.45674682 0.39708138]
[ 0.06700033 0.90959501 0.4757393 ]
[ 0.6760695 0.83767009 0.1341657 ]]

最后,实验以下cpu加速,当然,由于我的笔记本没有加速,所以条件是不满足的。

if t.cuda.is_available():
x = x.cuda()
y = y.cuda()
x+y

『PyTorch』第二弹重置_Tensor对象的更多相关文章

  1. 『PyTorch』第二弹_张量

    参考:http://www.jianshu.com/p/5ae644748f21# 几个数学概念: 标量(Scalar)是只有大小,没有方向的量,如1,2,3等 向量(Vector)是有大小和方向的量 ...

  2. 关于『HTML5』:第二弹

    关于『HTML5』:第二弹 建议缩放90%食用 咕咕咕咕咕咕咕!!1 (蒟蒻大鸽子终于更新啦) 自开学以来,经过了「一脸蒙圈的 半期考试」.「二脸蒙圈的 体测」的双重洗礼,我终于有空肝 HTML5 辣 ...

  3. 关于『Markdown』:第二弹

    关于『Markdown』:第二弹 建议缩放90%食用 道家有云:一生二,二生三,三生万物 为什么我的帖子不是这样 各位打工人们! 自从我学了Markdown以来 发现 Markdown 语法真的要比 ...

  4. 关于『HTML』:第二弹

    关于『HTML』:第二弹 建议缩放90%食用 第二弹! 它来了! 它来了! 我竟然没有拖更,对了,你们昨天用草稿纸了么 开始正文之前提一个问题:大家知道"%%%"是什么意思吗?就这 ...

  5. 『PyTorch』第九弹_前馈网络简化写法

    『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下 在前面的例子中,基本上都是将每一层的输出直接作为下一层的 ...

  6. 『PyTorch』第一弹_静动态图构建if逻辑对比

    对比TensorFlow和Pytorch的动静态图构建上的差异 静态图框架设计好了不能够修改,且定义静态图时需要使用新的特殊语法,这也意味着图设定时无法使用if.while.for-loop等结构,而 ...

  7. 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归

    Step1: 目标: 使用线性模拟器模拟指定的直线:y = 0.1*x + 0.3 代码: import tensorflow as tf import numpy as np import matp ...

  8. 『MXNet』第二弹_Gluon构建模型

    上节用了Sequential类来构造模型.这里我们另外一种基于Block类的模型构造方法,它让构造模型更加灵活,也将让你能更好的理解Sequential的运行机制. 回顾: 序列模型生成 层填充 初始 ...

  9. 关于『Markdown』:第一弹

    关于『Markdown』:第一弹 建议缩放90%食用 声明: 在我之前已有数位大佬发布 "Markdown" 的语法知识点, 在此, 仅整理归类以及补缺, 方便阅读. 感谢 C20 ...

随机推荐

  1. sublime工具安装完成后使用Emmet加快前端页面的开发速度

    sublime的安装这里就不介绍了,很多人看到有些人在使用sublime时使用了一些快捷键非常快速的搭建一个简单的html,简单的结构就打起来了.不需要手动一个标签一个标签写. 其实是他们安装了Emm ...

  2. ES6学习--对象属性的遍历

    ES6一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性). (2)Object.keys(obj) Object. ...

  3. Python Web学习笔记之SSL,TLS,HTTPS

    一. SSL 1. SSL简介 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可 ...

  4. 一个风控计算负载过高到mysql主从拆分暴露的各种设计复杂性问题以及解决方法总结

    在很多系统(包括金融类和非金融类)中,其实有大量的系统在很长的一段时间内(具体多长时间视业务的成功与否而定)都是混合型系统,也就是同时具有OLTP+OLAP的业务.我们说任何形式的存在在特定阶段都是合 ...

  5. Hive-复制表

    非分区表复制 复制一张非分区表,使用CREATE TABLE IF NOT EXISTS AS SELECT * FROM tb_name;只复制表结构,CREATE TABLE IF NOT EXI ...

  6. 20145122《Java程序设计》第九周学习总结

    教材学习内容总结 1.JDBC代表Java数据库连接,这是一个标准的Java API与数据库无关的与Java编程语言之间的和大多数数据库连接.JDBC API支持两层和三层的处理模式对数据库的访问,但 ...

  7. dp练习 2016.2.24

    很经典的一道状压dp(似乎叫做旅行商问题),用f[i][s]表示在到达点i,已经经过的城市用二进制表示为s,于是方程就很简单了: f[i][s] = min { f[j][s ^ (1 << ...

  8. Java集合总结(List、Map、Set)

    集合的引入 当我们有种需求,需要存储多个元素的结构时,我们前面讲过数组,数组可以存储.但是数组也有它的弊端,使用的时候,必须先定义好长度,也就是数组的长度是固定,不能根据我们的需求自动变长或者变短. ...

  9. word2vec 中的数学原理详解(一)目录和前言【转】

    本文转载自:https://blog.csdn.net/itplus/article/details/37969519 word2vec 是 Google 于 2013 年开源推出的一个用于获取 wo ...

  10. apache2.4配置多个端口对应多个目录

    文件 /usr/local/apache/conf/extra/httpd-vhosts.conf 的内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 NameVir ...