1216 字
6 分钟
pytorch学习04:Tensor的创建

用 numpy 创建 tensor:#

import numpy as np
import torch
a_np = np.array([2,3.3])
a_tensor = torch.from_numpy(a_np)
print("a_tensor: ", a_tensor)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alJFh91d-1627223223967)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f00cdf47-ac8a-4088-a3ba-09b209669f00/Untitled.png)]

用 list 创建 tensor#

import torch
a_list = [2,3.3]
a_torch = torch.tensor(a_list)
print("a_torch: ", a_torch)
print("a_torch.dtype: ", a_torch.dtype)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alyWwX3d-1627223223970)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ee8b79d7-b15a-4158-8ce3-e72525a984a1/Untitled.png)]

Tensor与tensor#

import torch
data = [1,2.1]
print("Tensor(data):\n", torch.Tensor(data))
print("Tensor(2,3):\n", torch.Tensor(2,3))
print("tensor(data):\n", torch.tensor(data))
try:
print("tensor(2,3):\n", torch.tensor(2,3))
except TypeError as e:
print("tensor(2,3)代码运行报错")
print(e)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DVIpX0nd-1627223223971)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/45c92f39-eefc-4aa4-812a-7fde886abfa4/Untitled.png)]

  • tensor只能转换数值数据,不能输入shape数据
  • Tensor既能转换数值数据,也能输入shape数据

未初始化#

import torch
print("torch.empty([2,3]):\n", torch.empty([2,3]))
print("torch.empty(2,3):\n", torch.empty(2,3))
# 这里等价于 torch.tensor([1,2])
print("torch.FloatTensor([2,3]):\n", torch.FloatTensor([2,3]))
print("torch.FloatTensor(2,3):\n", torch.FloatTensor(2,3))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dEeHJTMq-1627223223973)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/46d56877-e30a-4481-887a-834d3ea6859c/Untitled.png)]

  • 在创建张量后,要记得初始化,不然可能会对之后运算造成严重影响。

设置默认类型#

import torch
print(torch.tensor([1,2.3]).type())
torch.set_default_tensor_type(torch.DoubleTensor)
print(torch.tensor([1,2.3]).type())

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFxTBsKv-1627223223975)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/32c315b3-f8ff-46d2-a66e-a87efd373903/Untitled.png)]

数据初始化1,均匀分布#

import torch
def showMsg(t, tname):
print("{}:\n{}".format(tname, t))
print("{}平均值:{}\n".format(tname, t.sum() / t.numel()))
# rand函数会随机产生[0, 1)的均匀分布数值
a = torch.rand(3, 3)
showMsg(a, "rand")
# 根据输入的shape生成一个[0,1)均匀分布矩阵
a_like = torch.rand_like(a)
showMsg(a_like, "a_like")
# 输入最小值 min,最大值 max 和矩阵阶数 shape
# 生成符合均匀分布的范围为[min, max)的整形矩阵
a_int = torch.randint(1, 10, [3, 3])
showMsg(a_int, "a_int")
a_int_like = torch.randint_like(a_int, 1, 10)
showMsg(a_int_like, "a_int_like")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9RzSTfY3-1627223223976)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8dac0f82-861d-48d9-9fd3-cfcd3d7884f4/Untitled.png)]

数据初始化2,正态分布#

import torch
def showMsg(t, tname):
print("{}:\n{}".format(tname, t))
mean = t.sum() / t.numel()
print("{}平均值:{}".format(tname, mean))
print("{}方差:{}\n".format(tname, ((t - mean) ** 2).sum() / t.numel() ))
# 生成N(0,1)的标准正态分布
showMsg(torch.randn(300,300), "标准正态分布")
'''
生成符合一定条件的正态分布矩阵
torch.normal(mean, standard_Deviation, shape)
mean: 均值
standard_Deviation: 标准差
shape: 生成矩阵的阶数
'''
a = torch.normal(1, 10 ,(300, 300))
showMsg(a, "正态分布")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuOJjzIx-1627223223977)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e631db4e-1cf9-4c2f-aee9-3fd2db9c11ff/Untitled.png)]

