python - 如何将经过训练的卷积网络(CNN)转换为检测器?

标签 python deep-learning tensorflow

我是计算机视觉和机器学习领域的新手。在退出 Python 和 TensorFlow 几周后,我有一些问题。

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

例如:

我们有

经过训练的 MNIST 模型

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

我想要:

[无,宽度] > [型号] > [无,宽,高,10]

我读到,要做到这一点,有必要将 [DENSELAYER] 转换为卷积。我说得对吗?

提前感谢您的帮助,并对我的英语感到抱歉:)旧代码如下所示:

    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

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

    with tf.name_scope('conv_layer_3'):
        # ?????
        wc3 = tf.reshape(_weights['wd1'], [7, 7, w2, d1])
        conv3 = conv2d_valid(conv2, wc3, _biases['bd1'])
    with tf.name_scope('conv_layer_4'):
        # ???
    return out

最佳答案

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

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

关于python - 如何将经过训练的卷积网络(CNN)转换为检测器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34972881/

相关文章:

c++ - 如何将 "mean_file_proto"读入 OpenCV Mat 以便从均值中减去图像以用于 Caffe 模型?

python - 手动将 LSTM 从 Tensorflow 导入 PyTorch

python - 如何在Python中将postgres表列指定为变量?

python - 最大和最小字符数

python - 从 python 读取 BerkleyDB 文件 : `\x01\x0b\x88\x0c\x01` ?

machine-learning - Caffe 卷积层权重和尺寸

c++ - 如何在 ssd-caffe 中加载图像而不是 LMDB

python - 将新单元添加到 Keras 模型层并更改其权重

c++ - 如何通过单次运行将多个输入样本提供给 C++ 中的 tensorflow 模型

python - 使用 Windows 绘图进行 pywinauto 测试