deep-learning - Inception风格的卷积

标签 deep-learning tensorflow conv-neural-network

我有必要保持模型尽可能小,以部署可以在应用程序上高效运行的图像分类器(准确性与我无关)

我最近接触了深度学习,但没有很好的经验,因此我目前正在使用 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/

相关文章:

tensorflow - 如何在不从源安装tensorflow的情况下使用SSE4.1指令?

tensorflow - 您必须为 MNIST 数据集的 dtype float 和 shape [?,784] 提供占位符张量 'Placeholder' 的值

python - 在预训练模型中加载我的训练模型与在未预训练模型中加载之间的区别?

python - Keras 的 fit_generator 额外训练值

python - Tensorflow:简单的 3D Convnet 不学习

machine-learning - 深度 CNN 和密集 CNN 的区别

python - 如何修复 python 3.7.1 上的导入 TensorFlow 错误?

machine-learning - 加载 tensorflow 层的自定义权重

tensorflow - 图像序列的分类(固定数量)

machine-learning - 如何使用全卷积网络在 Cifar10 上获得最先进的结果?