文章目录

  • 前言
  • 关于logging
    • logging performance
    • logging information
  • 关于embedding
  • 关于one_hot
  • 关于加载模型
  • 关于多进程
  • 关于MIND
  • 关于TiKZ
  • 关于调参
  • 关于结构
  • 写在最后

前言

最近一直在调模型, 这篇主要想说说相关的内容以及一些坑。

关于logging

我认为, 要好好地调模型参数, 最重要的一点是代码里一定要把各种logging都写好, 尤其是超参数的设定。因为用的是ubuntu的screen命令在后台跑, 而screen自带的logging是会把tqdm的每一次变动都新写一行的, 严重阻碍了我们的阅读, 而且经常是重连服务器后看不到之前的终端输出, 这更加强调了将模型的参数设定和测试结果写入到文件里的重要性。

logging performance

我自己的workflow如下



Created with Raphaël 2.2.0


















定义Hyper Parameters字典





prepare() 进行数据预处理, 生成Dataloader





train() 训练并保存模型





evaluate() 评估模型





结束

因此我会在每次evaluate()结束后将Hyper Parameters和训练步数以及一些重要的模型参数(的shape) 写入到performance.log里, 这样对比起来就方便多了。

logging information

python自带的模块logging真的很方便, 可以简单地配置一下格式

logging.basicConfig(level=logging.INFO, format="[%(asctime)s] %(levelname)s (%(name)s) %(message)s")

在任何自定义的module中, 只需要下面两句就可以输出信息 (到终端)了。

logger = logging.getLogger(__name__)
logger.info('xxx')

更详细的logging配置直接看python文档就好。

关于embedding

一般来说我们fine-tune的都是预训练的embedding之类的东西, 比如用Gloveword embedding, PyTorchnn.embedding可以很方便地加载这样的向量, 用的时候只需要根据index查表就可以。

  • 我发现有趣的点是nn.embedding查表速度要显著快于把预训练向量用nn.Parameter包装起来查表, 估计做了优化, 但我也没有仔细研究;
  • 另外, nn.Embedding有一个参数叫做sparse, 如果为True的话会将梯度转化为sparse gradient, 我上网搜了一下dense和sparse的不同, 开发人员给出的答案是当单词表很大时, sparse会快并且占用更少的内存;但我自己使用的时候对比两者没发现显著区别。 还需要注意的是, 如果sparse-True, 需要给embedding设置单独的sparse optimizer, 比如SparseAdam

关于one_hot

PyTorch中自带了将index转化为one-hot编码的方法torch.nn.functional.one_hot, 但是! 这个方法的速度很慢, 我使用scatter方法能够获得更快的速度, 原码如下

index = torch.empty(5, 5, 1, dtype=torch.int64).random_(0,10)
def one_hot(index):dest = torch.zeros(5, 5, 10)src = torch.ones(5, 5, 10)dest.scatter_(-1, index, src)return dest

关于加载模型

torch.load()有一个至关重要的参数map_location, 如果不给其传递值, 那么会自动将模型加载到之前保存它的device上, 之前一直搞不懂为什么指明了cuda:1却还是会占用cuda:0的显存, 后来发现原来需要torch.load(xxx, map_location='cuda:1')

关于多进程

由于要评测的模型检查点很多, 我想的能并发地测评(相当于不用手开多个脚本), 试用一下torch.multiprocessing, 但我发现无论怎样parent process都会占用一部分额外的显存, 这让我很困惑。 最后我还是在脚本里多开了几个脚本, 来实现并发hhhh。

关于MIND

晒一下最近的成果哈哈哈哈

还是蛮不错滴! 继续加油哈哈哈哈。

关于TiKZ

怎么说呢, 这个东西画图还是挺折磨的, 但是直观上就是感觉比ppt画出来的好看(可能是自我安慰), 展示一手

关于调参

感觉学习率真的会对模型造成很大的影响, 剩下的我也还有待探究。其实我最近很感兴趣为什么模型的效果这么“瞬息万变”, 之后想看看相关的研究。

关于结构

之前我把每个模型都放在一个nn,Module里, 但是我发现这样有可能导致很多重复的代码, 建议还是可以适当地“拆解”一下模型, 比如encoderdecoder分开, 这样还能尝试不同的搭配效果, 以及不会自己改着改着忘记了以前的结构。。。

写在最后

就说这么多吧! 还要继续努力, 当然享受生活也很重要! 再分享一下我的新闻推荐仓库, 喜欢的可以标个星hhh。

