本文将介绍两种简单且实用的方法,用于计算深度学习模型的参数量,并推导了输入尺寸随卷积大小的变化过程。这些方法可以帮助读者更好地理解模型的复杂度和输入尺寸的变化,为模型设计和优化提供指导。
比如论文中,通常会比较几种模型的参数量
又比如在设计模型时,需要确定我们的输入尺寸大小是否合适,以及想经过每个卷积层后尺寸的变化。我们想看到下面的信息👇
基本上每个项目我都会过一遍这些信息,更好的掌握模型。
方法一:直接计算
对于卷积神经网络(CNN)中的每一层,我们需要考虑卷积核的大小、输入通道数、输出通道数以及偏置项的数量。以一个卷积层为例,该层的参数量可以通过以下公式计算:
参数量 = 卷积核高度 × 卷积核宽度 × 输入通道数 × 输出通道数 + 输出通道数
对于整个模型来说,我们只需要将所有层的参数量相加即可得到总参数量。
该代码是一个 Python 函数,用于打印 PyTorch 模型的可训练参数数量,并且可以选择是否打印该模型的网络结构。以下是该函数的完整代码:
def print_networks(model, verbose):
"""Print the total number of parameters in the network and (if verbose) network architecture
Parameters:
model (torch.nn.Module): 要打印的PyTorch模型
verbose (bool): 是否打印模型的网络结构
"""
# 打印模型总参数数量
num_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
print(f"Number of trainable parameters in the model: {num_params}, {num_params / 1e6:.3f} M")
# 如果需要,打印模型的网络结构
if verbose:
print(model)
下面是函数的参数和使用说明:
model
:要打印的 PyTorch 模型。verbose
:布尔值,指定是否打印模型的网络结构。
使用时,把 model 作为函数的第一个参数传递给该函数。如果要打印模型的网络结构,可以将 verbose 参数设置为 True;否则,将其设置为 False。
该函数计算模型的可训练参数数量并将其打印到屏幕上,总参数数量有两种显示方法。如果 verbose 参数为 True,则还将打印模型的网络结构。
举例:
from monai.networks.nets import UNet
model = UNet(
spatial_dims=3,
in_channels=1,
out_channels=1,
channels=(4, 8, 16, 32, 64),
strides=(2, 2, 2, 2),
)
print_networks(model, verbose=True)
方法二:调用三方工具
手动计算模型的参数数量和输出形状是一项繁琐而容易出错的任务。为了解决这个问题,我们可以使用torchsummary库来自动打印模型的详细信息,包括每个层的类型、输出形状以及参数数量。本文将介绍如何使用torchsummary库打印UNet模型的详细信息,并解释每个输出所代表的含义。
使用 torchsummary 库打印 model 详细信息,如果没有,用下面语句进行安装
pip install torchsummary
使用举例:
from torchsummary import summary
model = UNet(
spatial_dims=3,
in_channels=1,
out_channels=1,
channels=(4, 8, 16, 32, 64),
strides=(2, 2, 2, 2),
)
summary(model, (1, 128, 128, 96), device='cpu')
在这段代码中,首先导入了 summary 函数,然后创建了一个 UNet 模型,接下来,调用 summary 函数来打印模型的详细信息。summary 函数的第一个参数是要打印信息的模型,第二个参数是输入数据的尺寸,这里是一个 4 维的张量,表示批次大小为 1,高度为 128,宽度为 128,深度为 96 的图像。最后,通过设置 device=‘cpu’ 来指定使用 CPU 运行模型。
运行这段代码后,summary 函数会打印出模型的总参数数量、每个层的输出形状,以及模型参数的统计信息,如下所示:
文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连