【问题标题】:Implementing hypercolumn in neural nets with tensorflow使用 tensorflow 在神经网络中实现超列
【发布时间】:2016-06-19 06:39:07
【问题描述】:

我试图将hypercolumns 想法添加到我的神经网络模型中。如何使用 tensorflow 做到这一点?

【问题讨论】:

    标签: tensorflow conv-neural-network


    【解决方案1】:

    这是一个基本示例。

    定义 layer1,layer2,layer3 等,然后在下面将它们连接起来,现在你就有了你的超列。

    conv1 = tf.nn.conv2d(image, weights, [1, 1, 1, 1], 'SAME')
    layer1 = tf.image.resize_bilinear(conv1, (224, 224))
    ...
    layer2 = tf.image.resize_bilinear(conv2, (224, 224))
    ...
    layer3 = tf.image.resize_bilinear(conv3, (224, 224))
    return(tf.concat(0, [layer1, layer2,layer3]))
    

    【讨论】:

    • 感谢@Steven!另外,有什么方法可以执行普通卷积并保留最后一层卷积的像素/值的超列?例如,如果输入是 244x244,卷积的最终输出是 7x7,那么只需将前一层的 7x7 值保持相等间隔,然后将它们连接起来?
    • 我可能需要您更具体地说明您想要完成的工作。所以超列的想法比输入图像的大小甚至列的大小更普遍。例如:假设输入大小是你说的 244x244x3(3 个颜色通道)第一层变成一半,所以 122x122x16 下一层(也是最后一层)是 7x7x65。现在最简单的做法是对第二层执行 tf.image.resize_bilinear(layer1, (224, 224)) 和相同的操作,但不必如此。您还可以线性化两个层并以这种方式连接它们(但是这会丢失空间信息)。
    • 你也可以看看 tensorflow 中的 unpooling(听起来像你想要的),尽管它目前仍在开发中。你可以在这里观看github.com/tensorflow/tensorflow/issues/2169
    • 感谢您的指导。我不想像超柱论文那样精确(像素级)分割。我试图查看而不是在输入层为每个像素保留超列,如果我们在最后一层为每个像素保留超列,如果这样做,精度和速度之间的权衡是什么,因为大小的超列张量输入图像的数量很大,并且需要相对更多的计算时间。
    • 如果你只保留之前的第 n-1 层和第 n 层的表示,那么你确实会提高准确性,但代价是更多的计算和空间。准确度很难衡量,因为这是特定于任务的(因此在某些情况下,您可能根本不需要进行试验)。计算时间很容易计算,因为您可以计算深度为 n 和 n+1 的卷积需要多长时间,空间也很容易计算,因为您可以乘以浮点数(或双倍)*(层数 n + 层数) n+1).
    猜你喜欢
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2016-02-18
    • 2013-01-03
    • 1970-01-01
    • 2018-04-21
    • 2018-10-28
    • 2015-04-14
    相关资源
    最近更新 更多