NLP经典论文研读--xlnet论文代码复现记录

xlnet源码解读(简易pytorch实现版本)

xlnet这个模型还是相当复杂的,我看了很长一段时间也还是有很多地方没有搞明白,最后又在网上搜了很多大佬写的相关博客,才算是大致弄明白了,想了解xlnet的原理,请参考原论文,这里推荐一位大佬写的博客,写得非常清楚明白,也解决了我的很多困惑。

原理讲解博客:https://blog.csdn.net/qq_37236745/article/details/108846515

在这里,我重点讲解一下xlnet的代码实现,我这个代码是

Simple XLNet implementation with Pytorch Wrapper!

代码链接:https://github.com/graykode/xlnet-Pytorch

注:这代码里面没有说实验配置,但是我自己的实验环境是cuda11.3 ,经过实验可以正常运行,我的实验配置供参考,如下:
python:3.6
torch 1.10.0+cu113
torchvision 0.11.1+cu113

代码的实现。

首先是代码文件目录:
在这里插入图片描述

其中,dengdan_data_utils.py是我自己调试的时候复制的data_utils.py文件,方便我调试。跑代码记录.txt是我自己用来在跑代码的时候记录一些东西的文件。

从目录结构来看,结构较为清晰,基本上从名字就知道那个文件是用来干嘛的了。main.py是主文件,模型入口、xlnet.py是模型文件、data_utils.py是数据加载及处理文件。

接下来,按照main.py文件中代码运行的顺序来讲解此代码。

首先是导入一些包,这里不多说了。
在这里插入图片描述

然后就是程序入口,在命令行设置参数的代码,也不多说。

之后加载分词器以及模型初始化:
在这里插入图片描述

这里我们从main.py文件转向xlnet.py文件去看一下模型的初始化,重点讲一下如下几个参数:
在这里插入图片描述

个人理解,他们分别表示计算内容流注意力、查询流注意力和片段嵌入时的偏置参数(对模型原理不明白的话需要去看论文或博客)。
在这里插入图片描述

看完模型初始化,回到main.py,在设置好优化器和损失函数后,就开始迭代循环epoch,进行数据创建、数据排列和模型训练了。我个人还没明白为什么每个epoch都要进行一次全新的数据创建。

接下来,分别讲数据创建、数据排列和模型训练这三个部分。

  1. 数据创建:
    这个部分需要注意的是,创建的两个句子不一定是相邻的,用标签label来进行区分,1表示两个句子相邻,0表示不是相邻的。
    经过数据创建处理后,返回的是一个列表features,其中每一个feature都包含几个部分,如下:
    在这里插入图片描述

  2. 数据排列:
    在这里插入图片描述

这里的输入是数据创建部分的每一个feature,reuse_len、perm_size为256、seq_len为512、num_predict为85。数据排列这里我看了很久都没有看明白:
在这里插入图片描述

疑难点记录

这个是什么意思??有没有知道的佬可以给我科普一下~
到现在数据排列的部分我也没有看明白,555~
不写了,欢迎给我留言~
最后,附上我个人复现代码时的注释和个人笔记,欢迎参考我的仓库:
https://gitee.com/deng-dan-neu/my-keyan-jilu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(2024,RNN,梯度消失和爆炸,记忆诅咒,重参数化和动态学习率,权重矩阵对角化,复值 RNN)梯度消失和爆炸并不是故事的结局

Recurrent neural networks: vanishing and exploding gradients are not the end of the story 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 梯度消失和梯度爆炸 2. 记…

