我有必要保持模型尽可能小,以部署可在应用程序上高效运行的图像分类器(准确性与我无关)
我最近接触过深度学习,并且我没有很好的经验,因此我正在玩cifar-10示例。 我试图用两个3x3卷积替换前两个5x5卷积层,如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)
这是对的吗?
答案 0 :(得分:2)
您似乎正在尝试在第一个卷积层中计算64个要素(对于每个3x3补丁)并将其直接馈送到第二个卷积层,而没有中间池层。卷积神经网络通常具有堆叠卷积层结构,然后是对比度归一化和最大池化。
为了减少处理开销,研究人员已经尝试从完全连接到sparsely connected architectures,从而创建了初始架构。然而,虽然这些对于高维输入产生了良好的结果,但你可能期望TensorFlow中Cifar10的32x32像素过多。
因此,我认为问题不在于补丁大小,而是与整体架构有关。这个code是一个众所周知的良好起点。让它工作并开始减少参数,直到它中断。