2016-08-01 49 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

干杯!