pytorch入门笔记(一)

开始学习pytorch, 记录学习历程

本博客为关于以下函数的实例

np.ones
torch.tensor
torch.from_numpy
torch.zeros
torch.zeros_like
torch.full
torch.arange
torch.linspace
torch.logspace
torch.eye
torch.randperm
torch.randint
torch.normal

以及
对于broadcast机制的理解见代码中注释部分

import torch
import numpy as np

torch.manual_seed(1)
flag = False

# 直接创建数据
if flag:
    arr = np.ones((3, 3))
    print("ndarray的数据类型: ", arr.dtype)
    r = torch.tensor(arr)
    t = torch.tensor(arr, device='cuda')
    print(t)
    print(r)

###############################################  example 2
# 验证tensor与array共享内存
# 将一个Torch张量转换为一个NumPy数组是轻而易举的事情,反之亦然。
# Torch张量和NumPy数组将共享它们的底层内存位置,因此当一个改变时,另外也会改变。
flag = False
if flag:

   arr = np.array([[1, 2, 3], [4, 5, 6]])
   t = torch.from_numpy(arr)

   print("numpy array: ", arr)
   print("tensor : ", t)

  # arr[0, 0] = 0
  # print("n\修改arr后 :", arr)
  # print("numpy :", arr)
  # print("tensor :", t)

   print("\n 修改tensor")
   t[0, 0] = -10
   print("numpy array: ", arr)
   print("tensor : ", t)

################################################   example 3
# 依size创建全零张量
flag = False

if flag:
    out_t = torch.tensor([1])
    t = torch.zeros((3, 3), out=out_t)
    print(t,'\n', out_t)
    # 这里id表示返回对象的唯一标识符,其为整数
    print(id(t), id(out_t), id(t) == id(out_t))

################################################ example 4
# 依input创建全零张量
flag = False

if flag:
    input = torch.zeros((5, 5))
    t = torch.zeros_like(input)
    print(t)

################################################## example 5
# 创建指定值指定大小的张量
flag = False
if flag:
    t = torch.full((5, 5), 8, dtype=torch.float16)
    print(t)

################################################# example 6
# 创建等差一维张量
flag = False
if flag:
   #  t = torch.arange(start=1, end= 10, step= 0.9)
    t = torch.arange(2, 30, 0.5)
    print(t)

################################################### examle 7
# 创建均分一维张量
flag = False

if flag:
    t1 = torch.linspace(1, 20, 10)
    t2 = torch.linspace(1, 20, 5)
    print("创建均分一维张量 (1) : ", t1)
    print("创建均分一维张量(2): ", t2)

################################################### example 8
# 创建对数均分张量
flag = False

if flag:
    t1 = torch.logspace(1, 20)
    t2 = torch.logspace(1, 10, 5)
    print("创建对数均分张量t1 =  : ", t1)
    print("创建对数均分张量t2 =  : ", t2)

#################################################### examle 9
# 创建二维单位对角矩阵,生成一定范围内的随机排列,生成区间范围内的整数均匀分布
flag = False

if flag:
    t1 = torch.eye(5, 5)
    t2 = torch.randperm(10)
    t3 = torch.randint(1, 10, (3, 3))
    print("创建单位对角矩阵(二维) : ", t1)
    print("生成一定范围内的随机排列 : ", t2)
    print("生成区间范围内的整数均匀分布 : ", t3)

##################################################### example 10
# 生成指定均值和方差的正态分布
# broadcast机制,
# 广播用以描述numpy中对两个形状不同的阵列进行数学计算的处理机制。
# 较小的阵列“广播”到较大阵列相同的形状尺度上,使它们对等以可以进行数学计算。
# 广播提供了一种向量化阵列的操作方式,因此Python不需要像C一样循环。
# 广播操作不需要数据复制,通常执行效率非常高。然而,有时广播是个坏主意,
# 可能会导致内存浪费以致计算减慢。
# 对两个阵进行操作时,NumPy逐元素地比较他们的形状,从后面的维度向前执行。当以下情形出现时,两个维度是兼容的:
# 1,它们相等
# 2,其中一个是1
# 如果这些条件都没有达到,
# 将会抛出错误:frames are not aligned exception,
# 表示两个阵列形状不兼容。结果阵列的尺寸与输入阵列的各维度最大尺寸相同。
# 阵列不需要有相同的维度。
# 当任何一个维度是1,那么另一个不为1的维度将被用作最终结果的维度。
# 也就是说,尺寸为1的维度将延展或“复制”到与另一个维度匹配。
# 一定要注意,执行 broadcast 的前提在于,
# 两个 ndarray 执行的是 element-wise(按位加,按位减) 的运算,
# 而不是矩阵乘法的运算,矩阵乘法运算时需要维度之间严格匹配。
# (且矩阵乘法,np.dot(A, B) 如果维度不匹配,提示的错误不会是 broadcast,而是 aligned)


# 此处均值和方差分别为标量或者张量时,就用到了broadcast机制,
# 注意,当均值和方差均为标量时需要设定size
flag = False

if flag:
    # mean: 张量 std: 张量
    mean_z = torch.arange(1, 10, dtype=torch.float)
    std_z  = torch.arange(1, 10, dtype=torch.float)
    t_z_z = torch.normal(mean_z, std_z)
    print("均值和方差均为张量生成正态分布 : ", t_z_z)
    # mean: 张量 std: 标量
    mean_z = mean_z
    std_b  = 2
    t_z_b = torch.normal(mean_z, std_b)
    print("均值为张量,方差为标量,生成正态分布 : ", t_z_b)
    # mean: 标量 std: 张量
    mean_b = 5
    std_z = std_z
    t_b_z = torch.normal(mean_b, std_z)
    print("均值为标量,方差为张量,生成正态分布 : ", t_b_z)
    # mean:标量 std: 标量
    t_b_b = torch.normal(mean_b, std_b, (3, 3))
    print("均值为标量,方差为标量,生成正态分布 : ", t_b_b)
    # 标准正态分布
    t = torch.randn(2)
    print("生成标准正态分布 : ", t)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值