python - 如何比较或测量Tensorflow中模型的实际大小?

标签 python tensorflow machine-learning

我想比较 Keras 模型及其 TFLite 量化版本的大小。训练完成后,将模型保存为.h5格式,然后加载为:

model= tf.keras.models.load_model('dir/model.h5')

converter = tf.lite.TFLiteConverter.from_keras_model_file('dir.model.h5')

converter.post_training_quantize = True

quantized_model = converter.convert()

我的问题:是否有标准功能或方法来估计和比较模型的大小?我知道它们可能会以不同的格式保存,从而导致不同的大小,我想知道 ML 从业者是否有一种好方法来测量模型的实际大小(例如,在边缘部署的情况下,有一个对硬盘中实际模型大小的严格限制)。

我尝试使用:

sys.getsizeof('dir/model.h5') # returns ~100

sys.getsizeof(quantized_model) # returns ~10,000 -- yes, much larger, probably due to different formats

但结果没有建立任何有意义的比较。

<小时/>

更新:对实际内存使用情况或我不知道的其他实际测量感兴趣,但对参数数量不感兴趣,这些参数应该在量化下保留。

最佳答案

当您尝试比较两个模型时,这取决于您想要比较它们的内容:

  1. 两个模型占用的内存空间(如果具有相同的压缩级别:这种可能性较小)。
  2. 可训练参数的数量(参见:How to count total number of trainable parameters in a tensorflow model?)
  3. 参数总数。

基于内存上文件大小的比较

import os
# Get file size in bytes for a given model
os.stat('model.h5').st_size

基于参数数量的比较

在大多数情况下,人们想知道可训练参数的总数。但是,如果您对可训练和不可训练参数的总数感兴趣,可以使用 model.summary() 获取它。您可以查看 LayersModel 类的源代码,了解如何获取 model.summary() 的结果。 github source for print_summary() method从 withing model.summary() 调用可以找到 here :
来源: https://www.tensorflow.org/js/guide/models_and_layers#model_summary

enter image description here

引用文献

  1. How to check file size in python?
  2. https://www.tensorflow.org/js/guide/models_and_layers#model_summary

关于python - 如何比较或测量Tensorflow中模型的实际大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513385/

相关文章:

swift - Xcode 项目中的 Vision 和 ARKit 框架

r - 混淆矩阵。行和列的百分比

python - 属性错误 : 'Foo' object has no attribute 'max'

python - 了解 tensorflow 切片操作

python - Tensorflow ValueError : logits and labels must have the same shape ((None, 2) vs (None, 1))

machine-learning - Tensorflow 中的加权训练示例

python - 如何在 Python 中替换预分配的 np.array 的元素,matlab 样式

python - Django 元素通过多个应用程序提供静态文件

python - Cython 随机滚动不会产生预期的输出

tensorflow - 使用 keras 进行分类 : input data shape