pytorch和tensorflow计算Flops和params的详细过程

目录
  • pytorch和tensorflow计算Flops和params
  • 1.只计算params
  • 2.计算flops和params
  • 3.tensorflow计算params和flops

pytorch和tensorflow计算Flops和params

1.只计算params

    net = model()  # 定义好的网络模型
    total = sum([param.nelement() for param in net.parameters()])
    print("Number of parameter: %.2fM" % total)

这是网上很常见的直接用自带方法计算params,基本不会出错。胜在简洁。

2.计算flops和params

要计算flops,目前没见到用自带方法计算的,基本都是要安装别的库。
这边我们安装thop库。

pip install thop # 安装thop库
import torch
from thop import profile
net = model()  # 定义好的网络模型
img1 = torch.randn(1, 3, 512, 512)
img2 = torch.randn(1, 3, 512, 512)
img3 = torch.randn(1, 3, 512, 512)
macs, params = profile(net, (img1,img2,img3))
print('flops: ', 2*macs, 'params: ', params)

这边和其他网上教程的区别便是,他们macs和flops不分。因为macs表示乘加累积操作数一个乘法加上一个加法才算一个macs。而flops表示浮点运算次数,每一个加、减、乘、除操作都算1FLOPs操作。所以很明显,在数值上,1flops=2macs。此外,(img1,img2,img3)就表示你如果有三个输入要输入模型,就这样写

另外,要注意,params只和模型参数量相关,而和输入tensor大小无关。但flops和输入图片大小是相关的.

3.tensorflow计算params和flops

此处是我找到的一些用于tensorflow计算params和flops的方法,仅供参考,不保证效果。

def get_flops_params():
    sess = tf.compat.v1.Session()
    graph = sess.graph
    flops = tf.compat.v1.profiler.profile(graph, options=tf.compat.v1.profiler.ProfileOptionBuilder.float_operation())
    params = tf.compat.v1.profiler.profile(graph,
                                           options=tf.compat.v1.profiler.ProfileOptionBuilder.trainable_variables_parameter())
    print('FLOPs: {};    Trainable params: {}'.format(flops.total_float_ops, params.total_parameters))
def count2():
    print(np.sum([np.prod(v.get_shape().as_list()) for v in tf.trainable_variables()]))
def get_nb_params_shape(shape):
    '''
    Computes the total number of params for a given shap.
    Works for any number of shapes etc [D,F] or [W,H,C] computes D*F and W*H*C.
    '''
    nb_params = 1
    for dim in shape:
        nb_params = nb_params * int(dim)
    return nb_params
def count3():
    tot_nb_params = 0
    for trainable_variable in tf.trainable_variables():
        shape = trainable_variable.get_shape()  # e.g [D,F] or [W,H,C]
        current_nb_params = get_nb_params_shape(shape)
        tot_nb_params = tot_nb_params + current_nb_params
    print(tot_nb_params)
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()
from model import Model
import keras.backend as K
def get_flops(model):
    run_meta = tf.RunMetadata()
    opts = tf.profiler.ProfileOptionBuilder.float_operation()
    # We use the Keras session graph in the call to the profiler.
    flops = tf.profiler.profile(graph=K.get_session().graph,
                                run_meta=run_meta, cmd='op', options=opts)
    return flops.total_float_ops  # Prints the "flops" of the model.
# .... Define your model here ....
M = Model(BATCH_SIZE=1, INPUT_H=268, INPUT_W=360, is_training=False)
print(get_flops(M))

