nn.Linear()函数详解及代码使用

这是官方给出的文档,需要注意的是,虽然在神经网络中,我们一般输入都是二维的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=)

#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=)



你可能感兴趣的:(机器学习,神经网络,python,人工智能,机器学习)