2016-08-01 3 views
0

CIFAR10の例では、conv2は以下のように定義されています。カーネル= _variable_with_weight_decay内のshape=[5,5,64,64]には、これらの値を指定する必要があります(たとえば、5,5,64,64)。biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.1))では、形状も[64]と定義されています。 sourceを見ると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

、我々は_variable_with_weight_decayへの呼び出しがtf.get_variableコールに沸くことがわかります。重みテンソルは、既に存在しない場合に作成します。

畳み込みニューラルネットワークでは、重みテンソルは1つのレイヤーから次のレイヤーへのマッピングを定義しますが、バニラNNとは異なります。コンボリューションは、あるレイヤーから次のレイヤーにマッピングするときに畳み込みフィルターを適用することを意味します。このフィルタは、shapeに供給されるハイパーパラメータで定義されます。

shapeに供給される4つのパラメータがあり、最初の2つは畳み込みフィルタのサイズに関係します。この場合、私たちは5x5フィルターを持っています。

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

第四パラメータがテンソルの出力寸法を定義:第三のパラメータは、この場合には、以前のコンボリューションでの出力と同じである入力寸法を画定します。

バイアスは、より良い学習のために使用されるシステムに対する摂動です。バイアスはコンボリューションの出力に加算されます。基本的な線形代数ルールによって、この2つのベクトルは同じサイズでなければなりません。この場合は64

乾杯!

関連する問題