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

news2024/10/6 16:18:17

当创建了一个多层感知机模型后,如何调用接口获取该模型的参数量和计算量?首先,打印出模型结构,可通过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和内存的消耗情况

timecpu%mem%
20221227-21484801.499115212
20221227-2148499.91.547653878
20221227-21485031.551227276
20221227-2148511.51.553932141
20221227-21485231.555966993
20221227-21485431.556488113
20221227-21485531.556587374

通过原始数据绘制出趋势图
在这里插入图片描述

总结

  • 采用graphviz和pydot模块,绘制网络模型结构

  • 采用keras_flops模块统计模型的计算量

  • 使用model.summary接口统计模型参数量

  • 使用psutil模块统计模型运行时的资源消耗情况

参考文档

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

Python常用库之psutil使用指南

如何计算 LSTM 的参数量

tf.keras计算FLOPs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron

linux ubuntu 如何自动定时备份数据库到服务器 mysql mysqldump cron 一、需求描述 我有一个小日记应用,从 2019 年到 2022 年已经出现了两次比较严重的数据丢失的情况,一次是服务器错误,一次是人为。 所以我急切需要它能自己自动备份数据库…

基于servlet+jsp+mysql实现的java web校园车辆管理系统

一、项目简介 本项目是一套基于servletjspmysql实现的java web校园车辆管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严…

WebDAV之葫芦儿·派盘+Orgzly

Orgzly 支持WebDAV方式连接葫芦儿派盘。 给大家推荐一款Android 上的笔记与 todo 待办事项相融合的应用,它通过树形结构来记录笔记,并且只需要对笔记进行 TODO 标记就能变身任务管理,十分方便。 Orgzly是一款多功能的应用,更确切地说,它是一款 org 文件编辑器。Org 和 …

ArcGIS基础实验操作100例--实验12以线要素分割面要素(二)

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验12 以线要素分割面要素(二) 目录 一、实验背景 二、实验数据 …

C++ | 缺省参数

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

UDS - 10.2 DiagnosticSessionControl (10) service

来自:ISO 14229-1-2020.pdf 10.2.1 服务描述 DiagnosticSessionControl服务用于在服务器中启用不同的诊断会话。 诊断会话启用服务器中的一组特定诊断服务和/或功能。该服务提供了服务器可以报告数据链路层特定参数值的能力,这些参数值对于已启用的诊断…

Python语言快速入门下1

目录 一、函数 【函数定义与调用】 【形参与实参】 【return语句】 【变量作用域】 【可变长度参数】 二、lambda表达式 三、案例 【例题1】 【例题2】 【例题3】 【例题4】 【例题5】 一、函数 【函数定义与调用】 【例子】一个穷小子想娶富家之女,她…

【正点原子FPGA连载】第四章开发环境搭建摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第四章开发环境搭…

HPA与VPA

写在前面 语雀原文阅读效果更佳: 6、HPA与VPA 语雀 《6、HPA与VPA》 HPA与VPA 1、HPA 在前面的学习中我们使用了一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个是完全手动操作的,要应对线上的各种复杂情况,我…

ELK收集交换机日志

1、环境介绍 交换机:华为、思科、H3C Elasticsearch版本:7.13.3 kibana版本:v 7.13.3 logstash版本:7.17.8 2、ES集群配置 参考: https://blog.csdn.net/zyj81092211/article/details/118935274 3、kibana配置 参考 …

实战 | 使用图像处理改善OCR结果(详细步骤 + 源码)

导 读 本文主要介绍一个通过图像处理改善OCR识别结果的实例,并给出详细步骤和源码。 背景介绍 在很多情况下,文字识别会遇到困难。比如非单一的背景、杂讯干扰、文字部分缺失等。如下图所示: 我们希望识别图中的黑色文字(12-14),但背景较复杂且存在其他干扰,如果直接…

rabbitmq基础8——持久化、存储机制、ETS、队列结构、消息状态、内存告警、磁盘告警

文章目录一、持久化1.1 持久化对象1.1.1 交换器持久化1.1.2 队列持久化1.1.3 消息持久化1.2 总结要点二、存储机制2.1 存储方式2.2 存储文件2.2.1 队列索引.idx文件2.2.2 消息存储.rdq文件2.2.3 垃圾回收机制(文件合并)2.3 存储原理2.3.1 生产者消息写入…

基于图形化界面的方式创建vue2项目

前提是安装vue-cli npm i -g vue/cli 接下来使用vue ui 创建vue项目 vue ui 浏览器自动打开 点击创建,然后去到你想把创建的项目放到的位置 如果到不了那个位置,就window E 打开打开文件夹去到那个位置,之后再在文件夹的搜索中输入cmd打开命…

某农业学校 算法设计与分析-第7次实验综合

寻找数组中的第k小元素 【问题描述】给定一个长度为n的整数数组nums和整数k,输出数组中的第k小元素。要求不能对数组排序,使用分治的思想求解。 【输入形式】输入的第1行中有1个数字n,表示数组的长度;第2行中有n个数字&#xff0c…

Qt+C++ TCP发送接收信息客户端与服务端窗体

程序示例精选 QtC TCP发送接收信息客户端与服务端窗体 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC TCP发送接收信息客户端与服务端窗体>>编写代码&#xff0c;代码整洁&am…

Linux常用基本指令详解

各位看客在看本期博客之前请放轻松心态&#xff0c;以免内容过长造成不适~ 目录 1. ls指令 1.1 ls指令的作用 1.2 ls常用的指令选项 2. pwd指令 3. cd指令 3.1 cd .. 3.2 cd 文件路径 3.3 cd ~ 3.4 cd - 4.热键Tab 4.1 使用Tab键进行命令的自动补齐 4.2 使用Tab键进行查看…

driftingblues4靶机(zbarimg二维码破解)

环境准备 靶机链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;qyha 虚拟机网络链接模式&#xff1a;桥接模式 攻击机系统&#xff1a;kali linux 2021.1 信息收集 1.arp-scan -l 探测目标靶机 2.nmap -p- -A -T4 192.168.1.107 扫描靶机开放端口和相应服务 3.…

【财务】FMS财务管理系统---付款管理

前一篇介绍了财务应付管理中的结算明细报表、结算单以及税票管理几个部分&#xff0c;本篇将分享下财务付款相关的内容。 付款最终是要汇款或现金支付给供货商或合作商家&#xff0c;公司的现金流就会减少&#xff0c;所以是不是所有的付款申请都要付&#xff1f;什么时间付出才…

一体式无线阀控超声水表在西北某市大用户用水计量收费管理项目应用案例

多年来&#xff0c;西北某市的工业园区供水公司对工业企业用户的用水收费一直采取业务员手动抄表、上门收费的方式。不仅效率低、浪费人力资源&#xff0c;而且供水公司很难掌握地区用水情况&#xff0c;不便于统一调度和管理。 为此&#xff0c;该工业园区安装了平升电子一体…

【微信小程序项目的基本组成结构】

项目的基本组成结构 ├── app.js # 小程序的逻辑文件 ├── app.json # 小程序的配置文件 ├── app.wxss # 全局公共样式文件 ├── pages # 存放小程序的各个页面 │ ├── index # index页面 │ │ ├── index.js # 页面逻辑 │ │ ├── index.wxml # 页面结构 │…