我想修改TensorFlow中Cifar10提供的網絡結構。通常,我在第一個卷積圖層(conv1)之後添加了另一個卷積圖層(conv12)。無論我如何設置過濾器(我嘗試了所有1x1,3x3,5x5),並且無論是否使用重量衰減,新層都會將精度降至10%以下。這相當於Cifar10中的隨機猜測,因爲有10個類。對TensorFlow Cifar10改變的精確度較低例如
代碼結構如下,除了將輸入圖像的大小設置爲48x48(而不是24x24)之外,我不修改cifar的任何其他部分。我猜輸入大小應該不重要。
請注意,conv12是深度卷積圖層,因爲我想在conv1圖層後添加一個線性圖層,以最大限度地減少對原始代碼的更改。這樣做我預計準確度應該與原始版本類似,但會降低到10%左右。 (我也嘗試了正常的卷積層,但它沒有也行。)
with tf.variable_scope('conv1') as scope:
kernel1 = _variable_with_weight_decay('weights', shape=[5, 5, 3, 64],
stddev=1e-4, wd=0.0)
conv_1 = tf.nn.conv2d(images, kernel1, [1, 1, 1, 1], padding='SAME')
biases1 = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
bias1 = tf.nn.bias_add(conv_1, biases1)
conv1 = tf.nn.relu(bias1, name=scope.name)
_activation_summary(conv1)
with tf.variable_scope('conv12') as scope:
kernel12 = _variable_with_weight_decay('weights', shape=[1, 1, 64, 1],
stddev=1e-4, wd=0.0)
#conv_12 = tf.nn.conv2d(conv1, kernel12, [1, 1, 1, 1], padding='SAME')
conv_12 = tf.nn.depthwise_conv2d(conv1, kernel12, [1, 1, 1, 1], padding='SAME')
biases12 = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
bias12 = tf.nn.bias_add(conv_12, biases12)
conv12 = tf.nn.relu(bias12)
_activation_summary(conv12)
pool1 = tf.nn.max_pool(conv12, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1],
padding='SAME', name='pool1')
.....
可能有人請告訴我有什麼不好的代碼?
不,我做了一個depthwsie_conv層。元組中的最後一個值是channel_multiplier,所以在這裏1會使得輸出的深度爲64.我也嘗試了一個正常的卷積層,其中有一個文件夾[1,1,64,64],正如你所建議的那樣(你可以看到評論線),但它也不起作用。所以我仍然認爲這不是我遇到的問題的根源。 – Zk1001
哦!所以你做了 - 我錯過了。 hmmmm。 – dga