『PyTorch』第二弹重置_Tensor对象
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对象高度相似,不仅可以相互转换,而且:
- 转换前后的两者共享内存,所以他们之间的转换很快,而且几乎不会消耗资源,这意味着一个改变另一个也随之改变
- 两者在调用时可以相互取代(应该是由于两者的内置方法高度相似)
虽然有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对象的更多相关文章
- 『PyTorch』第二弹_张量
参考:http://www.jianshu.com/p/5ae644748f21# 几个数学概念: 标量(Scalar)是只有大小,没有方向的量,如1,2,3等 向量(Vector)是有大小和方向的量 ...
- 关于『HTML5』:第二弹
关于『HTML5』:第二弹 建议缩放90%食用 咕咕咕咕咕咕咕!!1 (蒟蒻大鸽子终于更新啦) 自开学以来,经过了「一脸蒙圈的 半期考试」.「二脸蒙圈的 体测」的双重洗礼,我终于有空肝 HTML5 辣 ...
- 关于『Markdown』:第二弹
关于『Markdown』:第二弹 建议缩放90%食用 道家有云:一生二,二生三,三生万物 为什么我的帖子不是这样 各位打工人们! 自从我学了Markdown以来 发现 Markdown 语法真的要比 ...
- 关于『HTML』:第二弹
关于『HTML』:第二弹 建议缩放90%食用 第二弹! 它来了! 它来了! 我竟然没有拖更,对了,你们昨天用草稿纸了么 开始正文之前提一个问题:大家知道"%%%"是什么意思吗?就这 ...
- 『PyTorch』第九弹_前馈网络简化写法
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下 在前面的例子中,基本上都是将每一层的输出直接作为下一层的 ...
- 『PyTorch』第一弹_静动态图构建if逻辑对比
对比TensorFlow和Pytorch的动静态图构建上的差异 静态图框架设计好了不能够修改,且定义静态图时需要使用新的特殊语法,这也意味着图设定时无法使用if.while.for-loop等结构,而 ...
- 『TensorFlow』第二弹_线性拟合&神经网络拟合_恰是故人归
Step1: 目标: 使用线性模拟器模拟指定的直线:y = 0.1*x + 0.3 代码: import tensorflow as tf import numpy as np import matp ...
- 『MXNet』第二弹_Gluon构建模型
上节用了Sequential类来构造模型.这里我们另外一种基于Block类的模型构造方法,它让构造模型更加灵活,也将让你能更好的理解Sequential的运行机制. 回顾: 序列模型生成 层填充 初始 ...
- 关于『Markdown』:第一弹
关于『Markdown』:第一弹 建议缩放90%食用 声明: 在我之前已有数位大佬发布 "Markdown" 的语法知识点, 在此, 仅整理归类以及补缺, 方便阅读. 感谢 C20 ...
随机推荐
- Unity3D关于VR的Demo(一)
https://blog.csdn.net/qq_15807167/article/details/52048998?locationNum=8&fps=1 阅读数:9716 最近有点忙,只有 ...
- Django框架介绍之一
这片博文就是对django有个大概的了解,通俗的说,就是先让django跑起来. django安装 在linux上安装如下: 源码安装: tar -zxvf Django-1.9.13.tar.gz ...
- Unable to load the Wrapper's native library because none of the following files及解决方法
在有几个应用中,在启动的时候发现下列警告: The version of the script (3.5.29) doesn't match the version of this Wrapper ( ...
- zabbix-server新增zabbix-agent
zabbix监控系统搭建好了之后,就需要为各种角色host加入进来,现在新增一台zabbix-agent: 1.在172.16.23.128上安装zabbix-agent,zabbix-server: ...
- 20165211 预备作业3 Linux安装与学习
20165211 预备作业3 Linux安装与学习 1. Linux安装 涉及软件:VirtualBox,Ubuntu 参考教程:基于VirtualBox安装Ubuntu图文教程 安装过程的问题 在安 ...
- DD-WRT自定义脚本更新花生壳DDNS
N年以前买了一个tp-link 841n v7,一直用的还算可以吧,除了不定期重启路由器,不然网速慢的龟爬啊!这也是TP原厂固件的通病,于是刷了DD-WRT,话说DD确实很爽,除了功能强大之外,而且很 ...
- swift设计模式学习 - 代理模式
移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 代理模式 代理模式为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象 ...
- git源码阅读
https://github.com/git-for-windows/git/issues/1854 https://github.com/git-for-windows/git/pull/1902/ ...
- requirejs概念
- LLDP协议、STP协议 笔记
参考: 数据链路层学习之LLDP 生成树协议 LLDP协议.STP协议 笔记 LLDP 提出背景: 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加 ...