这是官方给出的文档,需要注意的是,虽然在神经网络中,我们一般输入都是二维的tensor矩阵(batch,input_size),但其实输入的维度是不做限制的。如果是三维的输入,会将前两维的数据先乘一起,然后在做计算,实际上还是单层神经网络的计算。个人理解,这个函数就是改变最后一维,也就是数据的特征维度,通过调整output_size的尺寸来扩张或者是收缩特征。

import torch.nn as nn
import torch
import numpy as np


X_2dim=np.array([[1,2,3,4],[2,3,45,6]]) #二维数组(2,4)
X_3dim=np.array([[[1,2,3,4],[2,3,4,6],[3,4,5,5]],[[1,1,5,6],[0,0,6,5],[3,3,5,7]]]) # 三维数组(2,3,4)

#转成tensor的形式,因为Linear要求输入是float类型,因此还需要转成float32
X2_tensor=torch.from_numpy(X_2dim.astype(np.float32))
X3_tensor=torch.from_numpy(X_3dim.astype(np.float32))

#用来改变最后数组最后一维的维度
#用来缩小或者扩展特征维度
emdeding=nn.Linear(4,3)
Y2=emdeding(X2_tensor)
Y3=emdeding(X3_tensor)

#输出
print(Y2)
print(Y3)

#Y2
tensor([[ 0.6468,  0.6430,  0.4253],
        [-2.9180, -3.3393,  6.3075]], grad_fn=<AddmmBackward>)

#Y3
tensor([[[0.6468, 0.6430, 0.4253],
         [1.0562, 0.8781, 0.6216],
         [0.7615, 0.3500, 0.7439]],

        [[1.1430, 0.6462, 0.8132],
         [0.7745, 0.4598, 0.9190],
         [1.4516, 0.5589, 0.8545]]], grad_fn=<AddBackward0>)



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