张量、数组

@[TOC]pytorch作业(第1周第1节)

pytorch作业(第1周第1节)

1. 张量与矩阵、向量、标量的关系是怎么样的?

答:
  tensor是pytorch最基本的操作对象,表示的是一个多维的矩阵。
  tensor与numpy相对应,可与numpy的ndarray相互转换。但pytorch可以再GPU上运行,ndarray只能在CPU上运行。
  张量(tensor)是就是神经网络里的数组,张量与“列表”和“数组”之间的区别就是在于:
  tensor可以轻易地进行卷积,激活,上下采样,微分求导等操作,而numpy数组就不行,普通的数组要先转化为tensor格式才行,列表也是这个道理。所以为了其实功能的简单实现,得先将数组或列表转化为tensor格式。
另外:
    相同:
        tensor内部的数据类型为ndarray类型。

    区别:
        tensor可以有加速器内存(如GPU)支持,既可以在CPU上运行也可以在GPU上运行。ndarray只能在CPU上运行。
        ndarray在CPU上运行,因此可以改变其数值。tensor的值可以驻留在GPU上加速,GPU不具有改变元素值的能力,因此tensor的值不可以改变。
补充:
        张量(tensor):可以表示0阶到n阶的数组:
        • 0阶张量(标量):单独的一个数
        • 1阶张量(向量):一维数组
        • 2阶张量(矩阵):二维数组
        • n阶张量(张量):n维数组

        •标量是0阶张量,向量是一阶张量。举例:
        •标量就是知道棍子的长度,但是你不会知道棍子指向哪儿。
        •向量就是不但知道棍子的长度,还知道棍子指向前面还是后面。
        •张量就是不但知道棍子的长度,也知道棍子指向前面还是后面,还能知道这棍子又向上/下和左/右偏转了多少。
参考网址:

  1. https://www.cnblogs.com/icmzn/p/11176298.html

  2. https://blog.csdn.net/weixin_40744639/article/details/100837142

2. Variable“赋予”张量什么功能?

答:
    0.4.0 版本后Variable已并入Tensor
    Variable是torch.autograd中的数据类型,主要用于封装Tensor:
      data: 被包装的Tensor
      grad: data的梯度
      grad_fn: 创建Tensor的Function,是自动求导的关键
      requires_grad:指示是否需要梯度
      is_leaf:指示是否叶子结点
##3. 采用torch.from.numpy创建张量,并打印查看ndarray和张量数据的地址:
答:

import torch
import numpy as np
arr = np.array(((1,2,3),(4,5,6)))
tensorA = torch.from_numpy(arr)
print("arr的值是:{}\n 数据类型是:{}\n 地址是:{}".format(arr, type(arr), id(arr)))
print("****** 我是分割线 ******")
print("tensorA:{}\n 数据类型是:{}\n 地址是:{}".format(tensorA, type(tensorA),id(tensorA)))

显示结果:

arr的值是:[[1 2 3]
 [4 5 6]]
 数据类型是:<class 'numpy.ndarray'>
 地址是:2423848714128
****** 我是分割线 ******
tensorA:tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
 数据类型是:<class 'torch.Tensor'>
 地址是:2423304497408

实现torch.normal()创建张量的四种模式

torch.normal()

功能:生成正态分布
    mean为标量,std为标量
    mean为标量,std为张量
    mean为张量,std为标量
    mean为张量,std为张量

(1) 模式1(mean为标量,std为标量):

flag = True
# flag = False
if flag:
    import torch
    import numpy as np
    mean = 0
    std = 1
    t_normal = torch.normal(mean, std , size=(3,4))
    print("t_normal:{}".format(t_normal))
    print("mean的数据类型:{}".format(type(mean)))
    print("std的数据类型:{}".format(type(std)))
    print("t_normal数据类型:{}".format(type(t_normal)))

结果:

t_normal:tensor([[-0.0052,  2.0067,  0.3480, -0.0119],
        [-0.0742, -1.7621,  0.0556, -0.2403],
        [ 0.4686,  0.2695, -0.1695,  0.3453]])
mean的数据类型:<class 'int'>
std的数据类型:<class 'int'>
t_normal数据类型:<class 'torch.Tensor'>

(2) 模式2(mean为标量,std为张量):

import torch
    import numpy as np
    mean = 0
    std = np.array(((1.,2.,3.),(4.,5.,6.)))
    t_std = torch.from_numpy(std)
    t_normal = torch.normal(mean, t_std)
    print("t_normal:{}".format(t_normal))
    print("mean的数据类型:{}".format(type(mean)))
    print("std的数据类型:{}".format(type(std)))
    print("t_std的数据类型:{}".format(type(t_std)))
    print("t_normal数据类型:{}".format(type(t_normal)))

结果:

t_normal:tensor([[ 0.4008,  3.2744, -0.9333],
        [-3.5875,  2.4900, -2.7482]], dtype=torch.float64)
mean的数据类型:<class 'int'>
std的数据类型:<class 'numpy.ndarray'>
t_std的数据类型:<class 'torch.Tensor'>
t_normal数据类型:<class 'torch.Tensor'>

(3) 模式3(mean为张量,std为标量):

    import torch
    import numpy as np
    mean =torch.tensor(((1.,2.,3.),(4.,5.,6.)),
                       dtype=torch.float)
    std = 1
    t_normal = torch.normal(mean, std)
    print("t_normal:{}".format(t_normal))
    print("mean的数据类型:{}".format(type(mean)))
    print("std的数据类型:{}".format(type(std)))
    print("t_normal数据类型:{}".format(type(t_normal)))

结果:

t_normal:tensor([[0.1174, 1.7154, 2.8272],
        [3.0788, 6.0400, 3.7259]])
mean的数据类型:<class 'torch.Tensor'>
std的数据类型:<class 'int'>
t_normal数据类型:<class 'torch.Tensor'>

(4) 模式4(mean为张量,std为张量):

    import torch
    import numpy as np
    mean =torch.tensor(((1.,2.,3.),(4.,5.,6.)),
                       dtype=torch.float)
    std = torch.tensor(((2., 3., 4.), (5., 6., 7.)),
                        dtype=torch.float)
    t_normal = torch.normal(mean, std)
    print("t_normal:{}".format(t_normal))
    print("mean的数据类型:{}".format(type(mean)))
    print("std的数据类型:{}".format(type(std)))
    print("t_normal数据类型:{}".format(type(t_normal)))

结果:

t_normal:tensor([[2.8304, 0.9465, 1.8128],
        [5.0847, 1.7235, 4.8511]])
mean的数据类型:<class 'torch.Tensor'>
std的数据类型:<class 'torch.Tensor'>
t_normal数据类型:<class 'torch.Tensor'>
  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值