上一节我们将 resnet50 中需要下载的权值,以及每层卷积的参数,都下载并且保存到了 仓库 resnet50_weight 目录,在仓库的这个连接。
在将权值保存好之后,接下来就是要看如何使用这些权值,也就是如何加载。本节就介绍下我们实战过程中,如何加载这些权值。
加载权值
加载权值的目的,是为了使网络运行到某一层时,可以方便的将权值与输入特征图直接进行计算,比如卷积输入的特征图和本层的权值直接进行卷积运算。
在实际网络部署时,也是类似的流程。下面简单介绍下部署过程中,权值加载的流程。
假设我们在 GPU 或者其他硬件平台上部署网络,通常的做法便是将网络中所有的权值加载到内存中,在 GPU 上对应为加载到显存中,也就是 GPU 的 DDR 上。
一般GPU 的 DDR 有几 GB 甚至十几 GB 的容量,对于大部分的神经网络而言,是可以依次将全部权值加载到显存上的。
在实际运行神经网络时,假设使用 GPU 运行到某一层卷积时,对应执行卷积的指令会从 DDR 上将权值进一步加载到更靠近计算部件的“内存”上,一般为 Shared Memory,或者 GPU 的片上内存。这是因为 GPU 的存储器是分层级的。
在我们这个实战中,没有 GPU 这么复杂的架构设计,我们全部在 CPU 上执行,因此我们默认只有一个内存用于权值加载,也就是我们电脑主机的内存
本文介绍了如何在实战中加载并使用ResNet50模型的权重,讲解了加载权值的目的和流程,特别是在CPU或GPU上的部署过程。通过将权重保存在txt文件中,按层加载到内存进行计算。同时,文章提到了PyTorch等框架如何自动处理权重加载,强调了在自定义实现中权值加载的重要性。
订阅专栏 解锁全文
4万+

被折叠的 条评论
为什么被折叠?



