美文网首页pytorch学习
pytorch基础学习(三) tensor介绍

pytorch基础学习(三) tensor介绍

作者: SnowPye | 来源:发表于2020-05-31 00:48 被阅读0次

    1. 什么是tensor

    在神经网络的计算中,数据都是以tensor(张量)的形式进行传递和运算的.
    tensor是对一类数学概念的一个概括:

    • 0维tensor = 数字 = 标量
    • 1维tensor = 序列 = 向量
    • 2维tensor = 2维序列 = 矩阵
    • ……
    • n维tensor = n维序列

    其中n也代表了访问tensor中某个元素所需要的indexs的数量,例如对于一个2维的tensor:

    a = [
    [1, 2],
    [3, 4]
    ]

    当我们想要访问3这个元素时候需要输入:

    a[1][0]
    3

    可以看到,需要2个indexs.

    2. pytorch生成tensor

    1. 可以使用torch的construct function 和factory function 生成
    import torch
    import numpy as np
    data = np.array([1, 2, 3])
    print(type(data))  # <class 'numpy.ndarray'>
    print(torch.Tensor(data))  # tensor([1., 2., 3.])  construct function  copy
    print(torch.tensor(data))  # tensor([1, 2, 3])  factory function  copy  mostly used
    print(torch.as_tensor(data))  # tensor([1, 2, 3])  factory function  share
    print(torch.from_numpy(data))  # tensor([1, 2, 3])  factory function  share 
    
    output:
     <class 'numpy.ndarray'>
    tensor([1., 2., 3.]) 
    tensor([1, 2, 3])  
    tensor([1, 2, 3])  
    tensor([1, 2, 3])  
    

    以上几种生成方式的区别如下:

    • torch.Tensor()属于construct function,可以输入list或numpy.ndarry,tensor的数据格式为float,生成的方式为copy,即对原数据进行复制,因此当原数据改动时,生成的tensor不会随之改变
    • torch.tensor()属于factory function,可以输入list或numpy.ndarry,tensor的数据格式与输入数据类型相同,生成的方式为copy,即对原数据进行复制,因此当原数据改动时,生成的tensor不会随之改变,最常使用
    • torch.as_tensor()属于factory function,可以输入list或numpy.ndarry,tensor的数据格式与输入数据类型相同,生成的方式为share,因此当原数据改动时,生成的tensor也会随之改变
    • torch.from_numpy()属于factory function,只能输入numpy.ndarry,tensor的数据格式与输入数据类型相同,生成的方式为share,因此当原数据改动时,生成的tensor也会随之改变
    1. 也可以使用torch的函数生成特定张量
    print(torch.eye(2))  # 生成阶数为2的单位矩阵
    print(torch.zeros(2, 2))  # 生成2*2的全0矩阵
    print(torch.ones(2, 2))  # 生成2*2的全1矩阵
    print(torch.rand(2, 2))  # 生成2*2的随机矩阵
    
    output:
    tensor([[1., 0.],
            [0., 1.]])
    tensor([[0., 0.],
            [0., 0.]])
    tensor([[1., 1.],
            [1., 1.]])
    tensor([[0.6819, 0.8327],
            [0.8718, 0.5971]])
    

    3. tensor的属性

    tensor主要有3个属性:rank, axes和shape

    • rank: tensor的indexs数目,axes的数目,维度,shape的长度
    • axes: tensor的轴,一个axes对应n维tensor的一个维度,例如2维tensor就有2个axes,可以形成一个平面. axes的数目就等于rank
    • shape: tensor的shape用来描述每个axes的长度,而shape的长度就等于rank(因为要描述n个axes的长度)

    举个栗子:

    t = torch.tensor([
        [1, 1, 1, 1],
        [2, 2, 2, 2],
        [3, 3, 3, 3]
    ], dtype=torch.float32)
    print(t.shape)
    print('rank of tensor: %d' % len(t.shape))
    print('number of elements: %d' % torch.tensor(t.shape).prod())
    print('number of elements: %d' % t.numel())
    
    output:
    torch.Size([3, 4])
    rank of tensor: 2
    number of elements: 12
    number of elements: 12
    

    因为t这个tensor是2维的,rank就是2.
    t有2个axes,第一个axis的长度为3,第二个axis为4,因此shape就是(3,4)
    最后两行都可以用来计算tensor中元素的个数

    相关文章

      网友评论

        本文标题:pytorch基础学习(三) tensor介绍

        本文链接:https://www.haomeiwen.com/subject/exqkzhtx.html