『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 ...
随机推荐
- Linux基础命令---head
head 显示文件开头的几行,默认显示10行,可以使用选项-n来指定行数.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- python之路----进程(一)
一.理论知识1.操作系统发展简介 1.没有操作系统 —— 穿孔卡片 2.批处理系统 —— 串行 ,速度块 联机批处理 读磁带的时候速度快 脱机批处理 读磁带和cpu工作并发 3.多道程序系统 —— 并 ...
- MySQL笔记(六)游标练习
23.3.1 Trigger Syntax and Examples 意义不明的几道练习,留着备用. 感觉不好写,而且难以调试..不知道以后会不会有实际的应用场景. 环境:MySQL 笔记(三)由 t ...
- PHP中private和public还有protected的区别
原文链接:http://www.thinkphp.cn/code/1898.html <? //父类 class father{ public function a(){ echo " ...
- JQuery插件模板
(function($){ $.fn.插件名 = function(settings){ var defaultSettings = { } /* 合并默认参数和用户自定义参数 */settings ...
- Python3基础 dict items 以元组的形式打印出字典的每一个项
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 str count 获得子字符串出现的次数
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- E: could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporary unavailable) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is an other process using it
1. 问题详细提示如下: E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unava ...
- POJ 2752 Seek the Name, Seek the Fame(KMP中next的理解)题解
题意: 要求你给出每个前后缀相同的串的长度,比如: "alala"的前缀分别为{"a", "al", "ala", &q ...
- POJ 3162 Walking Race(树形dp+单调队列 or 线段树)
http://poj.org/problem?id=3162 题意:一棵n个节点的树.有一个屌丝爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要 ...