繁体   English   中英

如何使用Tensorflow在卷积网络中的完全连接层之后添加回归头?

[英]How to add a regression head after the fully connected layer in convolutional network using Tensorflow?

我是深度学习和Tensorflow的新手,由于我正在进行的项目,我不得不学习这个主题。 我正在使用卷积网络来检测和查找图像中单个对象的位置。 我正在使用Standford CS231n类中引入的方法。 讲师提到了在网络中完全连接的层之后连接回归头以找到对象的位置。 我知道DNNRegressor中有DNNRegressor。 我应该用它作为回归头吗?

在我修改Tensorflow关于使用ConvNet来识别我的案例的手写数字的教程之前。 我不太确定如何将回归头添加到该程序,以便它还可以找到该对象的边界框。

本周我有机会接触机器学习和深度学习,如果我问了一个非常愚蠢的问题,道歉,但我真的需要找到解决问题的方法。 非常感谢你。

首先,为了训练神经网络进行对象定位任务,你必须拥有一个带有本地化对象的数据集。 这回答了您是否可以使用MNIST数据集的问题。 MNIST只包含每个图像的类标签,因此您需要获取另一个数据集 贾斯汀还在 37:34左右谈论了流行的数据集。

对象本地化的工作方式是学习每个图像输出4个值,而不是类分布。 将该四值向量与地面实况四值向量进行比较,并且损失函数通常是它们的差值的L1或L2范数。 因此在代码中, 回归头是一个普通的回归层,可以通过简单的tf.reduce_mean调用在tensorflow中实现。

可以在此处找到执行对象本地化的小而完整的示例。 还建议看一下这个问题

我也在寻找这个问题,我在文档中找到了以下部分。

密集(完全连接)层,对卷积层提取的特征进行分类,并由池化层进行下采样。 在密集层中,层中的每个节点都连接到前一层中的每个节点。

根据这个引用, 似乎你不能做回归而是分类

编辑:经过一些研究,我发现了一种在tensorflow使用fully-connected层的tensorflow

import tensorflow.contrib.slim as slim

#create your network **net**. 

#In the last step, you should use 
y_prime = slim.fully_connected(net, 1, activation_fn=None, reuse=reuse)

loss = tf.reduce_mean(tf.square(y_prime - y)) #L2 norm
lr = tf.placeholder(tf.float32)
opt = tf.train.AdamOptimizer(learning_rate=lr).minimize(loss)

您可以在最后一步之前添加更多fully connected图层,这可以包含更多节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM