nn.Linear

在神经网络全连接层中常常用到类对象Linear,共有两个参数,分别是输入的特征数量和输出的特征数量,该类会根据输入和输出的维数来创建w矩阵和b,假设输入为(1,n)维x,输出为
(1,m)维y,则有(m,n)维w,(1,m)维b,有y =w*x^t+b

对于多维(m,n)特征x,则需先将其全展开为(1,m*n)在输入,例如Linear(m*n, 10)(x),
对于带有batchsize = j的(j,m*n)维输入x,则Linear会自动对每行x进行线性计算,最终输出一个维数为(j,10)的输出tensor。

同时可以有Linear(m*n,10)().parameters()来查看w和b。

例子:

先定义一个(3,3)的张量x1,x2模仿一个单通量二维数据,然后用stack将其堆叠在一起来模仿batchsize为2,然后进入全连接层要先把特征利用view展开为一向量,因为batchsize=2所以
view(2,3*3),然后输入进linear中,可以看到输出out维数为(2,9),同时利用parameters查看w和b,最后通过ans = torch.matmul(x1.view(9), w[0]) + b[0]可以发现与out[0][0]相等,从而验证了前面的结论。

x1 = torch.tensor([[[1,1,1],[2,2,2],[3,3,3]]], dtype=torch.float32)
x2 = torch.tensor([[[10,10,10],[20,20,20],[30,30,30]]], dtype=torch.float32)
print("x1: \n", x1, x1.size())
print("x2: \n", x2, x2.size())
x = torch.stack([x1,x2], dim=0)
print("x: \n", x, x.size())
linear = nn.Linear(3*3, 3)
newx = x.view(2, 3*3)
print("newx: \n", newx, newx.size())
out = linear(newx)
print("out: \n", out, out.size())
w = list(linear.parameters())[0].data
b = list(linear.parameters())[1].data
print("全连接层参数w:\n", w, "\n全连接层参数b:\n", b)
ans = torch.matmul(x1.view(9), w[0]) + b[0]
print("ans: \n", ans)
y = torch.tensor([[1,-1,1],[2,2,-1]])
nn.ReLU(inplace=True)(y)
print(y)

例子输出:

x1: 
 tensor([[[1., 1., 1.],
         [2., 2., 2.],
         [3., 3., 3.]]]) torch.Size([1, 3, 3])
x2: 
 tensor([[[10., 10., 10.],
         [20., 20., 20.],
         [30., 30., 30.]]]) torch.Size([1, 3, 3])
x: 
 tensor([[[[ 1.,  1.,  1.],
          [ 2.,  2.,  2.],
          [ 3.,  3.,  3.]]],


        [[[10., 10., 10.],
          [20., 20., 20.],
          [30., 30., 30.]]]]) torch.Size([2, 1, 3, 3])
newx: 
 tensor([[ 1.,  1.,  1.,  2.,  2.,  2.,  3.,  3.,  3.],
        [10., 10., 10., 20., 20., 20., 30., 30., 30.]]) torch.Size([2, 9])
out: 
 tensor([[ -1.5531,   1.1671,  -3.1387],
        [-15.8861,   9.2933, -31.5863]], grad_fn=<AddmmBackward0>) torch.Size([2, 3])
全连接层参数w:
 tensor([[-0.0599, -0.0909, -0.0604, -0.2137, -0.2691, -0.1303,  0.2168, -0.3297,
          0.0611],
        [-0.0993, -0.3031,  0.1966,  0.1967,  0.2793, -0.2698,  0.0496, -0.0892,
          0.2717],
        [-0.0223,  0.0500, -0.2856, -0.0966,  0.0443, -0.2155, -0.2655, -0.2882,
         -0.2355]]) 
全连接层参数b:
 tensor([0.0395, 0.2642, 0.0221])
ans: 
 tensor(-1.5531)
tensor([[1, 0, 1],
        [2, 2, 0]])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值