通俗易懂说张量


Dan Fleisch的这段视频堪称经典,用极简单的语言与道具,为我们展示了——曾帮助爱因斯坦证明相对论,又帮助Google使Tensorflow流行天下的张量到底是什么。视频有点长,12分钟,但弄懂一个伟大的方法,还是值得的。

张量是一种表示物理量的方式,这个方式就是用

基向量

分量

组合表示物理量(Combinationof basis vector and component)。

由于基向量可以有丰富的组合,张量可以表示非常丰富的物理量。

此外,

张量所描述的物理量是不随观察者或者说参照系而变化的

,当参照系变化时(其实就是基向量变化),其分量也会相应变化,最后结果就是基向量与分量的组合(也就是张量)保持不变。这一点对于我们

构造数据对象,进而展开分析建模,有着至关重要的意义

回顾过去我们对“量”的认识过程,我们都懂得用“一个数”来表示数量(标量),用“一个数组”(列矩阵或行矩阵)来表示一个向量,这都属于代数手法。

如果采用几何手法,标量中的实数可以表示为一维坐标系(如数轴)上的一个点,复数可以表示为二维坐标系(如复平面)上的一个点。向量通常可以表示为二维、三维或更高维坐标系中的一个空间点或有向线段。

如果我们把代数手法和几何手法结合起来即采用解析几何的手法,向量又可以表示为某种坐标基向量和坐标分量的线性组合。

那么现在,我们接触的张量该如何表示呢?让我们逐“阶”而上,看看

张量的数据结构形象

1、一阶张量(向量)

不妨首先假定在三维空间中,则一个一阶张量(向量)有3个分量,可以表示为一个有序3元数组或1×3阶的行矩阵

Tj = [T1 T2 T3]

在n维空间中,一个一阶张量(向量)有n个分量,可以表示为一个有序n元数组,或表示为一个1×n阶行矩阵

Tj = [T1 T2 ...... Tn]

也就是说,一个一阶张量(向量)可以用一个行矩阵表示,似乎构成“一条直线”。

2、二阶张量

在三维空间中,一个二阶张量则有9个分量,可以表示为一个有序9元数组或3×3阶的矩阵

一般地,在n维空间中,一个二阶张量有n2个分量,可以表示为一个有序n2元数组,或表示为一个n×n阶矩阵

也就是说,一个二阶张量可以用一个矩阵表示,似乎构成“一张平面”。如下图所示: 图:二阶张量矩阵平面

3、三阶张量

在三维空间中一个三阶张量

有27个分量,似乎可以构成一组3个矩阵,每个矩阵都是3×3个元素。设想“三张平面”构成一个“立方体”。如下图所示:

图1:三阶张量数据

如果在n维空间,一个三阶张量

有n^3个分量,也可以构成n个矩阵,每个矩阵都是n×n个元素。设想“n张平面”构成一个“立方体”,好像一块积木。如下图所示:

图2:三阶张量立方体积木

4、四阶张量

继续探讨我们的“积木游戏”。在三维空间中一个四阶张量

有81个分量,似乎可以构成一组9个矩阵,每个矩阵都是3×3个元素。设想每“三张平面”构成一个“立方体”,共有3个“立方体”或曰3块“积木”。3块“积木”排成一列,好像由矩阵构成的“阵列”。

如果在n维空间,一个四阶张量

有n^4个分量,也可以构成n^2个矩阵,每个矩阵都是n×n个元素。设想每“n张平面”构成一个“立方体”(一块积木),n块积木排成一列。我们把这样相互关联的一组矩阵叫做“阵列”。如下图所示:

图3:四阶张量数据阵列

5、五阶张量

如果是n维空间中的一个五阶张量

,共有n^5个分量,则可以构成n^3个矩阵。设想每n张平面(矩阵)构成一块积木,每n块积木构成一条阵列,共有n条阵列,可以垒成“一堵墙”。假如以元素(张量的分量)为单位,这堵“墙”的高和长都是n^2,厚度是n。以3维空间为例,如下图所示:

图4:五阶张量阵列墙(设n=3)

6、六阶张量

对于6阶张量,n^6个分量可以组成n^4张矩阵平面,构成n^3块积木,再排成n^2条阵列,垒成n堵墙,最后拼成一个方垛。以3维空间为例,如下图所示:

