初始化的方法主要做一件事情分配内存,初始化参数。这里比较关心权重初始化的值是多少,因为会影响到模型训练。固定写死的方法,都是 [-scale scale]的均匀分布, scale 是根据输入大小计算的,在这里的输入大小就是 batch 的大小。全连接层的公式我简单描述如下,主要都使用 darknet 的变量名来写 output 和 input 权重weight都可理解为二维矩阵,之所以只是二维,是因为它们的一行会对应一个样本,相当于把一张图片的RGB 值按行优先拉成一个向量bias 是一个向量,
gemm 的参数数量多达 13 个,这是不是很难接受,除非参数有啥些规律,不然真的很难记住。这个函数的目的是计算 $ C = ALPHA * AB + BETA * C$ 简单说就是把 A的 ALPHA倍和 B做矩阵乘法然后加上 C的 BETA倍放到 C里。 下面的注释里解释了每个参数的含义。这个解释也有点儿复杂,总之记住一个事情 最终逻辑上的矩阵乘法都是 一个 M X K 的矩阵 乘上 K X N 的矩阵, 得到一个 M X N 的矩阵。 TA TB 都是为了让物理存储结构和逻辑结构保持一致。不过这样解释好像还是不够清楚,这可能就是不使用 Tensor 这种抽象带来的问题吧,感觉具体细节复杂无比。
后面的卷积层也是再此基础上实现的。
