torch.nn.Linear

本文介绍了如何在PyTorch中创建一个Linear层,输入维度为3,输出维度为4,并展示了weight和bias的查看方法。通过weight.data和bias.data可以获取张量数据。此外,还演示了线性计算的过程以及等价计算方式。同时,讨论了权重和偏置的初始化,使用了Xavier均匀分布初始化weight和填充偏置,这对于tanh激活函数是有益的。
摘要由CSDN通过智能技术生成

建立Linear对象

建立一个Linear对象,其输入特征维度为3,输出维度为4。数据随机生成

import torch.nn as nn
linear1 = nn.Linear(3, 4, bias=True)

通过weight和bias可以查看数据,weight的维度为4行3列,bias的维度是一维的,为4. 可以方便做广播操作

print(linear1.weight)
Parameter containing:
tensor([[ 0.0139,  0.2096, -0.5021],
        [-0.4480,  0.5108,  0.0279],
        [-0.3873, -0.5569,  0.3556],
        [-0.4588, -0.0081, -0.3111]], requires_grad=True)
print(linear1.bias)
Parameter containing:
tensor([-0.0414, -0.0023, -0.3677,  0.5600], requires_grad=True)

上述两个变量的类型均为torch.nn.parameter.Parameter,
可以通过print(linear1.weight.data)获得tensor数据

linear1.weight.data
tensor([[ 0.0139,  0.2096, -0.5021],
        [-0.4480,  0.5108,  0.0279],
        [-0.3873, -0.5569,  0.3556],
        [-0.4588, -0.0081, -0.3111]])     

linear 计算

import torch 
x = torch.randn((2,3))
y1 = linear1(x)
y1.shape 
# 输出为
torch.Size([2, 4])

等价计算

y2 = x @ (linear1.weight.data).t() + linear1.bias
y2.shape 
# 输出为
torch.Size([2, 4])

详细计算
y = x A T + b y = xA^T+b y=xAT+b
其中x.shape = (2,3), A T A^T AT.shape=(3,4), b.shape=(4)。

初始化

对Linear的数据初始化

def _init_weights(m):
    if isinstance(m, nn.Linear):
        torch.nn.init.xavier_uniform_(m.weight)
        m.bias.data.fill_(0.01)
_init_weights(linear1)

这里的两个操作,一个torch.nn.init.xavier_uniform_,一个m.bias.data.fill_都是inplace操作的 。
为何要手动初始化,可以参考https://zhuanlan.zhihu.com/p/25110150。这样的初始化对tanh激活函数是友好的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值