图5:六阶张量数据方垛(设n=3)

7、M阶张量

一般地,在n维空间中的一个M阶张量共有

个分量,可以组成

张矩阵平面,构成

块积木,再排成

条阵列,垒成

堵墙,最后拼成

个方垛,再排成

条方垛阵列,......依此类推。

我的天啊!太恐怖啦!不要怕,计算机最擅长作这类数据结构的运算和处理。这就是在计算机时代的今天为什么要研究和普及张量算法的原因。

我们在探讨张量理论时,通常拿少维空间中的低阶张量作例子,除了采用数组、矩阵等代数手法表示张量外,还可以采用并矢的线性组合等解析几何的手法来表示张量。至于几何手法,除了在少维空间中一阶张量还具有几何意义之外,其它张量的几何意义也就苦无良策了。不过今天有了计算机处理张量,几何意义也就无关紧要了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用LSTM(长短期记忆网络)实现的标准demo,并附有逐行注解和通俗易懂明: ```python import torch import torch.nn as nn # 定义LSTM模型类 class LSTMModel(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(LSTMModel, self).__init__() self.hidden_size = hidden_size # 定义LSTM层 self.lstm = nn.LSTM(input_size, hidden_size) # 定义全连接层 self.fc = nn.Linear(hidden_size, output_size) def forward(self, input): batch_size = input.size(0) # 初始化隐藏状态和细胞状态 hidden = self.initHidden(batch_size) cell = self.initCell(batch_size) # 输入数据通过LSTM层进行处理 output, (hidden, cell) = self.lstm(input, (hidden, cell)) # 取最后一个时间步的输出作为预测结果 output = output[-1] # 输入预测结果到全连接层 output = self.fc(output) return output def initHidden(self, batch_size): # 初始化隐藏状态(全零张量) return torch.zeros(1, batch_size, self.hidden_size) def initCell(self, batch_size): # 初始化细胞状态(全零张量) return torch.zeros(1, batch_size, self.hidden_size) # 设置模型参数 input_size = 10 # 输入特征维度 hidden_size = 20 # 隐藏层大小 output_size = 5 # 输出类别数 # 创建LSTM模型实例 model = LSTMModel(input_size, hidden_size, output_size) # 创建输入数据张量 input_data = torch.randn(3, 1, input_size) # (sequence_length, batch_size, input_size) # 进行前向传播计算 output = model(input_data) # 打印输出结果 print(output) ``` 模型解释和原理技术明: 1. LSTM(长短期记忆网络)是一种适用于处理序列数据的循环神经网络模型。它通过引入记忆单元和门控机制,解决了传统RNN模型中梯度消失和梯度爆炸的问题,能够更好地处理长序列数据。 2. 在上述代码中,首先定义了一个LSTM模型类`LSTMModel`,继承自`nn.Module`,并在构造函数中初始化了LSTM层和全连接层。 3. `LSTMModel`的`forward`方法用于定义模型的前向传播过程。输入数据通过LSTM层处理后,取最后一个时间步的输出作为预测结果,然后通过全连接层得到最终的输出。 4. `initHidden`方法和`initCell`方法分别用于初始化隐藏状态和细胞状态,通过创建全零张量作为初始状态。 5. 在主程序中,设置了模型的输入特征维度、隐藏层大小和输出类别数,并创建了一个LSTM模型实例。 6. 创建了一个输入数据张量`input_data`,形状为`(sequence_length, batch_size, input_size)`,其中`sequence_length`表示序列长度,`batch_size`表示批次大小,`input_size`表示输入特征维度。 7. 将输入数据传递给模型进行前向传播计算,得到输出结果。 8. 最后打印输出结果。 通过以上代码和解释,一个NLP新手可以了解到: - LSTM模型是一种适用于处理序列数据的循环神经网络模型,它通过引入记忆单元和门控机制解决了传统RNN模型的问题。 - LSTM模型由LSTM层和全连接层组成,LSTM层用于处理序列数据,全连接层用于输出预测结果。 - 输入数据经过LSTM层处理后,取最后一个时间步的输出作为预测结果。 - 利用PyTorch构建LSTM模型的步骤类似于RNN模型,包括定义模型类、初始化层、定义前向传播过程等。 - 通过设置模型参数和输入数据,可以进行前向传播计算并得到输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值