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

相关文章
|
4月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
65 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
7月前
|
TensorFlow 算法框架/工具
【tensorflow】TF1.x保存与读取.pb模型写法介绍
由于TF里面的概念比较接地气,所以用tf1.x保存.pb模型时总是怕有什么操作漏掉了,会造成保存的模型是缺少变量数据或者没有保存图,所以先明确一下:用TF1.x保存模型时只需要保存模型的输入输出的变量(多输入就保存多个),不需要保存中间的变量;用TF1.x加载模型时只需要加载保存的模型,然后读一下输入输出变量(多输入就读多个),不需要初始化(反而会重置掉变量的值)。
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【tensorflow】连续输入的线性回归模型训练代码
  get_data函数用于生成随机的训练和验证数据集。首先使用np.random.rand生成一个形状为(10000, 10)的随机数据集,来模拟10维的连续输入,然后使用StandardScaler对数据进行标准化。再生成一个(10000,1)的target,表示最终拟合的目标分数。最后使用train_test_split函数将数据集划分为训练集和验证集。
|
7月前
|
机器学习/深度学习 算法 TensorFlow
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
树叶识别系统python+Django网页界面+TensorFlow+算法模型+数据集+图像识别分类
134 1
|
7月前
|
机器学习/深度学习 移动开发 算法
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
92 0
动物识别系统python+Django网页界面+TensorFlow算法模型+数据集训练
|
4月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
197 0
|
2天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
|
4天前
|
机器学习/深度学习 TensorFlow API
Python安装TensorFlow 2、tf.keras和深度学习模型的定义
Python安装TensorFlow 2、tf.keras和深度学习模型的定义
|
13天前
|
机器学习/深度学习 TensorFlow 调度
优化TensorFlow模型:超参数调整与训练技巧
【4月更文挑战第17天】本文探讨了如何优化TensorFlow模型的性能,重点介绍了超参数调整和训练技巧。超参数如学习率、批量大小和层数对模型性能至关重要。文章提到了三种超参数调整策略:网格搜索、随机搜索和贝叶斯优化。此外,还分享了训练技巧,包括学习率调度、早停、数据增强和正则化,这些都有助于防止过拟合并提高模型泛化能力。结合这些方法,可构建更高效、健壮的深度学习模型。
|
2月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
OpenCV读取tensorflow 2.X模型的方法:将SavedModel转为frozen graph
【2月更文挑战第22天】本文介绍基于Python的tensorflow库,将tensorflow与keras训练好的SavedModel格式神经网络模型转换为frozen graph格式,从而可以用OpenCV库在C++等其他语言中将其打开的方法~
OpenCV读取tensorflow 2.X模型的方法:将SavedModel转为frozen graph

热门文章

最新文章