pytorch作为一款经典的深度学习工具,几乎统治了科研/学生党在深度学习工具领域的全部江山。
从本篇博客开始,我将会陆续更新一些关于pytorch的基础用法和实战操作。

文章目录

  • 1 Tensor简介
  • 2 使用特定数据创建Tensor
    • 2.1 使用numpy格式的数据创建
    • 2.2 直接输入数据创建
    • 2.3 元素值相同矩阵的创建
    • 2.4 连续数据range的创建
    • 2.5 特殊矩阵的创建
  • 3 使用随机数据创建Tensor
    • 3.1 一般形式随机数据创建
    • 3.2 满足正太分布特性的随机数据创建
  • 4 总结

1 Tensor简介

Tensor又名为张量,简单来说Tensor就是一个多维数组。而Tensor提出的目的是能够创造更高维度的矩阵、向量。可以理解为:tensor就是pytorch中表示矩阵的一种数据形式,就像在numpy中创建的矩阵的数据格式是ndarray。
pytroch中所有的操作都是基于Tensor的,因此理解Tensor的含义并能够自由的创建tensor是十分必要的。

2 使用特定数据创建Tensor

2.1 使用numpy格式的数据创建

相较于直接创建Tensor类型的矩阵,我们更了解的是在numpy等包上创建矩阵。为了更好的理解Tensor中的矩阵,就先介绍如何将现有的numpy矩阵转化成Tensor中的矩阵。上文说过tensor就是pytorch中的一种矩阵形式,因此pytorch中集成了将numpy创建的矩阵数据转化成Tensor的方法:
torch.from_numpy()

import torch
import numpy as np
a = np.array([3.0, 4.0, 5.0])
b = torch.from_numpy(a)
print(b)
"""
输出结果:
tensor([3., 4., 5.], dtype=torch.float64)
"""

2.2 直接输入数据创建

方法:

直接输入并创建:
torch.tensor()
输入数据并指定数据的类型(int/float/double):
torch.IntTensor()
torch.FloatTensor()
torch.DoubleTensor()
使用方法和numpy.array()类似

##########################################
#1、直接输入数据创建
a = torch.tensor([[3, 4, 5],[6, 7, 8]])
print(a)
print(a.type())   #数据类型
'''
输出结果:
tensor([[3, 4, 5],[6, 7, 8]])
torch.LongTensor
'''
#########################################
#2、输入数据并指定数据类型创建
b = torch.FloatTensor([[3, 4, 5],[6, 7, 8]])
print(b)
print(b.type())
'''
输出结果:
tensor([[3., 4., 5.],[6., 7., 8.]])
torch.FloatTensor
'''

2.3 元素值相同矩阵的创建

在一些实际应用中,可能会遇到一些使用蒙板Tensor的情况,例如:全0矩阵,全1矩阵。这中tensor的创建方法为:

  • torch.full():接收参数为shape,x,输出一个shape大小的元素全为x的tensor
###################################################
#torch.full()方法创建
a = torch.full((2,3),1)
print(a)
print(a.type())
"""
输出结果:
tensor([[1, 1, 1],[1, 1, 1]])
torch.LongTensor
"""

2.4 连续数据range的创建

有些时候,可能会使用到一些连续的数据,类似等差序列等。这时可以使用:

  • torch.arange():接收参数:a,b,step,输出[a,b)范围内step步长的等差序列组成的tensor,数据类型为int
  • torc.range():接收参数:a,b,step,输出[a,b]范围内step步长的等差序列组成的tensor,数据类型为float

注:.arrange()方法和.range()方法的区别在于:.range()方法可以输出结果包含区间右侧b这个数值,且.range()方法的数据类型为float。

###################################################
#torch.arange()方法创建
a = torch.arange(0,10,2)
print(a)
print(a.type())
"""
输出结果:
tensor([0, 2, 4, 6, 8])
torch.LongTensor
"""
###################################################
#torch.range()方法创建
b = torch.range(0,10,2)
print(b)
print(b.type())
"""
输出结果:
tensor([ 0.,  2.,  4.,  6.,  8., 10.])
torch.FloatTensor
"""

2.5 特殊矩阵的创建

