如何将训练有素的卷积网络(CNN)转换为检测器?

时间:2016-01-24 06:24:13

标签: python deep-learning tensorflow

我是计算机视觉和ML的新手。在使用Python和TensorFlow几周后,我有一些问题。

如何转换经过训练的卷积网络(CNN)将其用作检测器? (获取热图)

例如:

我们有

训练有素的MNIST模型

MODEL = [None,28 ** 2]> [CONV3 + POOL]> [CONV3 + POOL]> [DENSELAYER]> [无,10]

我想:

[无,WH]> [MODEL]> [无,w,h,10]

我读到这样做有必要将[DENSELAYER]转换为卷积。我是对的吗?

提前感谢您的帮助,对不起我的英语:)旧代码如下:

scala> Cons(0, Cons(1, Cons(2, Nil)))
res4: Cons[Int] = Cons(0,Cons(1,Cons(2,Nil)))

scala> List.sum(res4)
res5: Int = 3

我认为第一个完全连接的层应该是7x7转换,但我不确定如何处理第二个fc层(输出层):

    with tf.name_scope('dense_layer'):
        dense1 = tf.reshape(conv2, [-1, _weights['wd1'].get_shape().as_list()[0]])
        dense1 = tf.nn.relu(tf.matmul(dense1, _weights['wd1']) + _biases['bd1'])
        dense1 = tf.nn.dropout(dense1, dropout)
        out = tf.nn.softmax(tf.matmul(dense1, _weights['out']) + _biases['out'])
    return out

1 个答案:

答案 0 :(得分:4)

是。将第一个FC层重塑为7x7就是您想要的。 对于输出层,您要查找的是1x1 convolution,它基本上在每个像素上运行完全连接的输出层。

wc4 = tf.reshape(_weights['out'], [1, 1, d1, out])
conv4 = conv2d_valid(conv3, wc4, _biases['out'])