ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021SC@SDUSC-山东大学软件工程与实践-Senta(5)

2021-12-08 19:58:00  阅读:201  来源: 互联网

标签:None 2021SC Senta fluid proj input SDUSC dropout size


本篇对Senta中token embedding中所使用的ELMO模型进行分析。

在这里插入图片描述

paddlepaddle:百度深度学习的框架 paddle.fluid.layers.dropout:
丢弃或者保持x的每个元素独立。Dropout是一种正则化手段,通过在训练过程中阻止神经元节点间的相关性来减少过拟合。根据给定的丢弃概率,dropout操作符按丢弃概率随机将一些神经元输出设置为0,其他的仍保持不变。

# -*- coding: utf-8 -*

"""ELMo model."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import paddle.fluid.layers as layers
import paddle.fluid as fluid
import numpy as np
import os

cell_clip = 3.0
proj_clip = 3.0
hidden_size = 4096
vocab_size = 52445
emb_size = 512


def dropout(input):
    """
    dropout
    """
    dropout_rate = 0.5
    return layers.dropout(
        input,
        dropout_prob=dropout_rate,
        dropout_implementation="upscale_in_train",
        is_test=False)

dropout相关参数:
dropout_prob :输入单元的丢弃概率
dropout_implementation :丢弃单元的方式,有两种’downgrade_in_infer’和’upscale_in_train’两种选择,默认为’downgrade_in_infer’。

关于dropout_implementation两种丢弃方式解释:

downgrade_in_infer,在预测时减小输出结果,

train: out = input * mask

inference: out = input * (1.0 - dropout_prob)

(mask是一个张量,维度和输入维度相同,值为0或1,值为0的比例即为 dropout_prob )

upscale_in_train, 增加训练时的结果

train: out = input * mask / ( 1.0 - dropout_prob )

inference: out = input

(mask是一个张量,维度和输入维度相同,值为0或1,值为0的比例即为 dropout_prob )

def lstmp_encoder(input_seq, gate_size, h_0, c_0, para_name, proj_size, args):

    init = None
    init_b = None
    input_proj = layers.fc(input=input_seq,
                           param_attr=fluid.ParamAttr(
                               name=para_name + '_gate_w', initializer=init),
                           size=gate_size * 4,
                           act=None,
                           bias_attr=False)
    hidden, cell = layers.dynamic_lstmp(
        input=input_proj,
        size=gate_size * 4,
        proj_size=proj_size,
        h_0=h_0,
        c_0=c_0,
        use_peepholes=False,
        proj_clip=proj_clip,
        cell_clip=cell_clip,
        proj_activation="identity",
        param_attr=fluid.ParamAttr(initializer=init),
        bias_attr=fluid.ParamAttr(initializer=init_b))
    return hidden, cell, input_proj

def lstmp_encoder 的返回值 input_projf, hidden, cell,分别由paddle.fluid.layers.fc 和paddle.fluid.layers.dynamic_lstmp 得出。

fc(fully connected) 全连接层:全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来

paddle.fluid.layers.fc 参数:

input :维度为 [N1,N2,…,Nk] 的多维Tensor(或LoDTensor)或由多个Tensor(或LoDTensor)组成的list,输入Tensor的shape至少是2。数据类型为float32或float64。

size : 全连接层输出单元的数目,即输出Tensor(或LoDTensor)特征维度。

ParamAttr :指定权重参数属性的对象。默认值为None,表示使用默认的权重参数属性。

bias_attr:指定偏置参数属性的对象。默认值为None,表示使用默认的偏置参数属性。

act :应用于输出上的激活函数

paddle.fluid.layers.fc 参数:

input :维度为 [T,4∗hidden_size] 的多维 LoDTensor(必须在传入该OP前对维度为 [T,hidden_size] 的输入经过线性变换得到),其中 T 为 batch 中所有样本的长度之和,hidden_size 为隐层大小,数据类型为 float32 或者 float64。

use_peepholes :是否使用 peephole 连接。默认值为True。

h_0 :维度为 [batch_size,hidden_size] 的多维 Tensor。如果为 None,该OP会自动设置为全0的向量。默认值为None。

c_0 :维度为 [batch_size,hidden_size] 的多维 Tensor。如果为 None,该OP会自动设置为全0的向量;h0,c0 如果要设置为None,必须同时为None。默认值为None。

cell_clip : 如果该参数不为None,则在单元输出激活之前,单元状态将被此值剪裁。默认值为None。

proj_clip :如果 num_proj > 0 并且 proj_clip 不为None,那么将投影值沿元素方向剪切到[-proj_clip,proj_clip]内。默认值为None。

本篇Senta中的ELMO模型源码分析到此结束,下篇将续接本篇。

标签:None,2021SC,Senta,fluid,proj,input,SDUSC,dropout,size
来源: https://blog.csdn.net/Casterrrrrrrr/article/details/121798263

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有