进度条实时显示及代码解析(Python)

 本进度条代码的本质是:在每个训练轮次中,记录当前已训练个数,并除以训练样本总数获得进度值。再将进度值 乘以 ' 填充符号 ' ,制成进度条。最后,利用print(\r)的光标返回操作,实现进度条的实时更新。

核心代码如下所示:

rate = int(num_plt / 50)        # 我们的进度条总长度设定为50

# 进度条的显示部分:
        if i % 10 == 9:     # 每进行10个批次的训练,添加一个‘=’
            progress_bar = '[' + ('=' * ((i + 1) // rate)) + \# 计算当前进度等价于几个‘=’
                    (' ' * ((train_size // rate - (i + 1) // rate))) + ']'
                                                            # 计算‘#’后面的空格长度


            print('\repoch: {:d} loss: {:.3f}  {}'      # \r:光标返回文本开头
                  .format(epoch + 1, loss, progress_bar), end="  ")  # format:三个'{}' 分别对应可更新的 训练轮次、损失值、进度条

由于本人的程序中,一个轮次为500个数据组。并为了使进度条长度为50个字符,防止进度条过长,事先利用数据总数/50 得到换算比例rate,使用时只需整除rate,即可转化为需要的比例。

例如,当运行到第200个数据组时,由于此时rate为10,得到进度条显示为20个“ = ”与30个“  ”。

# 输出结果:
# epoch: 1 loss: 0.000  [====================                                                               ]  
# Total accuracy : 

完整代码:

此段代码以训练神经网络为应用场景。模拟了将64000份数据分为500批次输入神经网络,进行20轮训练。并根据已训练的数据个数,实时显示训练进度。

完整的训练代码如下所示。相关语句的功能已注释,望各位多提宝贵意见,谢谢!

import time

num_plt = 500
fileNames = range(500)
num = 0
rate = int(num_plt/50)
for file in range(num_plt):

# 进度条的显示部分:
# 进度条的显示部分:
    num += 1
    time.sleep(0.1)
    progress_bar = '[' + ('=' * ((num + 1) // rate)) + \
                    ('*' * ((num_plt // rate - (num + 1) // rate))) + ']'# 计算当前进度等价于几个‘=’,计算‘#’后面的空格长度
                           
    print('\rschedule: {:f} {}file: {:d}  '      # \r:光标返回文本开头
                  .format(float(num/num_plt), progress_bar, fileNames[file]), end="  ")  # format:三个'{}' 分别对应可更新的 训练轮次、损失值、进度条

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值