逐行统计python代码执行时间

逐行统计python代码执行时间

在炼丹或者debug的过程中,我们经常需要去逐行统计代码运行的时间。使用time.time()是可以解决问题,但是过于繁琐。于是通过一顿踩坑,推荐使用line_profiler库, 安装方式如下,十分简单。

pip install line_profiler

在这里插入图片描述
安装成功,下面开始介绍如何使用。



from __future__ import print_function

from line_profiler import LineProfiler
import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim.lr_scheduler import CosineAnnealingLR, StepLR
from data import ModelNet_Loader
from model import PointNet
import numpy as np
from torch.utils.data import DataLoader
from util import cal_loss, IOStream
import sklearn.metrics as metrics




def train(args, io):

    train_loader = DataLoader(ModelNet40(args, partition='train', num_points=args.num_points), batch_size=args.batch_size, shuffle=True, drop_last=False)
    test_loader = DataLoader(ModelNet40(args, partition='test', num_points=args.num_points), num_workers=8,batch_size=args.test_batch_size, shuffle=False, drop_last=False)

    device = torch.device("cuda:0" if args.cuda else "cpu")

    #Try to load models
    if args.model == 'pointnet':
        model = PointNet(args).to(device)

    print(str(model))

    if args.use_sgd:
        print("Use SGD")
        opt = optim.SGD(model.parameters(), lr=args.lr*100, momentum=args.momentum, weight_decay=1e-4)
    else:
        print("Use Adam")
        opt = optim.Adam(model.parameters(), lr=args.lr, weight_decay=1e-4)

    if args.scheduler == 'cos':
        scheduler = CosineAnnealingLR(opt, args.epochs, eta_min=1e-3)
    elif args.scheduler == 'step':
        scheduler = StepLR(opt, step_size=20, gamma=0.7)
    
    criterion = cal_loss

    best_test_acc = 0.85
    for epoch in range(args.epochs):
        ####################
        # Train
        ####################
        train_loss = 0.0
        count = 0.0
        model.train()
        train_pred = []
        train_true = []

        time_epoch = time.time()

        for data, label in train_loader:

            data, label = data.to(device), label.to(device).squeeze()
            data = data.permute(0, 2, 1)
            batch_size = data.size()[0]
            opt.zero_grad()
            logits = model(data)
            loss = criterion(logits, label)
            loss.backward()
            opt.step()
            preds = logits.max(dim=1)[1]
            count += batch_size
            train_loss += loss.item() * batch_size
                                                                          
if __name__ == "__main__":
    # Training settings
    parser = argparse.ArgumentParser(description='Point Cloud Recognition')
    parser.add_argument('--exp_name', type=str, default='exp_dgcnn_modelnet_2048_time', metavar='N',help='Name of the experiment')
    parser.add_argument('--model', type=str, default='dgcnn', metavar='N',choices=['pointnet', 'dgcnn','pointcnn'],help='Model to use, [pointnet, dgcnn]')
    parser.add_argument('--dataset', type=str, default='modelnet40', metavar='N')
    parser.add_argument('--batch_size', type=int, default=8, metavar='batch_size',help='Size of batch)')
    parser.add_argument('--test_batch_size', type=int, default=4, metavar='batch_size',help='Size of batch)')
    parser.add_argument('--epochs', type=int, default=2, metavar='N',help='number of episode to train ')


    args = parser.parse_args()
    lp = LineProfiler()
    lp_wrapper = lp(train)
    lp_wrapper(args, io)
    lp.print_stats()

简化的代码,中间可能会有缺失,但是不影响介绍line_profiler的使用。

如下图所示,显示了每一行代码的运行时间,调用次数和占用百分比

在这里插入图片描述

参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,Python 词频统计是一种统计文本中词汇出现次数的方法,可以帮助我们更好地了解文本的特征和内容。下面我为你演示一下如何用 Python 对《哈姆雷特》进行词频统计。 首先,我们需要一个文本文件,这里我将使用《哈姆雷特》的英文版文本文件。你可以在网上搜索到该文件并下载到本地。 然后,我们可以使用 Python 自带的文本处理模块 `re` 和 `collections` 来进行词频统计。具体代码如下: ```python import re from collections import Counter # 读取文本文件 with open('hamlet.txt', 'r') as f: text = f.read().lower() # 使用正则表达式分割单词 words = re.findall('\w+', text) # 统计词频 word_count = Counter(words) # 输出前 10 个出现次数最多的单词 for word, count in word_count.most_common(10): print(word, count) ``` 代码中,我们首先使用 `open` 函数读取文本文件,并将文本内容转换为小写字母,以便统计时不区分大小写。然后使用正则表达式 `\w+` 分割单词,`\w` 表示任意一个单词字符(字母、数字、下划线),`+` 表示匹配多个连续的单词字符。接着使用 `Counter` 统计单词出现次数,并使用 `most_common` 方法输出前 10 个出现次数最多的单词和对应的出现次数。 你可以将代码保存为一个 `.py` 文件并在命令行中运行,或者直接在 Python 解释器中逐行执行,得到类似下面的统计结果: ``` the 1159 and 711 to 706 of 670 i 574 a 548 you 457 my 452 in 417 hamlet 358 ``` 这样,我们就完成了对《哈姆雷特》的词频统计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值