%运算符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 在python中,可以使用%运算符进行灵活多样的格式化处理,通用的语法格式为: (格式模板&…

【面试系列】C#高频面试题

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…

面试突击:ArrayList源码详解

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。ArrayList 是我们日常开发中不可避免要使用到的一个类,并且在面试过程中也是一个非常高频的知识点&#…

<Linux> 实现命名管道多进程任务派发

实现命名管道多进程任务派发 common文件 #ifndef _COMMON_H_ #define _COMMON_H_#pragma once #include <iostream> #include <unistd.h> #include <string> #include <sys/types.h> #include <sys/stat.h> #include <wait.h> #include &…

机器人控制系列教程之URDF文件语法介绍

前两期推文&#xff1a;机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2)&#xff0c;我们主要从数学的角度介绍了机器人的动力学建模的方式&#xff0c;随着机器人技术的不断发展&#xff0c;机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

ZSWatch 开源项目介绍

前言 因为时不时逛 GitHub 会发现一些比较不错的开源项目&#xff0c;突发奇想想做一个专题&#xff0c;专门记录开源项目&#xff0c;内容不限于组件、框架以及 DIY 作品&#xff0c;希望能坚持下去&#xff0c;与此同时&#xff0c;也会选取其中的开源项目做专题分析。希望这…

基于Java的汽车租赁系统【附源码】

论文题目 设计&#xff08;论文&#xff09;综述&#xff08;1000字&#xff09; 当今社会&#xff0c;汽车租赁已成为一种受欢迎的出行方式。本文旨在探讨汽车租赁行业的发展趋势、市场规模及其对环境的影响。目前&#xff0c;汽车租赁行业正在经历着快速的发展。随着经济的发…

【独家揭秘】SmartEDA电路仿真软件:电子电路基础学习的神器!

在电子科技日新月异的今天&#xff0c;电路基础学习的重要性愈发凸显。但你是否曾为复杂的电路图、难以理解的电路原理而感到困扰&#xff1f;今天&#xff0c;我要向大家推荐一款学习神器——SmartEDA电路仿真软件&#xff0c;让你轻松踏入电子电路基础学习的殿堂&#xff01;…

22 Shell编程之免交互

目录 22.1 Here Document免交互 22.1.1 Here Document概述 22.1.2 Here Document免交互 22.1.3 Here Document变量设定 22.1.4 Here Document格式控制 22.1.5 Here Document多行注释 22.2 expect免交互 22.2.1 expect概述 22.2.2 expect安装 22.2.3 基本命令介绍 22.2.4expec…

关于viewpage + FragmentPagerAdapter 当调用 notifydatasetchanged 造成其中的fragment内存泄漏

ViewPager 和 FragmentPagerAdapter 的使用中&#xff0c;调用 notifyDataSetChanged() 可能导致内存泄漏&#xff0c;这通常与 Android 系统管理 Fragment 的方式有关。为了深入理解这个问题&#xff0c;我们需要从 FragmentPagerAdapter 和 ViewPager 的源码入手。 Fragment…

ARM裸机:地址映射

S5PV210的地址映射详解 什么是地址映射&#xff1f; S5PV210属于ARM Cortex-A8架构&#xff0c;32位CPU&#xff0c;CPU设计时就有32根地址线&32根数据线。 32根地址线决定了CPU的地址空间为4G&#xff0c;那么这4G空间如何分配使用&#xff1f;这个问题就是内存映射问题。…

NAND闪存巨头铠侠(Kioxia)计划最迟于10月下旬通过首次公开募股IPO

据路透社于6月26日引用消息来源的报道&#xff0c;在半导体市场条件反弹及财务业绩迅速改善的背景下&#xff0c;NAND闪存巨头铠侠&#xff08;Kioxia&#xff09;正准备尽快提交初步申请&#xff0c;并计划最迟于10月下旬通过首次公开募股&#xff08;IPO&#xff09;在东京证…

9.二维数组的遍历和存储

二维数组的遍历和存储 二维数组的遍历 二维数组a[3][4],可分解为三个一维数组,其数组名分别为: 这三个一维数组都有4个元素,例如:一维数组a[0]的 元素为a[0][0],a[0][1],a[0][2],a[0][3]。所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元…

Eclipse代码编辑器自主配色

1. 打开 Eclipse 的设置 - Java - Editor - Syntax Coloring 2. 自定义各种类型的颜色&#xff0c;例如&#xff1a; 1. Interface 勾选&#xff0c;设置为紫色 2. Class 勾选&#xff0c;设置为淡蓝色 3. Abstract classes 勾选&#xff0c;有自己默认的颜色 …

俯视LLM的灵魂:一文搞懂稀疏自动编码器

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…

使用jupyter打开本地ipynb文件的方法

常用方法&#xff1a; 先启动jupyter&#xff0c;然后在打开的页面点击upload&#xff0c;选择想要打开的文件上传然后打开&#xff0c;但是这样其实是先复制了一份到jupyter中&#xff0c;然后打开运行。而我不想复制。 方法二 先打开项目文件所在文件夹&#xff0c;文件夹…

【Dison夏令营 Day 01】如何用Python写一个游戏“石头剪刀布”

欢迎你们踏入这个充满无限可能性的编程世界&#xff01;作为一名热爱Python的开发者&#xff0c;我深感编程的魅力&#xff0c;并希望与你们一同分享这份乐趣和激情。编程&#xff0c;不仅仅是一种技能&#xff0c;更是一种思维方式和解决问题的工具。在Python的世界里&#xf…

118. 杨辉三角

118. 杨辉三角 题目链接&#xff1a;118. 杨辉三角 代码如下&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>> res(numRows);for(int i0;i<numRows;i){res[i].resize(i1,1);for(int j1;j&…

RuntimeError: “exp_vml_cpu“ not implemented for ‘Half‘

遇到 "exp_vml_cpu" not implemented for Half 这个运行时错误&#xff0c;意味着你尝试在一个操作中使用了半精度&#xff08;Half 或 float16&#xff09;数据类型&#xff0c;但是该操作在当前环境下并没有针对半精度数据类型的实现。 半精度&#xff08;float16&…