tensorflow2.x多层感知机模型参数量和计算量的统计

简介: tensorflow2.x多层感知机模型参数量和计算量的统计

当创建了一个多层感知机模型后,如何调用接口获取该模型的参数量和计算量?首先,打印出模型结构,可通过graphviz模块实现

# 加载模型
model = keras.models.load_model(modelPath)
tf.keras.utils.plot_model(model, to_file='model.png', show_shapes=True)

可得到模型层次结构

即模型的输入层为(,18),由N * 18的二维数组,中间层分别为64和50个节点。最后得到N * 2的输出节点。其中N表示样本个数。调用相关接口可打印出模型的参数量

# 加载模型
model = keras.models.load_model(modelPath)
model.summary()

Layer (type)                         Output Shape                     Param #


input_1 (InputLayer)            [(None, 18)]                        0


dense (Dense)                    (None, 64)                          1216


dense_1 (Dense)                (None, 50)                          3250


dense_2 (Dense)                (None, 2)                            102


Total params: 4,568

Trainable params: 4,568

Non-trainable params: 0

可知模型的参数量计算为(18+1)* 64 + (64+1)* 50 + (50+1)*2 = 4568。

模型的计算量如何统计?在tensorflow2.0以上需要用到keras_flops模块中的get_flops函数

from keras_flops import get_flops
...
# 加载模型
model = keras.models.load_model(modelPath)
get_flops(model)

可得到类似下面的输出

Model Analysis Report====

Doc:

scope: The nodes in the model graph are organized by their names, which is hierarchical like filesystem.

flops: Number of float operations. Note: Please read the implementation for the math behind it.

Profile:

node name | # float_ops

_TFProfRoot (–/9.03k flops)

healthy/dense_1/MatMul (6.40k/6.40k flops)

healthy/dense/MatMul (2.30k/2.30k flops)

healthy/dense_2/MatMul (200/200 flops)

healthy/dense/BiasAdd (64/64 flops)

healthy/dense_1/BiasAdd (50/50 flops)

healthy/dense_2/Softmax (10/10 flops)

healthy/dense_2/BiasAdd (2/2 flops)

End of Report====

因此可知整个模型的计算量为9.03k flops。

模型在机器上跑起来后,如何知道该模型对cpu和内存的消耗情况?可使用psutil模块获取相关指标。

import os
import sys
import time
import psutil
...
def main(modelPath="./model"):
    pid = os.getpid()
    p = psutil.Process(pid)
    interval = 1
    model = keras.models.load_model(modelPath)
    input = np.expand_dims(list(range(18)), 0)
    cnt = 40
    with open("process_monitor_" + str(pid) + ".csv", "a+")  as f:
         f.write("time,cpu%,mem%\n")
         while(cnt):
             current_time = time.strftime('%Y%m%d-%H%M%S',time.localtime(time.time()))
             cpu_percent = p.cpu_percent()
             mem_percent = p.memory_percent()
             line = current_time + ',' + str(cpu_percent) + ',' + str(mem_percent)
             print("line:", line)
             f.write(line + "\n")
             result = model.predict(input)
             print("result:", result)
             time.sleep(interval)
             cnt = cnt - 1
if __name__ == '__main__':
    main()

运行后,当前目录会生成一个csv文件,记录了该模型运行后cpu和内存的消耗情况

time cpu% mem%
20221227-214848 0 1.499115212
20221227-214849 9.9 1.547653878
20221227-214850 3 1.551227276
20221227-214851 1.5 1.553932141
20221227-214852 3 1.555966993
20221227-214854 3 1.556488113
20221227-214855 3 1.556587374

通过原始数据绘制出趋势图

总结
  • 采用graphviz和pydot模块,绘制网络模型结构
  • 采用keras_flops模块统计模型的计算量
  • 使用model.summary接口统计模型参数量
  • 使用psutil模块统计模型运行时的资源消耗情况

参考文档

python实现监控指定进程的cpu和内存使用率

Python常用库之psutil使用指南

如何计算 LSTM 的参数量

tf.keras计算FLOPs

相关文章
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
83 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
24 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
39 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
23天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
67 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
108 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
1月前
|
机器学习/深度学习 移动开发 TensorFlow
深度学习之格式转换笔记(四):Keras(.h5)模型转化为TensorFlow(.pb)模型
本文介绍了如何使用Python脚本将Keras模型转换为TensorFlow的.pb格式模型,包括加载模型、重命名输出节点和量化等步骤,以便在TensorFlow中进行部署和推理。
77 0
|
3月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
51 1
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
AI智能体研发之路-模型篇(五):pytorch vs tensorflow框架DNN网络结构源码级对比
78 1
|
3月前
|
机器学习/深度学习 IDE API
【Tensorflow+keras】Keras 用Class类封装的模型如何调试call子函数的模型内部变量
该文章介绍了一种调试Keras中自定义Layer类的call方法的方法,通过直接调用call方法并传递输入参数来进行调试。
33 4
|
3月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
80 0