簡體   English   中英

將CNN濾波器權重可視化為張量流中的numpy數組

[英]Visualising CNN filter weights as numpy array in tensorflow

我已經訓練了一個2層卷積神經網絡層CNN來對64通道EEG數據集進行分類。 該模型具有良好的訓練,驗證和測試精度。 現在我想看看模型為每個通道(特征)學習的權重,我設法導出並將過濾器權重保存為numpy數組。 當我讀取並顯示我的過濾器權重時,每個過濾器內部有兩個數組,一個有10個值,另一個有11個值。 我在第1層有32個過濾器,在第2層有64個。所有過濾器都是這樣的。

(數組([2,3,1,2,8,2,2,1,1,3]),數組([ - 0.17596437,-0.14086468,-0.10576499,-0.0706653,-0.03556561,-0.00046591,0.03463378,0.06973347 ,0.10483316,0.13993285,0.17503254]))

我無法解釋這與我的64個頻道有關,因為我有興趣知道每個頻道學到的重量。我的減肥方法是正確的嗎?,如果正確我如何匹配64個功能?,因為我有10個值第一個數組和同一個過濾器的第二個數組中的11個值。

我的第一和第二卷積層看起來像這樣

#weight and bias the first convolution layer
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])

#first convolution and pooling 
h_conv1 = tf.nn.relu(conv2d(x_iput, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)

#weight and bias of the second convolution layer
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])

#second convolution and pooling 
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)

在訓練我的模型之后,這就是我如何保存卷積層1的權重

with tf.variable_scope('conv1', reuse=True) as scope_conv:
    Conv1_weights = W_conv1.eval()

    with open("conv1.weights.npz", "wb") as outfile:
       np.save(outfile, Conv1_weights)

為了保存重量,我從這里開始提問

我提取了特征映射權重而不是過濾器,並且能夠提取每個通道學習的權重。 第一個卷積層中的特征映射在匯集之前具有所有通道,因此我使用了第一個卷積層的特征映射。 我還嘗試用較少的通道重新訓練我的模型,這些通道具有最高的重量並且仍然具有高精度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM