返回顶部
首页 > 资讯 > 后端开发 > Python >Python tensorflow与pytorch的浮点运算数怎么计算
  • 512
分享到

Python tensorflow与pytorch的浮点运算数怎么计算

2023-07-04 15:07:48 512人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python Tensorflow与PyTorch的浮点运算数怎么计算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tensorflow

这篇文章主要讲解了“python TensorflowPyTorch的浮点运算数怎么计算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tensorflow与pytorch的浮点运算数怎么计算”吧!

    1. 引言

    FLOPs 是 floating point operations 的缩写,指浮点运算数,可以用来衡量模型/算法的计算复杂度。本文主要讨论如何在 tensorflow 1.x, tensorflow 2.x 以及 pytorch 中利用相关工具计算对应模型的 FLOPs。

    2. 模型结构

    为了说明方便,先搭建一个简单的神经网络模型,其模型结构以及主要参数如表1 所示。

    表 1 模型结构及主要参数

    LayerschannelsKernelsStridesUnitsActivation
    Conv2D32(4,4)(1,2)\relu
    GRU\\\96\
    Dense\\\256sigmoid

    用 tensorflow(实际使用 tensorflow 中的 keras 模块)实现该模型的代码为:

    from tensorflow.keras.layers import *from tensorflow.keras.models import load_model, Modeldef test_model_tf(Input_shape):    # shape: [B, C, T, F]    main_input = Input(batch_shape=Input_shape, name='main_inputs')    conv = Conv2D(32, kernel_size=(4, 4), strides=(1, 2), activation='relu', data_fORMat='channels_first', name='conv')(main_input)    # shape: [B, T, FC]    gru = Reshape((conv.shape[2], conv.shape[1] * conv.shape[3]))(conv)    gru = GRU(units=96, reset_after=True, return_sequences=True, name='gru')(gru)    output = Dense(256, activation='sigmoid', name='output')(gru)    model = Model(inputs=[main_input], outputs=[output])    return model

    用 pytorch 实现该模型的代码为:

    import torchimport torch.nn as nnclass test_model_torch(nn.Module):    def __init__(self):        super(test_model_torch, self).__init__()        self.conv2d = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=(4,4), stride=(1,2))        self.relu = nn.ReLU()        self.gru = nn.GRU(input_size=4064, hidden_size=96)        self.fc = nn.Linear(96, 256)        self.sigmoid = nn.Sigmoid()    def forward(self, inputs):        # shape: [B, C, T, F]        out = self.conv2d(inputs)        out = self.relu(out)        # shape: [B, T, FC]        batch, channel, frame, freq = out.size()        out = torch.reshape(out, (batch, frame, freq*channel))        out, _ = self.gru(out)        out = self.fc(out)        out = self.sigmoid(out)        return out

    3. 计算模型的 FLOPs

    本节讨论的版本具体为:tensorflow 1.12.0, tensorflow 2.3.1 以及 pytorch 1.10.1+cu102。

    3.1. tensorflow 1.12.0

    在 tensorflow 1.12.0 环境中,可以使用以下代码计算模型的 FLOPs:

    import tensorflow as tfimport tensorflow.keras.backend as Kdef get_flops(model):    run_meta = tf.RunMetadata()    opts = tf.profiler.ProfileOptionBuilder.float_operation()    flops = tf.profiler.profile(graph=K.get_session().graph,                                run_meta=run_meta, cmd='op', options=opts)    return flops.total_float_opsif __name__ == "__main__":    x = K.random_normal(shape=(1, 1, 100, 256))    model = test_model_tf(x.shape)    print('FLOPs of tensorflow 1.12.0:', get_flops(model))

    3.2. tensorflow 2.3.1

    在 tensorflow 2.3.1 环境中,可以使用以下代码计算模型的 FLOPs :

    import tensorflow.compat.v1 as tfimport tensorflow.compat.v1.keras.backend as Ktf.disable_eager_execution()def get_flops(model):    run_meta = tf.RunMetadata()    opts = tf.profiler.ProfileOptionBuilder.float_operation()    flops = tf.profiler.profile(graph=K.get_session().graph,                                run_meta=run_meta, cmd='op', options=opts)    return flops.total_float_opsif __name__ == "__main__":    x = K.random_normal(shape=(1, 1, 100, 256))    model = test_model_tf(x.shape)    print('FLOPs of tensorflow 2.3.1:', get_flops(model))

    3.3. pytorch 1.10.1+cu102

    在 pytorch 1.10.1+cu102 环境中,可以使用以下代码计算模型的 FLOPs(需要安装 thop):

    import thopx = torch.randn(1, 1, 100, 256)model = test_model_torch()flops, _ = thop.profile(model, inputs=(x,))print('FLOPs of pytorch 1.10.1:', flops * 2)

    需要注意的是,thop 返回的是 Macs (Multiply–Accumulate Operations),其等于 2 2 2 倍的 FLOPs,所以上述代码有乘 2 2 2 操作。

    3.4. 结果对比

    三者计算出的 FLOPs 分别为:

    tensorflow 1.12.0:

    Python tensorflow与pytorch的浮点运算数怎么计算

    tensorflow 2.3.1:

    Python tensorflow与pytorch的浮点运算数怎么计算

    pytorch 1.10.1:

    Python tensorflow与pytorch的浮点运算数怎么计算

    可以看到 tensorflow 1.12.0 和 tensorflow 2.3.1 的结果基本在同一个量级,而与 pytorch 1.10.1 计算出来的相差甚远。但如果将上述模型结构改为只包含第一层 Conv2D,三者计算出来的 FLOPs 却又是一致的。所以推断差异主要来自于 GRU 的 FLOPs。

    感谢各位的阅读,以上就是“Python tensorflow与pytorch的浮点运算数怎么计算”的内容了,经过本文的学习后,相信大家对Python tensorflow与pytorch的浮点运算数怎么计算这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Python tensorflow与pytorch的浮点运算数怎么计算

    本文链接: https://lsjlt.com/news/346340.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Python tensorflow与pytorch的浮点运算数怎么计算
      这篇文章主要讲解了“Python tensorflow与pytorch的浮点运算数怎么计算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python tensorflow...
      99+
      2023-07-04
    • php 无法计算浮点数怎么办
      本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php 无法计算浮点数怎么办?php中浮点数计算问题 如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*1...
      99+
      2022-03-22
      php 浮点数
    • Java中怎么精确计算浮点数
      今天就跟大家聊聊有关Java中怎么精确计算浮点数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。问题的提出:XML:namespace prefix = o ns = "ur...
      99+
      2023-06-03
    • python浮点数运算问题如何解决
      在使用Python进行浮点数运算时,可能会遇到一些精度问题。这是因为计算机使用二进制来表示浮点数,而二进制无法精确地表示某些十进制小...
      99+
      2023-10-21
      python
    • python中实现精确的浮点数运算详解
      为什么说浮点数缺乏精确性? 在开始本文之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾。 举个例子,假如说我只能使用整数(即只精...
      99+
      2022-06-04
      详解 精确 浮点数
    • 聊聊Python中的浮点数运算不准确问题
      大家好,老 Amy 来了。之前就意识到一个问题,但是最近又有朋友提出来了,所以就想着干脆记录下来,分享给大家叭~ 啥问题呢?请看题: 也就是说,需要大家计算1.1-1的值,很多朋友...
      99+
      2024-04-02
    • python浮点数运算精度问题如何解决
      在Python中,浮点数运算可能存在精度问题,可以采取以下方法解决:1. 使用Decimal模块:Decimal模块提供了精确的十进...
      99+
      2023-08-26
      python
    • PHP浮点数运算问题分析与解决方案
      PHP是一种广泛应用于网站开发的脚本语言,其强大的功能和灵活性使得它成为许多开发者的首选工具。然而,在处理浮点数运算时,PHP也存在一些问题,特别是在涉及到精度和精确性要求较高的情况下...
      99+
      2024-02-27
      php 运算 浮点数 格式化输出
    • [Python3]计算高精确度的浮点数方
      计算高精确度的浮点数方法借助decimal模块的”getcontext”和”Decimal”方法from decimal import *getcontext().prec = 50 #50精度a = Decimal(1) / Decim...
      99+
      2023-01-31
      精确度 浮点数
    • Python中的浮点数计算精度问题是如何解决的?
      Python中的浮点数计算精度问题是如何解决的?在计算机科学中,浮点数计算精度问题是常见的挑战之一。由于计算机内部使用有限的比特位来表示浮点数,所以对于某些小数的表示和运算时,可能会出现精度损失的情况。Python作为一门强大的编程语言,提...
      99+
      2023-10-22
      解决 浮点数 精度
    • 解决PHP浮点数计算精度丢失的方法
      解决PHP浮点数计算精度丢失的方法 在PHP中,由于浮点数的本质是二进制表示,会导致在进行计算时出现精度丢失的问题。这种问题在一些对精度要求较高的场景下就显得尤为重要。为了避免由于浮点...
      99+
      2024-02-27
      解决方法 php浮点数 计算精度
    • python中怎么利用PyTorch进行回归运算
      本篇内容介绍了“python中怎么利用PyTorch进行回归运算”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PyTorch中的重要基础函数...
      99+
      2023-06-30
    • C语言中怎么用浮点数计算三维空间的几何
      在C语言中,可以使用浮点数来表示三维空间中的点、向量、线段等对象,并进行相关的几何运算,如计算两点之间的距离、向量的长度、点与线段的...
      99+
      2024-04-28
      C语言
    • python怎么计算次数
      python中计算次数的方法,在python中可以使用count()方法计算次数,该函数主要用于统计字符串里某个字符出现的次数,可选参数为在字符串搜索的开始与结束位置。具体内容如下:count()语法str.count(sub, start...
      99+
      2024-04-02
    • Shell脚本处理浮点数的运算和比较实例
      通过top命令看到的进程的CPU、内存的使用率的百分比是一个浮点数,我需要在写脚本时对其进行处理,所以学习了一些,总结如下。 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“b...
      99+
      2022-06-04
      脚本 实例 浮点数
    • Shell脚本处理浮点数的运算和比较方式
      这篇文章主要讲解了“Shell脚本处理浮点数的运算和比较方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本处理浮点数的运算和比较方式”吧!通过top命令看到的进程的CPU、内存...
      99+
      2023-06-09
    • Python函数参数中的*与**运算符
      问题描述 在阅读某些代码时,经常会看到函数定义/调用时的参数前带有 * 或者 ** 运算符,比较糊涂,今天来探究记录一番. 函数定义时的 * 和 ** 查阅相关资料得知,在参数前...
      99+
      2024-04-02
    • PHP浮点数运算精度失真问题的深入分析
      PHP作为一种脚本语言在Web开发中使用广泛,其灵活性和易用性受到众多开发者的青睐。然而,在使用PHP进行浮点数运算时,经常会遇到精度失真的问题,这给开发过程带来一定的挑战。本文将对P...
      99+
      2024-02-27
      php 浮点数 精度
    • python的运算符与表达式怎么用
      这篇文章主要为大家展示了“python的运算符与表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python的运算符与表达式怎么用”这篇文章吧。表达式什么是表达式?# •&n...
      99+
      2023-06-26
    • pytorch怎么获得模型的计算量和参数量
      这篇文章给大家分享的是有关pytorch怎么获得模型的计算量和参数量的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法1 自带pytorch自带方法,计算模型参数总量total = sum([...
      99+
      2023-06-15
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作