- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在训练一个卷积神经网络,将图像分类为五个类别之一(类别 1 - 类别 5)。
我的 1 类训练图像非常少,因此我通过随机裁剪并翻转图像来创建更多数据来执行一些数据增强。我至少有 3000 个 2-5 类的训练图像。现在,我的训练集包含每个类 3000 个图像,并使用随机梯度下降对其进行训练。
我的测试集包括:
Class 1 - 8 images
Class 2 - 83 images
Class 3 - 227 images
Class 4 - 401 images
Class 5 - 123 images
我的网络正确预测:
Class 1 - 0 images
Class 2 - 0 images
Class 3 - 0 images
Class 4 - 399 images
Class 5 - 0 images
考虑到我的训练集的限制,我并不期望网络非常准确,而且 15000 张图像可能也不够 - 但考虑到 2 - 5 类具有相同的数量,我不会期望它会如此倾斜不同的训练图像。如果我在更大比例的 4 类图像上训练我的网络,那么这不会令我感到惊讶。我本来期望网络至少能够正确预测其他一些类别。
有什么想法吗?
编辑:
图像类型:建筑物
网络架构:
Input image - 256 x 256 x 3
Convolutional layer - 15 x 15 filters, 16 filters
Max 2x2 pooling layer
Convolutional layer - 11 x 11 filters, 32 filters
Max 2x2 pooling layer
Convolutional layer - 7 x 7 filters, 64 filters
Max 2x2 pooling layer
Fully connected layer - 1024 outputs
Softmax classifier layer - 5 outputs
成本函数:交叉熵
最佳答案
这种情况可能会发生(尽管并不常见)。我觉得你训练的时间还不够长。 CNN 尝试一次正确地获取一个类,如果您没有对损失进行归一化,则通常是样本数最多的类。这是因为它从一开始就正确预测该类获得了最大的好处。随着时间的推移,它变得越来越好,它不再获得这种好处,然后也尝试正确预测其他类别。
您可以根据类别频率对 softmax 损失进行加权,或者对数据集重新采样来解决此问题。我还发现您的 CNN 不够深,滤波器大小不适合您的分辨率,并且训练样本的数量太少。我建议您针对您的任务微调一些预先训练的神经网络,例如 VGG、GoogLeNet、ResNet 或 AlexNet。
对于咖啡,你可以按照这个例子,http://caffe.berkeleyvision.org/gathered/examples/finetune_flickr_style.html
关于machine-learning - 卷积神经网络做出有偏差的预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109804/
我创建了一个库项目,然后构建它,获取 .aar 并解压缩它。获取包含库的 classes.jar 文件,并将其添加到另一个项目中。该项目识别我的文件,我可以从中调用方法和函数。我的问题是我尝试从我的库
这不是现实世界的问题,我只是想了解如何创建 promise 。 我需要了解如何为不返回任何内容的函数做出 promise ,例如 setTimeout。 假设我有: function async(ca
我是 Promise 的新手。我写了两个例子: 第一个是: new RSVP.Promise(function (resolve, reject) { setTimeout(function
我有一个 nodejs (express) 作为服务器端,一个 angular 6 作为客户端。在服务器中我有中间件功能,可以进行 session 检查。如果 session 无效或不存在,我想向客户
我有一个 nodejs (express) 作为服务器端,一个 angular 6 作为客户端。在服务器中我有中间件功能,可以进行 session 检查。如果 session 无效或不存在,我想向客户
我有四个 I/O 操作:A、B、C 和 D。它们中的每一个都应该使用 vertx.executeBlocking 来执行。我应该有以下行为: //PSEUDOCODE waitForExecuteBl
我是一名优秀的程序员,十分优秀!