在数学计算中会经常使用到全0矩阵、全1矩阵、单位矩阵。其创建方法如下:

  • torch.zeros():接收参数为shape,输出一个shape大小的全0 Tensor
  • torch.ones():接收参数为shape,输出一个shape大小的全1 Tensor
  • torch.eye():接收参数为shape,输出一个shape大小的单位矩阵Tensor

注:关于全0和全1矩阵2.3中介绍的torch.full方法也可以实现,在实际中要活学活用。

###################################################
# torch.zeros()方法创建
a = torch.zeros(3,3)
print(a)
print(a.type())
"""
输出结果:
tensor([[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])
torch.FloatTensor
"""
###################################################
#torch.ones()方法创建
b = torch.ones(3,3)
print(b)
print(b.type())
"""
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
torch.FloatTensor
"""
###################################################
#torch.eye()方法创建
c = torch.eye(3,3)
print(c)
print(c.type())
"""
输出结果:
tensor([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])
torch.FloatTensor
"""

3 使用随机数据创建Tensor

3.1 一般形式随机数据创建

方法:

  • torch.rand():输入参数为一个shape,创建指定形状大小的tensor,数据为Float类型的随机数
  • torch.randint():指定数据范围为的随机tensor创建。输入参数为一个a,b,(x,y,…),创建(x,y,…)大小的tensor,数据的范围为[a,b)
  • torch.rand_like():输入参数为一个Float类型的tensor,创建一个与输入tensor数据同大小的矩阵,数据为与原始tensor相同类型的随机数(Float)
################################################
#torch.randint()方法创建
b = torch.randint(1,10,(2,3))
print(b)
print(b.type())
"""
输出结果:
tensor([[9, 3, 6],[4, 1, 1]])
torch.LongTensor
"""
################################################
#torch.rand_like()方法创建
c = torch.rand_like(a)
print(c)
print(c.type())
"""
输出结果:
tensor([[0.2113, 0.4152, 0.4709],[0.1211, 0.2513, 0.3255]])
torch.FloatTensor
"""

3.2 满足正太分布特性的随机数据创建

在代码实战中,考虑到网络的学习特性,很多tensor并不会随意的对变量进行初始化,满足正太分布的随机初始化因为其良好的数据分布在随机数据创建中更为常用。这里也建议大家在搭建神经网络初始化变量时(尤其时涉及到需要学习的变量),不要随意使用那些数据范围和分布规律杂乱无知的初始化方法,这会给网络后期的学习造成很大问题。
方法:

  • torch.randn():接受参数为shape,输出一个数据满足标准正太分布(0,1)的tensor
  • torch.normal():接受参数为:m,s,shape,分别为所创建数据的均值,标准差和形状,输出一个满足上述参数的广义的正太分布tensor
###################################################
#torch.randn()方法创建
a = torch.randn(2,3)
print(a)
print(a.type())
"""
输出结果:
tensor([[ 1.3057, -0.6226, -0.1231],[ 0.0392, -1.6814,  0.4482]])
torch.FloatTensor
"""
###################################################
#torch.normal()方法创建
b = torch.normal(1,10,(2,3))
print(b)
print(b.type())
"""
输出结果:
tensor([[20.1989,  0.9083, -7.3761],[-5.6195,  6.6749,  2.7636]])
torch.FloatTensor
"""

4 总结

Tensor是pytorch的基本数据单位,掌握其创建方法是pytorch的学习基础。在理解上不要被它看似高大上的解释所阻碍,就把它想象成numpy的矩阵。而且在实际的Tensor创建中,很多方法都和numpy是相通的。如果在Tensor中遇到问题,多想想这件事在numpy中该如何处理,然后把处理思路移植到pytorch上基本就能解决这一问题。记住:在编程中语法是次要的,排在第一位的永远是思想。

