TensorFlow网络内存计算与model.summary结果差异原因探究
TensorFlow模型参数内存计算与summary显示差异的原因
问题背景
构建的模型代码:
model = Sequential() model.add(Conv2D(16, (3,3), activation='relu', input_shape=(1491, 257,1))) model.add(Conv2D(16, (3,3), activation='relu')) model.add(Flatten()) model.add(Dense(96, activation='relu')) model.add(Dense(1, activation='sigmoid'))
运行model.summary()输出:
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 1489, 255, 16) 160 conv2d_1 (Conv2D) (None, 1487, 253, 16) 2320 flatten (Flatten) (None, 6019376) 0 dense (Dense) (None, 96) 577860192 dense_1 (Dense) (None, 1) 97 ================================================================= Total params: 577862769 (2.15 GB) Trainable params: 577862769 (2.15 GB) Non-trainable params: 0 (0.00 Byte)
你自行计算得到的≈2.31GB和summary显示的2.15GB差异,核心原因是单位换算标准不同:
具体解释
TensorFlow的model.summary()里标注的「GB」实际是二进制单位GiB,而非我们日常常说的十进制GB:
- 十进制GB:1GB = 10^9 = 1000000000字节
- 二进制GiB:1GiB = 2^30 = 1073741824字节
用GiB重新计算总内存:
总字节数为577862769 * 4 = 2311451076字节,除以1GiB的字节数1073741824,结果≈2.15GiB,和summary显示的数值完全匹配(TensorFlow在这里将GiB简写为GB)。
在你确认参数均为float32类型的前提下,不存在其他额外内存占用影响这个统计结果,所有差异都来自单位换算的标准区别。
内容的提问来源于stack exchange,提问作者user1245262
相关产品推荐
相关产品推荐

