我有必要保持模型尽可能小,以部署可以在应用程序上高效运行的图像分类器(准确性与我无关)
我最近接触了深度学习,但没有很好的经验,因此我目前正在使用 cifar-10 示例。 我尝试将前两个 5x5 卷积层分别替换为两个 3x3 卷积,如 inception paper 中所述。 .
不幸的是,当我要对测试集进行分类时,我得到了大约 0.1 的正确分类(随机选择)
这是第一层修改后的代码(第二层类似):
with tf.variable_scope('conv1') as scope:
kernel_l1 = _variable_with_weight_decay('weights_l1', shape=[3, 3, 3, 64],
stddev=1e-4, wd=0.0)
kernel_l2 = _variable_with_weight_decay('weights_l2', shape=[3, 3, 64, 1],
stddev=1e-4, wd=0.0)
biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
conv_l1 = tf.nn.conv2d(images, kernel_l1, [1, 1, 1, 1], padding='SAME')
conv_l2 = tf.nn.depthwise_conv2d(conv_l1, kernel_l2, [1, 1, 1, 1], padding='SAME')
bias = tf.nn.bias_add(conv_l2, biases)
conv1 = tf.nn.relu(bias, name=scope.name)
_activation_summary(conv1)
正确吗?
最佳答案
您似乎正在尝试在第一个卷积层中计算 64 个特征(对于每个 3x3 block ),并将其直接输入到第二个卷积层中,没有中间池化层。卷积神经网络通常具有堆叠卷积层的结构,然后是对比度归一化和最大池化。
为了减少处理开销,研究人员尝试从完全连接转向 sparsely connected architectures ,从而创建了初始架构。然而,虽然这些对于高维输入产生了良好的结果,但您可能对 TensorFlow 中 Cifar10 的 32x32 像素期望过高。
因此,我认为问题不在于补丁大小,而在于整体架构。这个code是一个已知的良好起点。让它工作并开始减少参数,直到它崩溃。
关于deep-learning - Inception风格的卷积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34762505/