【小白做科研( 九 )】炼丹小记相关推荐

  1. 人大副教授:本科生一定要做科研吗?九大灵魂拷问

    学术如苦旅,我亦是行人. 写这篇文章的初衷,是与本科生的接触过程中看到了一些对于科研的困惑或者误区,所以想大概介绍一下本科生的科研之路第一脚该从哪里走起.所以本篇文章的定位不是侧重学术性,也不会侧重于 ...

  2. 真相残酷:如何衡量自己是否适合做科研?

    如何衡量自己是否适合做科研?看看大神怎么回答? 本文内容主要来源:知乎 高赞回答一 作者:周不润 来源:知乎 我认为绝大多数需要判断自己是否适合做科研的人,都可以去做科研,除了两类人不适合: 1.对科 ...

  3. 如何去选取第一批要阅读的论文?_顶会最佳论文奖得主:初入科研领域,如何正确做科研?...

    文字整理:智源社区 常政.贾伟.王炜强 每个人都拥有着相似的才智,为什么有些人能顺利地完成学生到学者的过渡,能在学术生涯早期早早地做出突破性工作:而有些人,虽有雄心壮志,却始终不得其法,不能进入科研之 ...

  4. 做科研的几点体会:如何多发 SCI

    转载地址:http://paper.dxy.cn/article/53510 我刚刚开始做实验的时候,别人怎么说我就怎么做,每天在实验台旁干到深夜,以为这就是科研了.两个月过去,突然发现自己还在原地踏 ...

  5. 顶会最佳论文奖得主:初入科研领域,如何正确做科研?

    每个人都拥有着相似的才智,为什么有些人能顺利地完成学生到学者的过渡,能在学术生涯早期早早地做出突破性工作:而有些人,虽有雄心壮志,却始终不得其法,不能进入科研之门? 初入科研领域,如何才能正确地做科研 ...

  6. 博士 关于如何做科研?如何阅读文章?如何写综述?等问题……

    [转帖] 博士 关于如何做科研?如何阅读文章?如何写综述?等问题-- 偶然看到,觉得写得非常好.先记录下来,慢慢回味,怕以后找不到这个牛的博客了. ************************** ...

  7. 【转载】我做科研的几点体会

    上网时看到的,虽然方向不同,但是有些建议很中肯. 链接: http://blog.sina.com.cn/s/blog_50c1545101008spw.html梁大伟 序 我刚刚开始做实验的时候,别 ...

  8. 和世界顶级名校教授一起做科研是什么体验?

    和世界顶级名校教授一起做科研是什么体验?CIS可以帮你实现这个愿望!在这里,你可以和世界上最顶尖的工科学者们一起做科研,在课堂上与他们探讨学术问题,甚至还有机会以你的名字在国际学术期刊上面发表论文!不 ...

  9. 用《人人都是产品经理》的思维做科研

    首先,先读这段全文作者想传达的思想: "不是每个人都能以产品经理为职业,但在我看来,产品经理是一类人,而不是一个固定的头衔.任何人,只要能够发现问题并描述清楚,转化为一个需求,进而转化为一个 ...

最新文章

  1. Netty实现心跳机制与断线重连
  2. Cheat—— 给Linux初学者和管理员一个终极命令行备忘单
  3. mac文件夹中如何给文件重命名,快捷键是什么
  4. [云炬创业管理笔记]第二章测试5
  5. 一个简单的XML文档例子
  6. P3700 [CQOI2017]小Q的表格(反演、分块)
  7. mac mysql 的lb_四层LB和七层LB
  8. 精心整理,kafka常见面试题,看这篇文章就够了(共17题,含详细解答)
  9. cocos2d-x性能优化的那些事
  10. pap与chap协议
  11. nopcommerce 二次开发
  12. 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
  13. 有血有肉,汇报年终总结
  14. 手机3D建模初现端倪,预计今年市场规模将达1.45亿美元
  15. android手机抓包工具 tcp协议,Android常用抓包工具之TcpDump
  16. python计算本息总和_python计算等额本金,等额本息
  17. java左移和右移_java 位运算 之 左移和右移理解
  18. C语言 收入与纳税计算
  19. linux项目部署、Nginx详解
  20. DD-WRT 客户端模式设置 暨添加无线连接功能

热门文章

  1. 2020年7月工作月报
  2. 华为计步器下载手机版_华为鸿蒙OS2.0手机版12月16日见,90%以上的华为手机都可升级...
  3. dede模板里常用到的一些标签—dedecms模板开发
  4. MySQL缓存策略分析
  5. 关于wex5中如何实现文件上传
  6. sem_timedwait_C/C++ 修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析
  7. uva 361 - Cops and Robbers(凸包)
  8. Softing epGate PB系列网关-可将PROFIBUS总线集成到EtherNet/IP网络
  9. Appletv3 到手试用 ,并推荐美剧一部
  10. ava联网3D坦克大战(网络编程)2020