本文主要是介绍60、resnet50 权值和参数加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上一节我们将 resnet50 中需要下载的权值,以及每层卷积的参数,都下载并且保存到了 仓库 resnet50_weight 目录,在仓库的这个连接。
在将权值保存好之后,接下来就是要看如何使用这些权值,也就是如何加载。本节就介绍下我们实战过程中,如何加载这些权值。
加载权值
加载权值的目的,是为了使网络运行到某一层时,可以方便的将权值与输入特征图直接进行计算,比如卷积输入的特征图和本层的权值直接进行卷积运算。
在实际网络部署时,也是类似的流程。下面简单介绍下部署过程中,权值加载的流程。
假设我们在 GPU 或者其他硬件平台上部署网络,通常的做法便是将网络中所有的权值加载到内存中,在 GPU 上对应为加载到显存中,也就是 GPU 的 DDR 上。
一般GPU 的 DDR 有几 GB 甚至十几 GB 的容量,对于大部分的神经网络而言,是可以依次将全部权值加载到显存上的。
在实际运行神经网络时,假设使用 GPU 运行到某一层卷积时,对应执行卷积的指令会从 DDR 上将权值进一步加载到更靠近计算部件的“内存”上,一般为 Shared Memory,或者 GPU 的片上内存。这是因为 GPU 的存储器是分层级的。
在我们这个实战中,没有 GPU 这么复杂的架构设计,我们全部在 CPU 上执行,因此我们默认只有一个内存用于权值加载,也就是我们电脑主机的内存。
其实不同的硬件架构内存划分也是不一样的&#x
这篇关于60、resnet50 权值和参数加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!