在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。
下面這段程式碼:
model = Sequential()
model.add(Dense(256, activation='sigmoid', input_shape=(784,)))
其中"input_shape"是用來指定輸入樣本的數據形狀,也是張量的shape,當數據進入模型時會被轉為張量,input_shape描述了這些張量的形狀,此例是一個包含784個特徵的向量。
向量跟張量的關係:0階張量為純量、1階張量為向量、2階張量為矩陣、3階張量則是由多個矩陣所組成—出自何為張量(Tensor)?三分鐘圖解類神經網路基本資料結構,這篇文章講得很詳細,就不再贅述了。
當我要將一個形狀為(3, 3, 2)的三維張量傳給Dense層時,出現錯誤,因為Dense層接受的輸入通常是一維的平坦數據,須將三維數據平坦化(flatten)再輸入。而處理圖像的Conv2D層則可以接受此形狀的張量,(3, 3, 2)代表的是高度為3、寬度為3、通道數為2的圖像,不過通道數通常為3,因為有R、G、B三個通道。
下面是一個例子:
[
[
[[1, 2], [3, 4], [5, 6]],
[[7, 8], [9, 10], [11, 12]],
[[13, 14], [15, 16], [17, 18]]
]
]
此例的第一個通道為:
[
[1, 3, 5],
[7, 9, 11],
[13, 15, 17]
]
第二個通道為:
[
[2, 4, 6],
[8, 10, 12],
[14, 16, 18]
]
以上~
繼續趕路,繼續留腳印(XD),週末快樂!