GLU(Gated Linear Unit,门控线性单元)简介

前言

简单介绍门控线性单元的结构。

原始论文

《Language Modeling with Gated Convolutional Networks》 提出GLU,2017年(第一版是2016年)

网络结构

下图的结构只是其中一层,可以堆叠。
在这里插入图片描述

计算公式

每一层的计算公式如下。
在这里插入图片描述

其中:
X代表输入。
W、V、b、c都是要学习的参数。
σ \sigma σ在原论文中是sigmoid函数。
⊗是对应元素相乘(element-wise product),也称为哈达玛积(Hadamard product)。

从公式可以看到,输入X分两路,其中一路的运算结果不做处理,另一路则经过激活函数。

Pytorch文档

torch.nn.GLU(dim=-1)

GLU(a,b)=a⊗σ(b)  

(先随便读一下文档,后面有代码示例和详细解释)

参数
dim (int) – the dimension on which to split the input. Default: -1
指定从哪个维度对input进行拆分,默认值:-1

参数形状
Input: (1,N,2) where * means, any number of additional dimensions
Output: (1,M,2) where M=N/2

需要说明,如果用pytorch的GLU模型计算原论文中GLU层,需要自己构造a和b两个部分。

代码示例

理解参数dim的作用

1. 不设置dim,使用默认值-1。


>>> m = nn.GLU()  # dim默认是-1
>>> input = torch.randn(4, 2)
>>> input
tensor([[ 0.4562,  0.7670],
        [ 1.7934,  0.7769],
        [-0.3021, -0.1275],
        [-1.4728,  0.7495]])
>>> output = m(input)
>>> output
tensor([[ 0.3115],
        [ 1.2285],
        [-0.1414],
        [-1.0001]])

解释:dim=-1,意味着最后一个维度,对于二维矩阵,也就是列的维度,所以是按列拆分。

2. 设置dim=0。

>>> input = torch.randn(4, 3)
>>> m = nn.GLU(dim=0)    # dim=0
>>> output = m(input)
>>> output
tensor([[-0.9414, -0.0830, -0.5450],
        [-0.1251, -1.1556,  0.6469]])

解释:dim=0,意味着第一个维度,对于二维矩阵,就是行的维度,所以是按行拆分。

根据上面介绍的原理,应该知道,被拆分的那个维度,向量个数必须是偶数,才能平均拆分。如果对一个4*3的矩阵按列拆分,就会报错了。

  • 23
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
PyTorch中,可以使用Matplotlib库来绘制训练过程中的损失(loss)曲线。根据给出的代码,可以看出绘制损失曲线的方法是通过将每次epoch的损失值存储在一个列表中,然后使用Matplotlib的plot函数来绘制曲线。 具体步骤如下: 1. 创建一个空列表`Loss_list`,用于存储每次epoch的损失值。 2. 在每次epoch结束时,将损失值添加到`Loss_list`中。 3. 使用Matplotlib的plot函数绘制曲线,其中x轴为epoch的取值范围,y轴为对应的训练损失值。 4. 设置图表的标题、x轴和y轴的标签等。 5. 使用savefig函数保存绘制的曲线为图片。 6. 使用show函数显示绘制的曲线。 以下是示例代码: ```python import matplotlib.pyplot as plt # 创建一个空列表来存储每次epoch的损失值 Loss_list = [] # 在每次epoch结束时,将损失值添加到Loss_list中 # ... # 使用Matplotlib绘制损失曲线 x1 = range(1, epoch - 1) y1 = Loss_list plt.title('Train loss vs. epoches', fontsize=20) plt.plot(x1, y1, '.-') plt.xlabel('epoches', fontsize=20) plt.ylabel('Train loss', fontsize=20) plt.grid() # 保存绘制的曲线为图片 plt.savefig("./lossAndacc/Train_loss.png") # 显示绘制的曲线 plt.show() ``` 同时,根据给出的代码,可以看到还有绘制准确率(acc)曲线的方法,原理与绘制损失曲线相似,只需将准确率值添加到另一个列表中,然后调用相应的绘制函数即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [pytorch绘制loss和accuracy曲线](https://blog.csdn.net/t18438605018/article/details/121895338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值