我想修改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