首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CNN没有正确学习

CNN没有正确学习
EN

Data Science用户
提问于 2018-11-08 13:00:08
回答 3查看 4K关注 0票数 3

在将我的问题标记为重复之前,我想说我已经尝试过类似问题中提到的所有可能的解决方案,但这似乎行不通。

我目前正在研究血细胞分类问题,我们基本上必须对血液图像进行分类(4类)。该数据集由9957个图像组成,几乎相等于所有4个类的图像数量。即使在尝试了不同的优化器和学习率之后,准确率也始终徘徊在25-27%左右。我甚至试着训练到100个时代。图像增强没什么用。而且,这并不是说它对所有图像都预测相同的类,尽管对于一批特定的图像,它预测的是同一个类。它再次预测下一批中所有图像的其他类。所以,我只想知道,我可能做错了什么?是数据集不够,还是体系结构应该有更多的隐藏层,还是我没有正确地实现优化器或丢失函数,还是在代码中忽略了任何愚蠢的错误?

我的CNN架构:(fs表示filter_size,nf表示过滤器数量,S表示不。)大踏步)

代码语言:javascript
复制
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})

这些图像看起来就像这样

EN

回答 3

Data Science用户

发布于 2018-11-08 13:39:54

我会做一些观察,希望能有所帮助。

  1. 我会删除辍学层,直到你有证据显示数据过度拟合。辍学层通常用于使模型更一般化,在这种情况下这不是您的问题,它可能会伤害您的模型。
  2. 图像可能没有包含足够的信息来区分这些类。专家可以通过查看图像来分配类标签吗?如果不是,它可能只是不可能从图像。
  3. 你的精确分数意味着模型只是猜测,因为随机机会分类器也会被期望执行。然而,奇怪的是,你似乎得到了合理的准确性在一个类别。您可能会发现您需要多个模型配置为一个vs-rest二进制分类器。可以对每个模型进行唯一的配置和培训,以便专门处理一个类。在训练完成后,这可能会很费时,预测应该是有效的。
  4. 最后,你认为当你停止训练的时候,这个模型已经停止学习了吗?直觉地说,在看到一个真正精致的模型之前,我会预见到对成千上万个时代的需求,以及潜在的数百万。100个时代似乎才刚刚开始学习。由于这一成本,我建议您配置您的模型,以便您可以从停止点继续培训。

无论如何,继续尝试不同的图层配置。但是要记住的一点是,每次使用卷积层时,都会丢失信息。您需要考虑在每个卷积层中丢失了多少信息。

票数 1
EN

Data Science用户

发布于 2018-11-08 16:46:26

我建议如下:

在形状1*1*3的开头添加1*1卷积层。因此,如果颜色变化很微妙,这将改变图像到另一个颜色空间。在学习颜色映射之后,添加一个最大池,然后是另一个1*1*your_choice。

添加跳过连接(^与此,甚至其他)。这将保留信息和速度培训。

最后一层的有效接收场大小是不够的。至少再添加一个最大池(可能2层)和至少2层-3层。

有可能你的一些课程很难区分。使用硬挖掘或焦距损失来聚焦大误差的图像。(也许会减少辍学,看看吧)

我希望你正在对图像进行预处理和正常化。

给我们一个你的数据集和损失曲线,如果你可以的想法,也大小的图像。

报告回来。

票数 0
EN

Data Science用户

发布于 2022-05-16 11:33:59

迟了回答,但我遇到了一个类似的问题。我将我的Adam优化器的学习速率设置为一个较低的值(例如3e-5)和瞧!模特开始合身了。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/40918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档