2016-08-01 48 views
0

CIFAR10示例中,conv2定義如下。如何知道shape=[5,5,64,64]在kernel = _variable_with_weight_decay中應該給出這些值,例如5,5,64,64另外,在biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.1))中,shape還被定義爲[64],如何獲取這些值?關於CIFAR10的卷積層中的形狀值示例

# conv2 
with tf.variable_scope('conv2') as scope: 
    kernel = _variable_with_weight_decay('weights', 
            shape=[5, 5, 64, 64], 
            stddev=5e-2, 
            wd=0.0) 
    conv = tf.nn.conv2d(norm1, kernel, [1, 1, 1, 1], padding='SAME') 
    biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.1)) 
    bias = tf.nn.bias_add(conv, biases) 
    conv2 = tf.nn.relu(bias, name=scope.name) 
    _activation_summary(conv2) 

回答

0

望着source,我們看到,以_variable_with_weight_decay呼叫歸結爲tf.get_variable電話。我們正在檢索權重張量(如果它不存在,則創建一個)

在卷積神經網絡中,權重張量定義了從一層到下一層的映射,但與香草NN不同。卷積意味着您在從一個圖層到下一個圖層進行映射時,正在對卷積濾波器應用卷積濾波器。這個過濾器是用超參數定義的,這些超參數被輸入到shape

輸入shape有四個參數,前兩個參數與卷積濾波器的大小有關。在這種情況下,我們有一個5x5的過濾器。第三個參數定義的輸入尺寸,在這種情況下是一樣的在前面的卷積輸出:

kernel = _variable_with_weight_decay('weights', 
            shape=[5, 5, 3, 64], 
            stddev=5e-2, 
            wd=0.0) 

第四參數定義張量的輸出尺寸。

偏差是系統的擾動,用於更好的學習。偏差被添加到卷積的輸出。由基本的線性代數規則給出,這兩個向量應該是相同的大小,在這種情況下,它是64

乾杯!