Deep learning 起始式卷积

Deep learning 起始式卷积,deep-learning,tensorflow,conv-neural-network,Deep Learning,Tensorflow,Conv Neural Network,我有必要将模型保持尽可能小,以便部署一个可以在应用程序上高效运行的图像分类器(精度对我来说并不重要) 我最近接触了deep learning,但我没有丰富的经验,因此我目前正在使用cifar-10示例。 我尝试用两个3x3卷积层替换前两个5x5卷积层,如中所述 不幸的是,当我要对测试集进行分类时,我得到了大约0.1的正确分类(随机选择) 这是第一层的修改代码(第二层类似): 是否正确?似乎您正试图在第一个卷积层中计算64个特征(每个3x3补丁),并将其直接输入到第二个卷积层,而没有中间池层。卷积

我有必要将模型保持尽可能小,以便部署一个可以在应用程序上高效运行的图像分类器(精度对我来说并不重要)

我最近接触了deep learning,但我没有丰富的经验,因此我目前正在使用cifar-10示例。 我尝试用两个3x3卷积层替换前两个5x5卷积层,如中所述

不幸的是,当我要对测试集进行分类时,我得到了大约0.1的正确分类(随机选择)

这是第一层的修改代码(第二层类似):


是否正确?

似乎您正试图在第一个卷积层中计算64个特征(每个3x3补丁),并将其直接输入到第二个卷积层,而没有中间池层。卷积神经网络通常具有堆叠卷积层的结构,然后是对比度归一化和最大池

为了减少处理开销,研究人员进行了实验,从完全连接移动到初始架构,从而创建初始架构。然而,虽然这些方法可以为高维输入提供良好的结果,但您可能对TensorFlow中的32x32像素Cifar10期望过高


因此,我认为问题不在于补丁大小,而在于总体架构。这是一个众所周知的良好起点。让它工作,并开始减少参数,直到它中断。

代码看起来确实正确,并且将过滤器大小更改为3x3不应如此剧烈地改变测试错误率。你在训练设备上的错误率是多少?我还没有一个好的训练设备(我只有一台简单的笔记本电脑上的虚拟机)。因此我在7000步后停止了训练。最初的cifar10代码已经保证了74%的正确分类,但不是修改后的版本。实际上,在培训期间,我的损失为2.34,而原来的cifar10代码的损失低于1。我正在训练更长时间的网络训练,我会让你知道结果。我试图在谷歌的《盗梦空间》论文中重现这个计划。给定一个定义良好的网络,目标是通过一系列较小的卷积(通常是3x3或1xn,然后是nx1)替换任何卷积nxn(n>3),从而减少参数数量。在这个例子中(参见我的问题中引用的论文的图1),他们将5x5卷积替换为一个接一个执行的两个3x3卷积,因此只使用18个参数,而不是25个参数。这在每个卷积层中重复。在“更深入”的过程中,初始块按顺序使用多达5个卷积(图6)。
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)