『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. python webdriver 从无到有搭建数据驱动自动化测试框架的步骤和总结

    一步一步搭建数据驱动测试框架的过程和总结 跟吴老学了搭建自动化数据驱动的框架后,我在自己练习的时候,尝试从简单的程序进行一点一点的扩展和优化,到实现这个数据驱动的框架. 先说一下搭建自动化测试框架的目 ...

  2. Node.js最新技术栈之Promise篇

    前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...

  3. IEEE发布2017年编程语言排行榜:Python高居首位,java第三,php第八

    2017年7月18日,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜.因为有各种不同语言的排行,所以 IEEE Spectrum 依据不同的变量对流行度进行了排行.据 IEEE Spe ...

  4. 通过Jenkins + Docker实现antdPro自动化推送私服、自动容器化部署功能

    Docker与Docker私服 1. 安装docker https://docs.docker.com/install/ 2. 配置docker镜像加速 https://www.daocloud.io ...

  5. Core Java 2

    p267~p270: 1.一个方法不仅需要告诉编译器将要返回什么值, 还要告诉编译器有可能发生什么错误(以便在错误发生时用妥善的方式处理错误). 2.方法应该在首部声明所有可能抛出的异常. 3.方法抛 ...

  6. troubleshooting-sqoop mysql导入hive 报:GC overhead limit exceeded

    Halting due to Out Of Memory Error...18/09/13 21:42:17 INFO mapreduce.Job: Task Id : attempt_1536756 ...

  7. 20145105 《Java程序设计》第6周学习总结

    20145105 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 一.InputStream与OutputStream (一)串流设计的概念 输入串流代表对象:j ...

  8. 20145309李昊 WEB基础实践

    本实验同学帮助下完成 实验问题回答 1.什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择 ...

  9. Android实践项目汇报(总结)-修改

    天气客户端开发报告 1系统需求分析 1.1功能性需求分析 天气预报客户端,最基本就是为用户提供准确的天气预报信息.天气查询结果有两种:一种是当天天气信息,信息结果比较详细,除温度.天气状况外还可以提示 ...

  10. 如何替换vi的配色方案

    答: 1.获取配色方案 git clone git://github.com/altercation/vim-colors-solarized.git ~/.vim/bundle/vim-colors ...