HBU_神经网络与深度学习 实验2 pytorch入门

写在前面的一些内容

  1. 本文为HBU_神经网络与深度学习实验(2022年秋)实验2的实验报告,此文的基本内容参照 神经网络与深度学习:案例与实践 - 第1章:实验基础 ,检索时请按对应题号进行检索。
  2. 本实验编程语言为Python 3,使用Pycharm进行编程,所使用解释器为Python 3.10 (pytorch).
  3. 本实验报告目录标题级别顺序:一、1. (1)
  4. 水平有限,难免有误,如有错漏之处敬请指正。

一、张量与算子的概念

1. 张量

张量概念是矢量概念的推广,矢量是一阶张量。张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数。[1] 张量 - 百度百科

张量是数据的一种存储方式,向量、矩阵等可以称为1阶或2阶张量,同理张量也可以表示n阶多维numpy数组。
下图为 [2]不同维度的张量可视化表示
不同维度的张量可视化表示
2.算子

算子是一个函数空间到函数空间上的映射O:X→X。广义上的算子可以推广到任何空间,如内积空间等。[3] 算子 - 百度百科
如果我们实现每个基础函数的前向函数和反向函数,就可以非常方便地通过这些基础函数组合出复杂函数,并通过链式法则反向计算复杂函数的偏导数。 在深度学习框架中,这些基本函数的实现称为算子(Operator,Op)。有了算子,就可以像搭积木一样构建复杂的模型。[4]

二、张量的操作

进行实验前,我们需要先导入torch包。

import torch

1. 创建张量

(1)指定数据创建张量

# 一维张量
a = torch.tensor([2.0, 3.0, 4.0])
print("一维张量:", a)

# 二维张量
b = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print("二维张量:", b)

# 多维张量
c = torch.tensor([[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]],
                  [[11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]])
print("多维张量:", c)

代码执行结果:

一维张量: tensor([2., 3., 4.])
二维张量: tensor([[1., 2., 3.],
        [4., 5., 6.]])
多维张量: tensor([[[ 1,  2,  3,  4,  5],
         [ 6,  7,  8,  9, 10]],

        [[11, 12, 13, 14, 15],
         [16, 17, 18, 19, 20]]])

显然,通过给定Python列表数据,可以创建任意维度的张量。需要注意的是,张量在任何一个维度上的元素数量必须相等
下面尝试定义一个在不同维度上元素数量不等的张量。

# 尝试定义在不同维度上元素数量不等的张量
d = torch.tensor([[1.0, 2.0], [4.0, 5.0, 6.0]])
print(d)

代码执行结果(抛出异常):

Traceback (most recent call last):
  File "C:\Users\...\DeepLearningExperiment\EX2.py", line ..., in <module>
    d = torch.tensor([[1.0, 2.0],[4.0, 5.0, 6.0]])
ValueError: expected sequence of length 2 at dim 1 (got 3)

显然,读取时读取到第二维有3个元素,与第一维不符,所以抛出元素数量不等的异常。

(2)指定形状创建张量

如果要创建一个指定形状、元素数据相同的张量,可以调用函数zeros, ones, full进行张量创建。

m, n = 2, 3

# 创建数据全为0,形状为[m, n]的张量
a = torch.zeros([2, 3])
print('zeros Tensor:', a)

# 创建数据全为1,形状为[m, n]的张量
b = torch.ones([2, 3])
print('ones Tensor:', b)

# 创建数据全为指定值,形状为[m, n]的张量,此处我们指定数据为10
c = torch.full([2, 3], 10)
print('full Tensor:', c)

代码执行结果:

zeros Tensor: tensor([[0., 0., 0.],
        [0., 0., 0.]])
ones Tensor: tensor([[1., 1., 1.],
        [1., 1., 1.]])
full Tensor: tensor([[10, 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值