我想比较 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
但结果没有建立任何有意义的比较。
<小时/>更新:对实际内存使用情况或我不知道的其他实际测量感兴趣,但对参数数量不感兴趣,这些参数应该在量化下保留。
最佳答案
当您尝试比较两个模型时,这取决于您想要比较它们的内容:
- 两个模型占用的内存空间(如果具有相同的压缩级别:这种可能性较小)。
- 可训练参数的数量(参见:How to count total number of trainable parameters in a tensorflow model?)
- 参数总数。
基于内存上文件大小的比较
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
引用文献
关于python - 如何比较或测量Tensorflow中模型的实际大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513385/