Tensorflow 上带有回归输出的 CNN 图像识别

Posted

技术标签:

【中文标题】Tensorflow 上带有回归输出的 CNN 图像识别【英文标题】:CNN Image Recognition with Regression Output on Tensorflow 【发布时间】:2018-01-13 15:51:01 【问题描述】:

我想使用 CNN 根据图像预测估计的等待时间。所以我想这将使用 CNN 使用 RMSE 的损失函数输出回归类型的输出,这是我现在正在使用的,但它不能正常工作。

有人可以指出使用 CNN 图像识别来输出类似于等待时间的标量/回归输出(而不是类输出)的示例,以便我可以使用他们的技术来实现这一点,因为我无法做到找到一个合适的例子。

我发现的所有 CNN 示例都是针对 MSINT 数据并区分输出类输出的猫和狗,而不是等待时间的数字/标量输出。

谁能给我一个使用 CNN 的 tensorflow 的例子,给出基于图像识别的标量或回归输出。

非常感谢!老实说,我超级卡住了,没有任何进展,而且解决同样的问题已经超过两周了。

【问题讨论】:

图像与等待时间有什么关系? 想象一张有流量的图片,也有没有流量的,或者有线条和没有线条的例子。我基本上只是想要一个数字输出。 有流量但没有流量的图像是 2 类问题。你想用一张图片预测那里的等待时间是多少? 请理解,这只是一个例子,我正在研究 NDA 下的东西,所以我只是举一个类似的例子。最重要的部分是回归输出,等待时间只是一个例子。我只是在寻找具有标量输出的示例。相信我,当我为目标变量运行 sum(unique) 时,这不是 2 类问题:它给了我 4739753 作为答案,所以有 4739753 个唯一类,这就是我想要回归输出的原因。我还有数以万计的独特图像。 这是一个经典的例子,说明在堆栈溢出时找到答案是多么困难。人们通常会因为你措辞的技术性或旨在说明观点的广泛示例的细节而与你争论,而从未真正解决你的主要问题。 【参考方案1】:

查看 Udacity 自动驾驶汽车模型,该模型从行车记录仪获取输入图像并预测转向角(即连续标量)以保持在道路上...通常在一个或多个完全后使用回归输出CNN 层之上的连接层。

https://github.com/udacity/self-driving-car/tree/master/steering-models/community-models

这是一个典型的模型:

https://github.com/udacity/self-driving-car/tree/master/steering-models/community-models/autumn

...它使用tf.atan() 或者您可以使用tf.tanh() 或只是线性得到最终输出y

使用 MSE 作为损失函数。

这里是another example in keras...

model = models.Sequential()
model.add(convolutional.Convolution2D(16, 3, 3, input_shape=(32, 128, 3), activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(convolutional.Convolution2D(32, 3, 3, activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(convolutional.Convolution2D(64, 3, 3, activation='relu'))
model.add(pooling.MaxPooling2D(pool_size=(2, 2)))
model.add(core.Flatten())
model.add(core.Dense(500, activation='relu'))
model.add(core.Dropout(.5))
model.add(core.Dense(100, activation='relu'))
model.add(core.Dropout(.25))
model.add(core.Dense(20, activation='relu'))
model.add(core.Dense(1))
model.compile(optimizer=optimizers.Adam(lr=1e-04), loss='mean_squared_error')

它们与 MNIST 示例的主要区别在于,不是将 logits 的 N-dim 向量汇集到带有交叉熵损失的 softmax 中,而是将回归输出缩减为带有 MSE 损失的 1-dim 向量. (您还可以在最后一层混合多个分类和回归输出......就像在 YOLO 对象检测中一样)

【讨论】:

【参考方案2】:

关键是在最后一个全连接(输出)层中没有激活函数。请注意,您必须事先至少有 1 个 FC 层。

【讨论】:

以上是关于Tensorflow 上带有回归输出的 CNN 图像识别的主要内容,如果未能解决你的问题,请参考以下文章

DL之LSTM/GRU/CNN:基于tensorflow框架分别利用LSTM/GRUCNN算法对上海最高气温实现回归预测案例

是否可以有一个具有多个输出的回归模型?

根据输入形状的计算是不是存在差异? (带有 Tensorflow 的 Python 中的 CNN)

回归预测 | MATLAB实现CNN-BiLSTM-Attention多输入单输出回归预测

TensorFlow逻辑回归原理与实现(超详细)

Tensorflow中使用CNN实现Mnist手写体识别