到此这篇关于pytorch和tensorflow计算Flops和params的文章就介绍到这了,更多相关pytorch和tensorflow计算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pytorch_pretrained_bert如何将tensorflow模型转化为pytorch模型

    pytorch_pretrained_bert将tensorflow模型转化为pytorch模型 BERT仓库里的模型是TensorFlow版本的,需要进行相应的转换才能在pytorch中使用 在Google BERT仓库里下载需要的模型,这里使用的是中文预训练模型(chinese_L-12_H-768_A_12) 下载chinese_L-12_H-768_A-12.zip后解压,里面有5个文件 chinese_L-12_H-768_A-12.zip后解压,里面有5个文件 bert_config

  • Pytorch框架实现mnist手写库识别(与tensorflow对比)

    前言最近在学习过程中需要用到pytorch框架,简单学习了一下,写了一个简单的案例,记录一下pytorch中搭建一个识别网络基础的东西.对应一位博主写的tensorflow的识别mnist数据集,将其改为pytorch框架,也可以详细看到两个框架大体的区别. Tensorflow版本转载来源(CSDN博主「兔八哥1024」):https://www.jb51.net/article/191157.htm Pytorch实战mnist手写数字识别 #需要导入的包 import torch impo

  • 浅谈tensorflow与pytorch的相互转换

    目录 1.变量预定义 2.创建变量并初始化 3.语句执行 4.tensor 5.其他函数 本文以一段代码为例,简单介绍一下tensorflow与pytorch的相互转换(主要是tensorflow转pytorch),可能介绍的没有那么详细,仅供参考. 由于本人只熟悉pytorch,而对tensorflow一知半解,而代码经常遇到tensorflow,而我希望使用pytorch,因此简单介绍一下tensorflow转pytorch,可能存在诸多错误,希望轻喷~ 1.变量预定义 在TensorFlo

  • 关于windows下Tensorflow和pytorch安装教程

    一.Tensorflow安装 1.Tensorflow介绍 Tensorflow是广泛使用的实现机器学习以及其它涉及大量数学运算的算法库之一.Tensorflow由Google开发,是GitHub上最受欢迎的机器学习库之一.Google几乎在所有应用程序中都使用Tensorflow来实现机器学习. 例如,如果您使用到了Google照片或Google语音搜索,那么您就间接使用了Tensorflow模型.它们在大型Google硬件集群上工作,在感知任务方面功能强大. 2.Tensorflow安装(c

  • Pytorch自动求导函数详解流程以及与TensorFlow搭建网络的对比

    一.定义新的自动求导函数 在底层,每个原始的自动求导运算实际上是两个在Tensor上运行的函数.其中,forward函数计算从输入Tensor获得的输出Tensors.而backward函数接收输出,Tensors对于某个标量值得梯度,并且计算输入Tensors相对于该相同标量值得梯度. 在Pytorch中,可以容易地通过定义torch.autograd.Function的子类实现forward和backward函数,来定义自动求导函数.之后就可以使用这个新的自动梯度运算符了.我们可以通过构造一

  • Win10下安装CUDA11.0+CUDNN8.0+tensorflow-gpu2.4.1+pytorch1.7.0+paddlepaddle-gpu2.0.0

    下载地址 官方下载:CUDA和CUDNN. 安装CUDA 安装之前,建议关掉360安全卫士 双击cuda_11.0.3_451.82_win10.exe文件 根据自己需要更改安装路径 将Visual Studio Integration的勾去掉 配置环境变量 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin; C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\l

  • pytorch和tensorflow计算Flops和params的详细过程

    目录 pytorch和tensorflow计算Flops和params 1.只计算params 2.计算flops和params 3.tensorflow计算params和flops pytorch和tensorflow计算Flops和params 1.只计算params net = model() # 定义好的网络模型 total = sum([param.nelement() for param in net.parameters()]) print("Number of parameter

  • Java计算代码段执行时间的详细过程

    目录 前言 场景 代码实现 MethodBody 接口定义 CalcExecuteTimeResult 运行结果实体 ExecuteTemplate 执行模板定义 CalcExecuteTimeContext 计算执行时间上下文 测试运行 前言 在日常开发功能时,同一种功能可能会有多种实现方式.我们需要做一个取舍. 最常见的条件就是性能.可读性.可维护性. 本篇文章,我们主要讨论“性能”. 场景 假设我们现在需要计算一段代码的运行时间. 最常见的写法是,在执行这段代码前,获得一下当前的时间戳,在

  • C语言基础应用处理学生打分 计算时间 最少硬币问题详细过程

    第一题: 最少硬币问题(简单版) 假设有三种面值的硬币,分别为10.5.1.接收一个整数作为金额数,计算要达到该金额数,每个面值的硬币最少需要多少枚. 输出结果演示: 参考答案: #include <stdio.h> typedef struct StructrueMoneyBox { int n10; int n5; int n1; } MoneyBox; int main(void) { MoneyBox change = {0, 0, 0}; int face_value[4] = {1

  • PyTorch和Keras计算模型参数的例子

    Pytorch中,变量参数,用numel得到参数数目,累加 def get_parameter_number(net): total_num = sum(p.numel() for p in net.parameters()) trainable_num = sum(p.numel() for p in net.parameters() if p.requires_grad) return {'Total': total_num, 'Trainable': trainable_num} Kera

  • pytorch的梯度计算以及backward方法详解

    基础知识 tensors: tensor在pytorch里面是一个n维数组.我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度.在pytorch中一般叫做dynamic computation graph(DCG)--即动态计算图. import torch import numpy as np # 方式一 x = torch.randn(2,2, requires_grad=True) # 方式二 x = torch.autograd.Variabl

  • Pytorch 和 Tensorflow v1 兼容的环境搭建方法

    Github 上很多大牛的代码都是Tensorflow v1 写的,比较新的文章则喜欢用Pytorch,这导致我们复现实验或者对比实验的时候需要花费大量的时间在搭建不同的环境上.这篇文章是我经过反复实践总结出来的环境配置教程,亲测有效! 首先最基本的Python 环境配置如下: conda create -n py37 python=3.7 python版本不要设置得太高也不要太低,3.6~3.7最佳,适用绝大部分代码库.(Tensorflow v1 最高支持的python 版本也只有3.7)

  • Windows10+anacond+GPU+pytorch安装详细过程

    1.查看自己电脑是否匹配GPU版本. 设备管理器查看. 查看官网是否匹配.地址:https://developer.nvidia.com/cuda-gpus  ** 2.进入NVIDIA对电脑版本进行查**看. 如果可以的的话可以自己卸载原来版本,后安装新版本.安装地址https://developer.nvidia.com/cuda-toolkit-archive 接下来,进入NVIDIA安装过程,在这安装过程中,我一开始直接选择的精简安装,但由于VS的原因,导致无法正常安装,于是我换成了自定

  • PyTorch实现线性回归详细过程

    目录 一.实现步骤 1.准备数据 2.设计模型 3.构造损失函数和优化器 4.训练过程 5.结果展示 二.参考文献 一.实现步骤 1.准备数据 x_data = torch.tensor([[1.0],[2.0],[3.0]]) y_data = torch.tensor([[2.0],[4.0],[6.0]]) 2.设计模型 class LinearModel(torch.nn.Module):     def __init__(self):         super(LinearModel

  • pytorch 禁止/允许计算局部梯度的操作

    一.禁止计算局部梯度 torch.autogard.no_grad: 禁用梯度计算的上下文管理器. 当确定不会调用Tensor.backward()计算梯度时,设置禁止计算梯度会减少内存消耗.如果需要计算梯度设置Tensor.requires_grad=True 两种禁用方法: 将不用计算梯度的变量放在with torch.no_grad()里 >>> x = torch.tensor([1.], requires_grad=True) >>> with torch.n

  • python计算寄送包裹重量的实现过程

    目录 1. 编写程序实现: (1)寄送包裹小于5kg (2)邮寄包裹重量 (3)用if嵌套完成 此为平时日常老师所布置的作业. 1. 编写程序实现: (1)寄送包裹小于5kg 每公斤0.5元,大于等于5kg,超出5公斤部分,按照每公斤0.8元计算,输入重量,输出应付金额. 程序粘贴: weight=eval(input("请输入重量:")) if weight<5.0: money=weight*0.5 else: money=5.0*0.5+(weight-5.0)*0.8 p

随机推荐