我一直在用 Keras 研究卷積神經網路。我使用了下面的影像并將其轉換為陣列。

img_arr = np.array(img)
img_arr = img_arr/255.0
>>>
array([[[0.03137255, 0.0627451 , 0.1372549 ],
[0.01960784, 0.05098039, 0.1254902 ],
[0.03921569, 0.07058824, 0.15294118],
...,
[0.01960784, 0.08627451, 0.04705882],
[0.01568627, 0.06666667, 0.02745098],
[0. , 0.05098039, 0.01176471]],
[[0.35686275, 0.38431373, 0.45490196],
[0.32941176, 0.35686275, 0.42745098],
[0.31372549, 0.34117647, 0.41568627],
...,
img_arr = np.expand_dims(img_arr, 0)
print(img_arr.shape)
>>> (1, 343, 499, 3)
這就是我預處理影像并從中創建一個陣列的方式。然后我tf.keras.layers.Conv2D像這樣在這個陣列上運行,
conv1 = tf.keras.layers.Conv2D(filters=32, kernel_size=(3, 3))
output_conv1 = conv1(img_arr)
print(output_conv1.shape)
>>> TensorShape([1, 341, 497, 32])
輸出形狀是完全可以理解的。但問題是當我kernel在 Keras 中列印形狀時,
print(conv1.kernel.shape)
>>> TensorShape([3, 3, 3, 32])
我通過了 kernel_size(3, 3)那么為什么(3, 3, 3)內核形狀中有'3' ?最后一個軸32我認為是因為no. of filters. 但是第一個 3 軸是(3, 3, 3)我不理解的東西!
uj5u.com熱心網友回復:
我相信最后一個3是指頻道的數量。您正在將3x3內核應用于 3 個通道。如果您查看源代碼,您將很快了解它kernel_shape是如何構建的:
kernel_shape = self.kernel_size (input_channel // self.groups, self.filters)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/338393.html
