手写CNN的forward
时间: 2023-11-03 20:05:44 浏览: 20
好的,以下是手写CNN的forward过程:
1. 首先,我们需要对输入图像进行卷积操作。假设输入图像大小为 $(H_{in}, W_{in}, C_{in})$,卷积核大小为 $(K, K, C_{in}, C_{out})$,步长为 $S$,填充大小为 $P$。我们可以使用以下公式计算输出特征图的大小:
$$H_{out} = \lfloor\frac{H_{in} - K + 2P}{S}\rfloor + 1$$
$$W_{out} = \lfloor\frac{W_{in} - K + 2P}{S}\rfloor + 1$$
然后,我们可以创建输出特征图的张量,大小为 $(H_{out}, W_{out}, C_{out})$。
2. 接着,我们对每个输出特征图的像素进行计算。对于输出特征图中的每个像素 $(i, j, k)$,我们可以使用以下公式计算:
$$\text{out}_{i,j,k} = \sum_{m=0}^{K-1} \sum_{n=0}^{K-1} \sum_{c=0}^{C_{in}-1} \text{in}_{i\times S+m,j\times S+n,c}\times \text{weight}_{m,n,c,k} + \text{bias}_k$$
其中,$\text{in}$ 表示输入特征图,$\text{weight}$ 表示卷积核,$\text{bias}$ 表示偏置,$m$ 和 $n$ 表示卷积核中的行和列,$c$ 表示输入特征图中的通道,$k$ 表示输出特征图中的通道。
3. 最后,我们可以将输出特征图输入激活函数中进行激活,如 ReLU、sigmoid、tanh 等。
这就是手写CNN的forward过程。