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


1755

被折叠的 条评论
为什么被折叠?



