Num*_*uis 7 deep-learning 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)
Run Code Online (Sandbox Code Playgroud)
哪个电话:
def _variable_on_cpu(name, shape, initializer):
with tf.device('/cpu:0'):
var = tf.get_variable(name, shape, initializer=initializer)
return var
Run Code Online (Sandbox Code Playgroud)
本教程中的CIFAR-10模型在前两层('conv1'和'conv2')中使用"参数共享" .通过使用tf.nn.conv2d()操作符来暗示共享,其有效地从输入图像中提取补丁并将相同的过滤器(即共享参数)应用于每个补丁.
当你有一组卷积层时,"关闭"参数共享并非易事:相反,你必须用不同类型的层替换它们.最简单的改变可能是用完全连接的层替换卷积层,例如通过使用tf.nn.relu_layer()(如在'local3'和'local4'层中),其在内部执行矩阵乘法并为每个输入神经元维护单独的参数.
NB完全连接的层通常过度参数化用于视觉任务,更合适的中间点是使用"本地接收场",其(非正式地)为每个输入维护单独的参数(如在完全连接的层中),但是仅组合来自"附近"输入的值以产生输出(如在卷积中).遗憾的是,TensorFlow尚未包含本地接受字段的实现,但添加对它们的支持将是一个有用的项目.
| 归档时间: |
|
| 查看次数: |
1354 次 |
| 最近记录: |