二、教你怎麽看source code,找到核心程序码 ep.21:从train.py呼叫资料集处,一路看有关处理资料的程序,终於又可以回到train.py了

文章说明

文章分段

  1. 文章说明
  2. deeplab的简单介绍、於我的意义 ep.1
  3. tensorflow的程序码特色 ep.2
  4. 训练流程的细节 ep.3
  5. 逛deeplab的github程序

 

前情提要

ep20把我这几天以来的文章,标题开头是二的文章都梳理一遍,然後相信大家绝对不记得,或看到一半会忘记,我到底是从哪里开始追踪原始码,以及为什麽会照这个顺序。

我们最初是在train.py遇到他呼叫data_generator.pyget_one_shot_iterator()method,目的是为了取得训练资料,才开始了长达20天的追踪。

我们追踪到现在,好不容易把这个method呼叫的map function:_parse_function_preprocess_image都讲完了,最後还剩下一点点的程序,就可以从data_generator.py跳回train.py了。

接着再继续吧。

 

逛deeplab的github程序(cont.)

datasets/data_generator.py (cont.)

331行是将dataset加上打乱的功能,因为这个tf.data API是讲求效率的,所以并不会一次load近所有资料,才能节省占用GPU的空间。这个buffer_size就是一次会load 100笔资料,然後把它打乱後提供後续使用,也就是说,如果要让资料完全打乱,buffer_size要比资料笔数多才行(但这样似乎也失去了使用tf.data有效率的初衷?)。

是说训练时所需要的记忆体量,如果你是使用GPU的话,你要增加以及关注的记忆体容量是在GPU本身内部的,跟系统的记忆体量没有关系!
所以如果训练的程序在没有确认过记忆体用量的情况下,从用CPU跑,改成用GPU跑,有的时候会出现记忆体不足的情况。
这就是因为,使用GPU,他只会用GPU自带的记忆体去暂存资料。

 


334行是将资料集的长度延长,会这样做是因为dataset会变成一个iterator,那iterator呼叫到没有东西可以丢出来就会结束,所以这个是让iterator的长度可以变长的method。

 

  • 接下来是338行的batch(),他会规定每呼叫一次dataset iterator,iterator会吐出多少笔资料来。
  • 然後是prefetch(),prefetch的功用是用来增加效率的,他的角色很像是在校长旁边的大使。

在校长颁奖时,旁边会有大使拿着一叠奖状供校长拿取,这样可以快速进行颁奖。

  • 339行就是把前面还在定义操作的dataset,正式把dataset做成iterator,那呼叫这个iterator时,就会按照前面定义的动作,去处理每笔资料,并且把batch个资料打包好吐出来。

 

train.py


我们花了这麽多天去追的程序,在主程序中,只有短短一行呼叫,而且是作为模型参数。

 

欧对了,说来说去还有模型的部分没有说到,但因为deeplab的程序是有用提供给多GPU的使用者,所以他的模型写法跟只有一个GPU的写法差很多。

 


deeplab的model本身定义在_build_deeplab()这个method中,也就是train.py的第221行那里。

然後之後321行用_build_deeplab()的定义去把模型部署分工,让不同GPU之间能合作把这个模型训练起来。

 
 
 

我下次试着描写这个定义的部分,但剩下2篇的扣打,我想想要怎麽写才好XD


<<:  Day 28 -『破釜沉舟的转职路 - 去年说要成为软件工程师的我,今年 38 岁了,我成为工程师了吗?』-- 第一天上班就想好离职的那一天是什麽时候?

>>:  第二十九日-MYSQL预存程序 STORED PROCEDURE:来写一个BMI小程序(2)

npm
杂谈    

测试表格,请忽略

╳ HTML CSS JS 作用 负责输出内容 美化HTML输出的内容+整个网站 增加网站的互动性...

成员 10 人:半夜加班,毛骨悚然的诡故事

人员终於跨入两位数,虽然只是个不明显的里程碑; 但也准备从「求生存」往「求发展」的路程前进。 这时候...

端点防护软件 - 其他注意事项(除旧布新)

适用人员: 技术人员。 适用法规: 散布在安全检测的项目内,或是 ISMS 的要求中 技术面分类提要...

Day 28: Divide and Conquer

这是什麽 分而治之,分治法! 分治法的步骤是: 将一个问题拆解成多个可以处理的小问题後 处理、击破每...

[iT铁人赛Day23]练习题(2)

嗨,大家好,由於本人昨天去打了疫苗,然後晚上9点开始被副作用折腾 以至於过了12点不能马上发文 然後...