超贊!!3D可視化工具透視神經網絡內部
哈嘍,大家好。
你有沒有想過,我們編寫的神經網絡,內部究竟是什么樣子的?
加拿大蒙特利爾一家公司開發一個3D可視化工具 —— Zetane Engine,幫助我們解決了這個問題。
只要在Zetane Engine打開一個深度學習模型,便可以看到網絡中任何一層,并顯示特征圖。
為了演示Zetane Engine?的用戶,我搭建了AlexNet?網絡,在Fashion-MNIST數據集上訓練了一個 10 個類別的分類器。
網絡架構如下:
tf.keras.layers.Conv2D(filters=96, kernel_size=11, strides=4, input_shape=(224,224,3), activation='relu'),
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
tf.keras.layers.Conv2D(filters=256, kernel_size=5, padding='same', activation='relu'),
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same',activation='relu'),
tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same',activation='relu'),
tf.keras.layers.Conv2D(filters=256, kernel_size=3, padding='same',activation='relu'),
tf.keras.layers.MaxPool2D(pool_size=3, strides=2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(4096, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(4096, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10)
網絡使用Keras?搭建,AlexNet模型非常簡單,包含5個卷積層和3個全連接層。
訓練樣本如下:
樣本對應的 10 類別如下:
訓練 50 個 epoch,模型的準確度是 92%,將模型保存為alexnet.h5?,用Zetane Engine打開
可以看到AlexNet的網絡結構。
我們輸入一張褲子圖片,查看第一個卷積層輸出的特征圖
第一個卷積層
圖片經過第一個卷積層后,輸出的特征圖肉眼能明顯辨識出是褲子。
我們再看下經過更深層的卷積網絡之后,會是什么樣子
深度卷積
中間第2、3層明顯可以看出是在提取邊緣特征,不用類別的物體的邊緣特征是不同的,并且邊緣特征相比原圖表達能力更強,相當于是原圖更抽象一級的特征,不過這里還是可以看出來是褲子。
但到了第4、5層,特征更抽象了,肉眼已經看不出是褲子了,當然也說明模型學習能力更強了。
簡單總結下,神經網絡從淺層到深層,學習的特征越來越抽象,學習能力也越來越強。
AlexNet網絡除了有卷積層,還有池化層,我們也可以看下特征經過池化層的效果
顏色越明亮,代表權重越高。從上圖可以看到最大池化層能強化重要特征,發揮去噪、降維的作用。
另外,你可能會主要到網絡上每個節點的前后都有一些白色圓點組成的方塊。
左邊代表該節點輸入特征和權重,右邊代表輸出的特征。點擊它們可以看到不同視角的特征圖
三維視角
二維視角
標注卷積結果的平面圖
卷積結果的平面圖
尤其對于網絡的最后一個節點,它的輸出是預測結果
它輸出了長度為 10 的特征向量,即:預測圖片屬于哪個類別的權重。可以看到權重最大的是類別1?,類別1?對應的是褲子,所以模型的預測結果是正確的。