ep20把我这几天以来的文章,标题开头是二的文章都梳理一遍,然後相信大家绝对不记得,或看到一半会忘记,我到底是从哪里开始追踪原始码,以及为什麽会照这个顺序。
我们最初是在train.py
遇到他呼叫data_generator.py
的get_one_shot_iterator()
method,目的是为了取得训练资料,才开始了长达20天的追踪。
我们追踪到现在,好不容易把这个method呼叫的map function:_parse_function
和_preprocess_image
都讲完了,最後还剩下一点点的程序,就可以从data_generator.py
跳回train.py
了。
接着再继续吧。
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。
batch()
,他会规定每呼叫一次dataset iterator,iterator会吐出多少笔资料来。在校长颁奖时,旁边会有大使拿着一叠奖状供校长拿取,这样可以快速进行颁奖。
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)
╳ HTML CSS JS 作用 负责输出内容 美化HTML输出的内容+整个网站 增加网站的互动性...
人员终於跨入两位数,虽然只是个不明显的里程碑; 但也准备从「求生存」往「求发展」的路程前进。 这时候...
适用人员: 技术人员。 适用法规: 散布在安全检测的项目内,或是 ISMS 的要求中 技术面分类提要...
这是什麽 分而治之,分治法! 分治法的步骤是: 将一个问题拆解成多个可以处理的小问题後 处理、击破每...
嗨,大家好,由於本人昨天去打了疫苗,然後晚上9点开始被副作用折腾 以至於过了12点不能马上发文 然後...