加入收藏 | 设为首页 | 会员中心 | 我要投稿 驾考网 (https://www.jiakaowang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Tenso数据结构是啥样的 Tensor数据类型有哪些

发布时间:2023-10-05 12:47:58 所属栏目:语言 来源:
导读:很多朋友都对“Tenso数据结构是什么样的,Tensor数据类型有哪些”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧

很多朋友都对“Tenso数据结构是什么样的,Tensor数据类型有哪些”的内容比较感兴趣,对此小编整理了相关的知识分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获,那么感兴趣的朋友就继续往下看吧!

Tensor 可以使用 torch.tensor() 转换 Python 的 list 或序列数据生成,生成的是dtype 默认是 torch.FloatTensor。

注意 torch.tensor() 总是拷贝 data。如果你有一个 Tensor data 并且仅仅想改变它的 requires_grad 属性,可用 requires_grad_() 或者 detach() 来避免拷贝。如果你有一个 numpy 数组并且想避免拷贝,请使用 torch.as_tensor()。

1,指定数据类型的 Tensor 可以通过传递参数 torch.dtype 和/或者 torch.device 到构造函数生成:

注意为了改变已有的 tensor 的 torch.device 和/或者 torch.dtype, 考虑使用 to() 方法.

>>> torch.ones([2,3], dtype=torch.float64, device="cuda:0")

tensor([[1., 1., 1.],

[1., 1., 1.]], device='cuda:0', dtype=torch.float64)

>>> torch.ones([2,3], dtype=torch.float32)

tensor([[1., 1., 1.],

[1., 1., 1.]])

2,Tensor 的内容可以通过 Python索引或者切片访问以及修改:

>>> matrix = torch.tensor([[2,3,4],[5,6,7]])

>>> print(matrix[1][2])

tensor(7)

>>> matrix[1][2] = 9

>>> print(matrix)

tensor([[2, 3, 4],

[5, 6, 9]])

登录后复制

3,使用 torch.Tensor.item() 或者 int() 方法从只有一个值的 Tensor中获取 Python Number:

>>> x = torch.tensor([[4.5]])

>>> x

tensor([[4.5000]])

>>> x.item()

4.5

>>> int(x)

4

登录后复制

4,Tensor可以通过参数 requires_grad=True 创建, 这样 torch.autograd 会记录相关的运算实现自动求导:

>>> x = torch.tensor([[1., -1.], [1., 1.]], requires_grad=True)

>>> out = x.pow(2).sum()

>>> out.backward()

>>> x.grad

tensor([[ 2.0000, -2.0000],

[ 2.0000, 2.0000]])

登录后复制

5,每一个 tensor都有一个相应的 torch.Storage 保存其数据。tensor 类提供了一个多维的、strided 视图, 并定义了数值操作。

torch.Tensor 是默认的 tensor 类型(torch.FloatTensor)的简称,即 32 位浮点数数据类型。

Tensor 的属性

Tensor 有很多属性,包括数据类型、Tensor 的维度、Tensor 的尺寸。

数据类型:可通过改变 torch.tensor() 方法的 dtype 参数值,来设定不同的 tensor 数据类型。

维度:不同类型的数据可以用不同维度(dimension)的张量来表示。标量为 0 维张量,向量为 1 维张量,矩阵为 2 维张量。彩色图像有 rgb 三个通道,可以表示为 3 维张量。视频还有时间维,可以表示为 4 维张量,有几个中括号 [ 维度就是几。可使用 dim() 方法 获取 tensor 的维度。

尺寸:可以使用 shape属性或者 size()方法查看张量在每一维的长度,可以使用 view()方法或者reshape() 方法改变张量的尺寸。

样例代码如下:

matrix = torch.tensor([[[1,2,3,4],[5,6,7,8]],

[[5,4,6,7], [5,6,8,9]]], dtype = torch.float64)

print(matrix) # 打印 tensor

print(matrix.dtype) # 打印 tensor 数据类型

print(matrix.dim()) # 打印 tensor 维度

print(matrix.size()) # 打印 tensor 尺寸

print(matrix.shape) # 打印 tensor 尺寸

matrix2 = matrix.view(4, 2, 2) # 改变 tensor 尺寸

print(matrix2)

Tensor 与 ndarray

1,张量和 numpy 数组。可以用 .numpy() 方法从 Tensor 得到 numpy 数组,也可以用 torch.from_numpy 从 numpy 数组得到Tensor。这两种方法关联的 Tensor 和 numpy 数组是共享数据内存的。可以用张量的 clone方法拷贝张量,中断这种关联。

arr = np.random.rand(4,5)

print(type(arr))

tensor1 = torch.from_numpy(arr)

print(type(tensor1))

arr1 = tensor1.numpy()

print(type(arr1))

"""

<class 'numpy.ndarray'>

<class 'torch.Tensor'>

<class 'numpy.ndarray'>

"""

2,item() 方法和 tolist() 方法可以将张量转换成 Python 数值和数值列表

# item方法和tolist方法可以将张量转换成Python数值和数值列表

scalar = torch.tensor(5) # 标量

s = scalar.item()

print(s)

print(type(s))

tensor = torch.rand(3,2) # 矩阵

t = tensor.tolist()

print(t)

print(type(t))

"""

1.0

<class 'float'>

[[0.8211846351623535, 0.20020723342895508], [0.011571824550628662, 0.2906131148338318]]

<class 'list'>

"""

创建 Tensor

创建 tensor ,可以传入数据或者维度,torch.tensor() 方法只能传入数据,torch.Tensor() 方法既可以传入数据也可以传维度,强烈建议 tensor() 传数据,Tensor() 传维度,否则易搞混。

样例代码:

>>> torch.rand([1,1,3,3])

tensor([[[[0.3005, 0.6891, 0.4628],

[0.4808, 0.8968, 0.5237],

[0.4417, 0.2479, 0.0175]]]])

>>> torch.normal(2, 3, size=(1, 4))

tensor([[3.6851, 3.2853, 1.8538, 3.5181]])

>>> torch.full([2, 2], 4)

tensor([[4, 4],

[4, 4]])

>>> torch.arange(0,10,2)

tensor([0, 2, 4, 6, 8])

>>> torch.eye(3,3)

tensor([[1., 0., 0.],

[0., 1., 0.],

[0., 0., 1.]])

上述内容具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多"Tenso数据结构是什么样的,Tensor数据类型有哪些"的内容,大家可以关注其它相关文章。

(编辑:驾考网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章