2021/3/28:本人对global_step理解甚浅,以下内容仅是我发现问题、进行相关搜索后的小记录,可能存在错误之处,还请大神指正。
问题的由来
【NLP_关系抽取】Bi-GRU模型训练、评估与使用 中,所用模型的的迭代次数似乎不可控(详见train.py)。
![](https://i-blog.csdnimg.cn/blog_migrate/41b5061f82dd10de34d5ef30d49bc44d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/da654ce75fd6a8d8485c7ed22f9201fe.png)
尝试搜索包含epoch, step, num等的关键词,加以修改,迭代次数均无变化,得到的只有一些报错信息。
随后,与计算机专业同学交流后,发现可能是因为包含“global_step”。
浅析global_step
可能正如夕宝爸爸所说(在 Tensorflow中 global_step 的作用? - 简书 (jianshu.com)),global_step是不可自定义的,它只能算作一个自动加一的迭代计数器。
global_step记录的是train阶段每一步的索引,或者说是训练迭代的计数器,比如说在最后画loss和 accuracy的横坐标即是global_step
而其数值动态调整,可能是由衰减率等参数决定的(global_step用法 - 简书 (jianshu.com))。
2021/3/29:新发现
就【NLP_关系抽取】Bi-GRU模型训练、评估与使用中的模型代码(train.py)而言,迭代次数可控。
关注代码中出现的for循环,这很可能决定了迭代次数。打印,查看其循环次数信息。
print("len(word_batch)",len(word_batch)) #50
for i in range(len(word_batch)):
……
将下列for循环的循环次数自定义为50,即有50次迭代训练。
print("settings.num_epochs",settings.num_epochs) #10——此即当前迭代次数!
for one_epoch in range(settings.num_epochs):
……