张量流上带回归输出的CNN图像识别

时间:2017-08-06 03:31:55

标签: tensorflow conv-neural-network image-recognition

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

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

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

有人能给我一个例子,使用CNN的张量流来给出基于图像识别的标量或回归输出。

非常感谢!老实说,我非常困难,没有取得任何进展,并且已经有两周多时间处理同样的问题了。

2 个答案:

答案 0 :(得分:10)

查看Udacity自驾车模型,它从破折号凸轮上获取输入图像并预测转向角度(即连续标量)以保持在路上...通常在一个或多个完全使用后使用回归输出连接层位于CNN层之上。

Browser Error

这是一个典型的模型:

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

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

将MSE用于您的损失功能。

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

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示例的关键区别在于,不是将N-dim向量的logits转换为softmax w /交叉熵损失,而是将其降低到具有MSE损失的1-dim向量。

答案 1 :(得分:1)

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