【发布时间】:2016-08-15 14:15:31
【问题描述】:
我正在尝试设计和训练一个卷积神经网络来识别图像中的圆形细胞。我正在对完整图像的“切口”进行训练,图像中间有一个圆圈(正训练样本)或没有(负训练样本)。
中间有一个圆圈的图像示例(热图颜色不稳定,图像都是灰度):http://imgur.com/a/6q8LZ
我希望网络输出是一个二进制位图,而不是仅仅对两种类型的输入图像进行分类(圆形或不在中间),如果没有,它要么是一个统一的值(例如 -1)输入图像中的圆形或在图像中间有一个“斑点”(理想情况下是一个点)来指示圆的中心。然后将其应用于包含许多此类圆形单元格的大图像,并且输出应该是一个位图,其中单元格所在的位置有斑点。
为了训练这一点,我将输出图像与二维高斯滤波器 (http://imgur.com/a/fvfP6) 之间的均方误差用于正训练样本,并将图像与值为 -1 的均匀矩阵之间的 MSE 用于负训练样本。理想情况下,这应该使 CNN 收敛到一个图像上,对于正训练样本,该图像类似于中间的高斯峰,对于负训练样本,该图像一致为 -1。
但是,网络不断融合在“使一切归零”的通用解决方案上。这不会最小化 MSE,所以我不认为这是网络结构的固有问题(我尝试了不同的结构,从具有与输入图像一样大的滤波器的单层 CNN 到具有不同滤波器的多层 CNN大小,都具有相同的结果)。
我使用的损失函数如下:
weighted_score = tf.reduce_sum(tf.square(tf.sub(conv_squeeze, y)),
reduction_indices=[1, 2])
conv_squeeze 是网络的输出图像,y 是标签(即上面显示的高斯模板)。我已经尝试按照此处的建议对批量大小进行平均:
Using squared difference of two images as loss function in tensorflow
但没有成功。我找不到任何关于如何使用模板图像作为标签来训练神经网络的学术出版物,因此,如果有人能指出我正确的方向,我将不胜感激。非常感谢!
【问题讨论】:
-
一般来说使用MSE进行训练并不是很容易。另一种方法可能是先预测是否存在单元格,然后预测其中心和其大小(预测高斯似乎非常复杂)。
-
你的神经元正在死亡吗? “使一切归零”通常表明神经元正在死亡。你是否将你对 relu 神经元的初始偏差设为非零,你是否尝试过不同的学习率进行训练?由于特征值和其他东西,您可能需要非常小的学习率才能获得稳定的学习。
标签: python tensorflow neural-network conv-neural-network