统一初始化#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
showMsg(torch.full([2, 3], 0), "full0")
showMsg(torch.full([3, 3], 1), "full1")
showMsg(torch.full([], 2), "full2")
showMsg(torch.full([1], 3), "full3")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nqFox7bj-1627223223977)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a5e29a12-d5ab-4358-bbb2-ed8f86749f7d/Untitled.png)]

创建序列1,按步长创建#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
# 生成[0, 10)的等差数列,默认步长为1
showMsg(torch.arange(0, 10), "arange0-10")
showMsg(torch.arange(0, 10,2), "arange0-10,step=2")
# 生成[0, 10]的等差数列,默认步长为1
showMsg(torch.range(0, 10), "range0-10")
showMsg(torch.range(0, 10, 2), "range0-10,step=2")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FbsdTZB-1627223223978)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dc228da5-2cc7-406b-94a4-f7e168c1a59b/Untitled.png)]

  • 注:torch.range在使用时会报警告UserWarning,不建议使用,尽量用arange。

创建序列2,按数量创建#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
# 生成[0, 10]的等差数列,默认个数为100
showMsg(torch.linspace(0, 10), "linspace默认数量")
showMsg(torch.linspace(0, 10, steps=4), "linspace, steps=4")
# 生成[0, 10]的等差数列L1,然后以L1为幂进行运算,并返回运算结果
# 默认底为 10,生成数量为100
# 下面代码的结果等价于[10^0, 10^0.1010, ... , 10^1]
showMsg(torch.logspace(0, 1), "logspace")
# [2^0, 2^0.33, 2^0.66, 2^1]
showMsg(torch.logspace(0, 1, base=2, steps=4), "logspace,base=2, steps=4")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DedeaYWx-1627223223978)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c3888cf9-9535-43ff-904b-a73c1861e56c/20210725220738.png)]

  • 注意:使用时不指定数量会报警告UserWarnig,尽量指定生成数量steps。

创建全1矩阵、全0矩阵#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
a = torch.ones(3, 3)
showMsg(a, "全1矩阵")
showMsg(torch.ones_like(a), "全1矩阵_like")
showMsg(torch.zeros(3, 3), "全0矩阵")
showMsg(torch.zeros_like(a), "全0矩阵_like")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJ9ndvjI-1627223223979)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/125e0d73-5746-4d9a-801d-dd400d2cd75a/Untitled.png)]

创建单位矩阵#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
showMsg(torch.eye(3,3), "单位矩阵1")
showMsg(torch.eye(3,4), "单位矩阵2")
showMsg(torch.eye(3), "单位矩阵3")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1yT2gAWC-1627223223979)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/647269cb-fb28-4482-b8cb-6c293ffbdaed/Untitled.png)]

随机打乱#

import torch
def showMsg(t, tname):
print("{}:\n{}\n".format(tname, t))
# 生成[0, 10)的整数序列并打散
# 可用此来打散索引
showMsg(torch.randperm(10), "randperm")
# 简单使用例子
math_scores = [
["张三", 90],
["李四", 85]
]
english_scores = [
["张三", 80],
["李四", 90]
]
idx = torch.randperm(2)
print("姓名\t数学\t英语")
for i in idx:
print("{}\t{}\t{}".format(math_scores[i][0], math_scores[i][1], english_scores[i][1]))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-49RzJwGL-1627223223981)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b0aa5265-c14d-4198-aae9-babab68a873f/Untitled.png)]


原文链接:CSDN

pytorch学习04:Tensor的创建
https://blog.homura.work/posts/csdn/119089132/
作者
HMT
发布于
2021-07-25
许可协议
CC BY-NC-SA 4.0