在将我的问题标记为重复之前,我想说我已经尝试过类似问题中提到的所有可能的解决方案,但这似乎行不通。
我目前正在研究血细胞分类问题,我们基本上必须对血液图像进行分类(4类)。该数据集由9957个图像组成,几乎相等于所有4个类的图像数量。即使在尝试了不同的优化器和学习率之后,准确率也始终徘徊在25-27%左右。我甚至试着训练到100个时代。图像增强没什么用。而且,这并不是说它对所有图像都预测相同的类,尽管对于一批特定的图像,它预测的是同一个类。它再次预测下一批中所有图像的其他类。所以,我只想知道,我可能做错了什么?是数据集不够,还是体系结构应该有更多的隐藏层,还是我没有正确地实现优化器或丢失函数,还是在代码中忽略了任何愚蠢的错误?
我的CNN架构:(fs表示filter_size,nf表示过滤器数量,S表示不。)大踏步)
Input(80,80,1)->Conv(fs = 3, nf = 80, s = [1,1,1,1])
Activation(LeakyReLU)->Conv(fs = 3,nf=64,s=[1,1,1,1])
Activation(LReLU)->Pool(ps = [1,2,2,1],s=[1,2,2,1]
Conv(fs = 3,nf = 64,s=[1,1,1,1])->Activation(LReLU)
Dropout(prob = 0.75)->Flatten
FullyConnected(output_features = 128)->Dropout(prob = 0.5)
FullyConnected(output_features = 4)
loss_value = tf.reduce_mean(loss_fn)
optimizer = tf.train.AdamOptimizer()
loss_min_fn = optimizer.minimize(loss = loss_value)
check_prediction = tf.equal(tf.argmax(y,axis=1),y_pred)
model_accuracy = tf.reduce_mean(tf.cast(check_prediction, tf.float32)
sess.run(loss_min_fn, feed_dict = {x:X_train_batch, y:y_train_batch})
train_accuracy = train_accuracy + sess.run(model_accuracy, feed_dict={x : X_train_batch,y:y_train_batch})
train_loss = train_loss + sess.run(loss_value, feed_dict={x : X_train_batch,y:y_train_batch})这些图像看起来就像这样




发布于 2018-11-08 13:39:54
我会做一些观察,希望能有所帮助。
无论如何,继续尝试不同的图层配置。但是要记住的一点是,每次使用卷积层时,都会丢失信息。您需要考虑在每个卷积层中丢失了多少信息。
发布于 2018-11-08 16:46:26
我建议如下:
在形状1*1*3的开头添加1*1卷积层。因此,如果颜色变化很微妙,这将改变图像到另一个颜色空间。在学习颜色映射之后,添加一个最大池,然后是另一个1*1*your_choice。
添加跳过连接(^与此,甚至其他)。这将保留信息和速度培训。
最后一层的有效接收场大小是不够的。至少再添加一个最大池(可能2层)和至少2层-3层。
有可能你的一些课程很难区分。使用硬挖掘或焦距损失来聚焦大误差的图像。(也许会减少辍学,看看吧)
我希望你正在对图像进行预处理和正常化。
给我们一个你的数据集和损失曲线,如果你可以的想法,也大小的图像。
报告回来。
发布于 2022-05-16 11:33:59
迟了回答,但我遇到了一个类似的问题。我将我的Adam优化器的学习速率设置为一个较低的值(例如3e-5)和瞧!模特开始合身了。
https://datascience.stackexchange.com/questions/40918
复制相似问题