def conv2d(self, X, W, b, stride=1, padding=0):
# X表示输入特征图(样本数(batch size)、通道数、高度、宽度)
# X表示输入特征图、W表示卷积核、b表示偏向值
# 这些元素都是张量
# 计算卷积后的输出大小
n_H = int((X.shape[2] + 2 * padding - self.kernel_size) / stride + 1) # 竖直方向平移次数
n_W = int((X.shape[3] + 2 * padding - self.kernel_size) / stride + 1) # 水平方向平移次数
# 这里的X.shape[1]表示高度(行列式的行),X.shape[2]表示宽度(行列式的列)。
# 这里以输入尺寸4*4来想象,套用上面的公式,完全符合。
# 初始化输出,这里初始化一个全为0的卷积特征图。
Z = np.zeros((self.filters, X.shape[2], n_H, n_W))
在卷积操作中,通常使用(height, width, channels)的维度顺序?为什么?这样导致最高维度是height,感觉反而更麻烦。