pytorch入门篇1 创建tensor相关推荐

  1. 【CEGUI】CEGUI入门篇之创建window(四)

    以下内容翻译自http://static.cegui.org.uk/docs/0.8.7/window_tutorial.html 这里介绍CEGUI window的创建及如何让window在屏幕上显 ...

  2. vue/cli是什么?vue/cli如何使用? 入门篇(安装创建,组件使用,定义路由,项目导出) ∠( °ω°)/ 前端知识

    文章目录 简介 安装 安装nodejs nvm npm换源 单次换源 永久换源 方法一 方法二 Vue/cli安装 创建Vue/cli项目 解决常见错误 用命令行创建项目 可视化界面创建 项目目录简介 ...

  3. 【SSRS】入门篇(二) -- 建立数据源

    原文:[SSRS]入门篇(二) -- 建立数据源 通过 [SSRS]入门篇(一) -- 创建SSRS项目 这篇,我们建立了一个SSRS项目: 接下来,我们以 AdventureWorks2012 示例 ...

  4. c# imager让图片有圆角unity_C# 10分钟完成百度图片提取文字(文字识别)——入门篇...

    现在图片文字识别已经很成熟了,比如qq长按图片,点击图片识别就可以识别图片的文字,将不认识的.文字数量大的.或者不能赋值的值进行二次可复制功能. 我们现在就基于百度Ai开放平台进行个人文字识别,dem ...

  5. pytorch list转tensor_PyTorch入门视频笔记从数组、列表对象中创建Tensor

    关注"AI机器学习与深度学习算法"公众号选择"星标"公众号,原创干货,第一时间送达 从数组.列表对象创建 Numpy Array 数组和 Python List ...

  6. 接收list对象_PyTorch入门视频笔记从数组、列表对象中创建Tensor

    关注"AI机器学习与深度学习算法"公众号选择"星标"公众号,原创干货,第一时间送达 从数组.列表对象创建 Numpy Array 数组和 Python List ...

  7. 3D点云 (Lidar)检测入门篇 - PointPillars PyTorch实现

    3D点云 (Lidar)检测入门篇 - PointPillars PyTorch实现 完整代码:https://github.com/zhulf0804/PointPillars. 自动驾驶中基于Li ...

  8. 从 X 入门Pytorch——环境安装建议,Tensor多种构造方式,Tensor的基本操作

    本文参加新星计划人工智能(Pytorch)赛道: https://bbs.csdn.net/topics/613989052 满打满算,入门CV的坑已经快一年了,现在忙着换模型,加模块,看效果. 但是 ...

  9. PyTorch 笔记(02)— 常用创建 Tensor 方法(torch.Tensor、ones、zeros、eye、arange、linspace、rand、randn、new)

    1. Tensor 概念分类 PyTorch 中的张量(Tensor)类似 NumPy 中的 ndarrays,之所以称之为 Tensor 的另一个原因是它可以运行在 GPU 中,以加速运算. 1.1 ...

最新文章

  1. 数论(一)——素数,GCD,LCM
  2. 调用startActivityForResult后,onActivityResult立刻回调
  3. three.js 几何体-组合网格_ThreeJS 粒子系统实现雪花飘落动画
  4. Linux 命令之 tar 命令-打包和备份的归档工具(附压缩/解压工具)
  5. Abbirb120型工业机器人_ABB IRB 120工业机器人.pdf
  6. mysql8事务级别_Mysql几种事务隔离级别
  7. wordpress利用rsync同步备份
  8. AC双链路冷备份详解及配置原理
  9. 『WPF』DataGrid的使用
  10. 芒果DB:mongodb
  11. 小程序 - 修改头像功能
  12. TBSchedule原理与实践
  13. 花花公子跟风删除Facebook主页,区块链技术可打破互联网垄断
  14. 实时网速怎么看快慢_电脑怎么看网速快慢,手机网速怎么看快慢k/s-
  15. php后端经历,后端学习路线,仅供参考,个人总结
  16. 18. SELinux管理
  17. 购房指南—新房交房注意事项细节有哪些
  18. easyui treegrid实现的两种方式
  19. 你大概走了假敏捷:《手绘敏捷宝典》在此,还不来收!
  20. MOOS-ivp之第一个MOOSApp:向MOOSDB发布数据

热门文章

  1. foxmail邮箱怎么导入邮件_Foxmail怎样导入和导出邮箱账户和邮件
  2. 大数据环境下数据仓库的实践(四)—— 主题域的划分及任务和工作流的组织方式
  3. C++:66---特殊工具与技术之(不可移植的特性:位域、volatile、extern “C“链接提示)
  4. 如何把阿里图标库的图标生成代码并应用于自己的项目
  5. 【大数据开发】SparkCore——统计广告topN、基站停留时间topN、ip地址统计练习
  6. 学好计算机的用途,学电脑的用途是什么
  7. 视频网站开发:JavaWeb做一个带自定义小表情的评论功能
  8. 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯
  9. NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]
  10. oss调整图片大小宽高