Tensorflow不共享变量

努姆斯·桑吉斯

我们对CIFAR-10教程(卷积神经网络)进行了修改,使其可以在Adience数据库上运行以对面部进行性别分类。我们在这里阅读到“参数共享”是有用的,因为假设一个补丁功能是有用的,而与图像中的位置无关。除了:

请注意,有时参数共享假设可能没有意义。当ConvNet的输入图像具有某些特定的中心结构时,尤其是这种情况,例如,我们应该期望应该在图像的一侧学习与另一侧完全不同的功能。一个实际的例子是当输入是已在图像中居中的

目标:因此,我们想关闭CNN的参数共享。

代码

我认为CIFAR-10教程使用参数共享吗?并且该def inference(images)函数中的这部分代码似乎必须对此进行处理:

biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
bias = tf.nn.bias_add(conv, biases)

哪个调用:

def _variable_on_cpu(name, shape, initializer):
    with tf.device('/cpu:0'):
        var = tf.get_variable(name, shape, initializer=initializer)
    return var

问题

  • 是否确实在CIFAR-10教程中进行了参数共享
  • 你能告诉我们我们是否在寻找正确的代码来关闭参数共享,或者在其他地方寻找?
  • 我们欢迎任何其他帮助/建议,因为我们不知道从哪里开始。
ry

教程中CIFAR-10模型在前两层('conv1''conv2')中使用“参数共享” 共享是通过使用tf.nn.conv2d()运算符来暗示的,​​该运算符可以有效地从输入图像中提取色块并将相同的滤镜(即,共享参数)应用于每个色块。

当您具有一组卷积层时,“关闭”参数共享并不是一件容易的事:相反,您必须将它们替换为其他类型的层。最简单的更改可能是用完全连接的层替换卷积层,例如通过使用tf.nn.relu_layer()(如'local3''local4'层中一样),该层内部执行矩阵乘法并为每个输入神经元维护单独的参数。

注意:对于视觉任务,全连接层通常会被过度参数化,更合适的中间立场是使用“本地接收场”,该字段(非正式地)为每个输入维护单独的参数(例如在全连接层中),但是仅合并“附近”输入中的值以产生输出(如卷积)。不幸的是,TensorFlow还没有包含本地接受域的实现,但是添加对它们的支持将是一个有用的项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章