谷歌经典bert模型从下载源码到运行成功
谷歌经典bert模型从下载源码到运行成功
近期,对谷歌经典bert模型进行了简单的学习,以官方模型代码为主要学习目标,目前已经成功完成预训练任务,结果如图:
下载源码
官方代码和与训练模型链接:https://github.com/google-research/bert
论文链接:https://arxiv.org/abs/1810.04805
配置环境
1.版本问题
(1)python版本
这个代码支持的python版本<3.8 建议大家使用3.6或者3.7版本的python
(2)tensorflow版本
在官方代码中,有一个requirements.txt 提到了tensorflow版本问题
需要安装符合要求的tensorflow版本
附上安装tensorflow指定版本的指令:(8条消息) 使用清华镜像pip安装TensorFlow_FGY_u的博客-CSDN博客_pip 安装tensorflow 清华镜像
一定要注意版本对应问题:我的安装版本是python3.6和tensorflow 1.15.0
很多时候运行出问题都是因为版本不对应引起的:
python 与tensorflow版本对应清单链接:在 Windows 环境中从源代码构建 | TensorFlow (google.cn)
我在这直接放图了,大家也可以点击上方直接进原网站查看:
CPU:
GPU:
(3)其他版本问题:
在我运行该模型的时候,关于版本不匹配问题还有很多:
这个就是tensorflow python keras三者之间版本不匹配的问题
我查了一下 python tensorflow keras 三者之间的版本对应关系,将keras更新到 2.3.1即可解决问题
参考链接:tensorflow + python + keras 版本对应关系 - feiquan - 博客园 (cnblogs.com)
数据集下载
数据集下载链接,这个在github源码的README.md 有给出,该文件也给出了模型的运行方式,参数设置方式等等
(1)预训练模型的下载:
这里附上文件的网盘链接,有需要自取即可
链接:https://pan.baidu.com/s/1xcC6rdo6o7gn1VLB1-sq5w
提取码:o203
(2)GLUE数据集的下载
在这个地方我遇到了一些问题,可能是因为下载源是在国外,我在pycharm terminal 直接运行的官方给的下载脚本
download_glue_data.py(下载脚本):
运行指令大概是这样:(注意 task 是MRPC)
但是在输入运行脚本的指令之后,我一直卡在了processing MRPC 不动了
我就另外找了个glue数据集 ,这里提供原文链接:(8条消息) GLUE-MRPC数据集下载(国内)_Acecai01的博客模板-CSDN博客_mrpc数据集
参数设置
官方给的那些参数,不一定适合所有的人,首先他给的Linux系统下的指令 在设置环境变量那条 windows 与Linux 系统是有较大差别的
Linux的就不多说了,和官方格式一样,只需要修改一下路径就好了
Windows 在cmd中设置环境变量 可以参考:(8条消息) Windows–cmd命令行添加环境变量_TLCrow的博客-CSDN博客_命令行添加环境变量
这是官方给出的参数:
如果不太想设置环境变量,可以不使用export(Linux)/set(Windows) 指令
直接把参数中对应的BERT_BASE_DIR 和GLUE_DIR 换成你下载的数据集所在的绝对路径,这样可以基本保证路径方面不出错
在输入python 后面那一堆参数的时候,要注意把 每个参数后面的下划线去掉,对于train_batch_size 这个参数 如果32觉得太大了,可以设置成 16 8 大小
Project Structure:
我的运行指令如下:
python run_classifier.py --task_name=MRPC --do_train=true --do_eval=true --data_dir=..\GLUE\glue_data\MRPC --vocab_file=..\GLUE\uncased_L-12_H-768_A-12\vocab.txt --bert_config_file=..\GLUE\
uncased_L-12_H-768_A-12\bert_config.json --init_checkpoint=..\GLUE\uncased_L-12_H-768_A-12\bert_model.ckpt --max_seq_length=128 --train_batch_size=8 --learning_rate=2e-5 --num_train_epochs=3.0 --output_dir=/tmp/mrpc_output
具体路径大家以自己文件的放置位置为准,每个人设置的参数都不太一样
DeBug
由于这个是三年前的代码,有一些方法或者包的名称会有些变化
这里就提两个比较典型的问题:
(1)由于当时使用的tensorflow应该是v1版本的,所以在 import tensorflow as tf
时需要,换成 import tensorflow.compat.v1 as tf
或者直接在代码处 加上 compat.v1
然后,不知道是我之前有动过代码(在之前我应该是没有更改过代码),这个代码里面出现了cast 函数的错误:(location:run_classifier.py line:530)
根据代码上方的注释:
我把参数更改了一下:
(2)
这个我在网上找的所有的报错都是:module ‘tensorflow._api.v1.io’ has no attribute ‘gfile’
通过这篇文章:Tensorflow报错:AttributeError: module ‘tensorflow._api.v1.io’ has no attribute ‘gfile’ - RiddleLi - 博客园 (cnblogs.com)
我试着把v1.io 去掉,发现竟然没有错误了,之前的代码有的需要加上v1,但是这个地方需要去掉v1,属实有点懵,应该就是版本不兼容的问题。
到这里差不多就没有其他的问题了,就可以用官方给的参数 对模型进行预训练了
运行过程
能够正常运行的标准,首先肯定是能跑起来,然后cpu/gpu占用率保持一个相对稳定的数值:
运行过程中输出的数据:
运行时CPU占用率:
可以看到我的内存和CPU一直保持在一个很稳定的范围内
关于想要用GPU运行的话,就需要稍微更改参数,而且要安装cuda cudnn 配置环境等等 还有很多版本适配问题,还是比较麻烦的,因为我是使用CPU进行预训练的,使用GPU如何运行这里就不过多赘述了。
运行结果
大概训练了三个多小时,跑出来了结果:
官方给的训练结果:
对比一下数据,效果还是差别不大的,基本达到了预训练的效果
谷歌经典bert模型从下载源码到运行成功相关推荐
- 经典坦克大战1990--Windows下源码编译运行,培养编程兴趣,提高项目经验和能力
1 介绍 ✨ 该经典坦克大战1990版,由C/C++编写,源码来自于GitHub的大佬krystiankaluzny,本文仅提供Windows下的编译&运行详细步骤,以供爱好者在此基础上进行开 ...
- 含文档+PPT+源码等]精品基于Python实现的大学校园短视频社交软件系统计算机django毕业设计微信小程序项目源码[包运行成功]
- 2016年最经典的高仿系列源码打包下载4.84G
│ JAVAapk.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2015.11.04更新.txt ...
- unity FBX模型导出系统源码WRP FBX Exporter下载
unity FBX模型导出系统源码WRP FBX Exporter Requires Unity 5.0.4 or higher. Fast and easy way to export FBX f ...
- 多分类经典语录微信小程序源码下载支持一键复制带壁纸,王者改名等功能
这是一款主要以各类语录分享的一款小程序源码 比如有:舔狗日记,土味情话,别味情话,励志鸡汤 内容支持一键复制分享,可以随时切换下一个内容 另外还有壁纸功能(属于自动采集) 还有王者荣耀空白名修改,重复 ...
- (已更新)多分类经典语录微信小程序源码下载支持一键复制带壁纸,王者改名等功能
这是一款主要以各类语录分享的一款小程序源码 比如有:舔狗日记,土味情话,别味情话,励志鸡汤 内容支持一键复制分享,可以随时切换下一个内容 另外还有壁纸功能(属于自动采集) 还有王者荣耀空白名修改,重复 ...
- 车牌检测模型训练(含源码和数据集)
车牌检测模型训练(含源码和数据集) 本教程利用NVIDIA TAO进行车牌检测模型的训练: 模型框架:SSD 数据集: CRPD, 连接:https://github.com/yxgong0/CRPD ...
- 基于Unity3D经典消消乐游戏源码,代码详细注释,c#版方块消消乐源代码
使用Unity2017开发,实现功能有: 基本消除功能 UI动画以及代码控制动画 消除动画以及手势识别 消除判定.连续消除判定 UI是自己独立完成比较简单,打包平台我设置的是webGL平台,有需要改成 ...
- 记录一次Idea 无法下载源码
我一般项目导入idea后,就使用命令mvn compile进行编译,中央仓和私仓都可以download下来, 然后习惯性的点一下Reload All Maven Projects,基本上包都引入了,没 ...
最新文章
- Linux学习总结(十七)-shell 基础知识
- mmap 和 shm 区别
- Windows命令行下的进程管理
- SDOI2010 地精部落
- 把nc v6的源码看懂
- Leetcode —— 886. 可能的二分法
- django 跳转其他网站_Django 实战 | 搭一个 GitHub 用户展示网站 04
- 爬虫基本知识(转载)
- matplotlib绘制李萨如图(二) animation实现动态2D李萨如图
- 支持秒赞的php脚本一键安装,easy-hiphop一键安装hiphop脚本
- ExtJS6-项目创建
- C++ _stdcall和__stdcall的区别
- 两个华为路由器实现MESH组网,WIFI信号无缝漫游
- wordpress插件_顶级WordPress反垃圾邮件插件
- linux unlink 函数,linux – unlink和rm有什么区别?
- python的print函数用逗号分隔时输出不用空格_python print 按逗号或空格分隔的方法...
- Java开发工程师的一点职业发展规划
- Unity中关于Destroy的API
- 怎么起用计算机无线开关,笔记本电脑无线网卡,教您如何打开电脑无线网卡开关...
- navicat怎么备份数据和同步两个数据库
热门文章
- postman接口自动化(三)变量设置与使用
- 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)
- Markdown懒办法排版微信公众号文章
- java中,判断当前时间是否处于某个一个时间段内
- VMware 虚拟磁盘文件备份与恢复
- 仿鱼爪新媒交易账号过户转让平台源码担保第三方账号交易系统公众号服务号抖音快手小红书
- (不打广告)推荐这款永久免费内网穿透软件-神卓互联
- docker容器网络配置之容器间的链接(默认桥接网络下的links)
- 小白的python学习之路-turtle画不同大小的五角星
- jQuery Mobile 列表视图