『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 ...
随机推荐
- input/radio/select等标签的值获取和赋值
input/radio/select等标签的值获取和赋值,这几个是使用率最高的几个标签,获取值和赋值以及初始化自动填充数据和选择: 页面html: <div class=" " ...
- python excel操作 练习-#操作单列 #操作A到C列 #操作1到3行 #指定一个范围遍历所有行和列 #获取所有行 #获取所有列
##操作单列#操作A到C列#操作1到3行#指定一个范围遍历所有行和列#获取所有行#获取所有列 #coding=utf-8 from openpyxl import Workbook wb=Workbo ...
- MySQL数据库----存储过程
存储过程 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql -- 存储过程的优点: -- 1.程序与数据实现解耦 -- 2.减少网络传输的 ...
- 计算概论(A)/基础编程练习1(8题)/6:判断闰年
#include<stdio.h> int isLeap(int year) { // 必须先判断是平年的情况 后判断闰年的情况 == && year%!=) || yea ...
- pyDay2
内容来自廖雪峰的官方网站 1.dict 为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的.假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想 ...
- bzoj1648 / P2853 [USACO06DEC]牛的野餐Cow Picnic
P2853 [USACO06DEC]牛的野餐Cow Picnic 你愿意的话,可以写dj. 然鹅,对一个缺时间的退役选手来说,暴力模拟是一个不错的选择. 让每个奶牛都把图走一遍,显然那些被每个奶牛都走 ...
- tf.random_uniform的使用
tf.random_uniform((4, 4), minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩阵,产生于low和high之间,产生的值是均匀分布 ...
- 'telnet'不是内部或外部命令,怎么办?
['telnet'不是内部或外部命令,也不是可运行的程序或批处理文件]当你想用telnet命令时,发现提示这句话怎么办?其实很简单,接下来为大家介绍下如何使用 1. 一般只有windows7才会出现这 ...
- Python3基础 super 子类调用父类的__init__
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 安装PyInstaller打包python
安装PyInstaller 对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定: pip install pyinstaller 通常我们会下载源码包,然后进入包目录,执行 ...