情境化
我正在构建一个模型,用于识别给定图像中的三个类别。
分为三类:
性别:男/女
类型 clotes:西装外套、西装外套和夹克、衬衫、开衫、大衣、外套和夹克、裙裤、连衣裙、牛仔裤、套头衫、连身裤和工装裤、针织衫和运动衫、打底裤和香烟裤、孕妇装、Polo、Pololong、衬衫、短裤、裙子、西装、泳装、泳装和沙滩装、T - 衬衫、T 恤和上衣、裤子、束腰外衣。
- 颜色衣服:米色,黑色,蓝色,棕色,绿色,灰色,橙色,粉红色,红色,白色,黄色。
换句话说,每张图片都应该有这 3 个类别(每个类别一个值)。
数据
我用于训练模型的数据库由1812张图像和一个 excel 文件组成,其中包含每个图像的三个类别的值(及其 url)。
以下是有关我的数据库的一些信息:
- 男性人数:759
- 女性人数:1055
- 我还有每个属性(来自每个类别)出现在我的数据库中的次数(我无法列出所有属性,但如果它对解释有用,我可以向您发送该信息)
- 出现次数最多的三胞胎是(男、牛仔裤、蓝色):66 次
我所做的事情
似乎很清楚,我处于多标签分类环境中。
1. 清理和预处理我
创建的数据(X,Y)数据,其中X的形状为(1814,204,204,3),Y的形状为(1814,39) '' 39 对应于虚拟变量:类别 1 有2 个属性,第 2 类有 26 个属性,第 3 类有 11 个属性:所以总共是 39 ''。
2.建立我的神经网络
我的模型的不同参数是:
- 历元 = 100
- lrate = 0.001
- 衰减 = lrate/epochs
- sgd = SGD(lr=lrate,动量=0.9,衰减=衰减,nesterov=False)
- 损失=二进制交叉熵
- 优化器=sgd
- 指标=准确性
我训练的网络结构如下:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_3 (Conv2D) (None, 204, 204, 32) 896
_________________________________________________________________
dropout_3 (Dropout) (None, 204, 204, 32) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 204, 204, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 102, 102, 32) 0
_________________________________________________________________
flatten_2 (Flatten) (None, 332928) 0
_________________________________________________________________
dense_3 (Dense) (None, 512) 170459648
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_4 (Dense) (None, 39) 20007
_________________________________________________________________
activation_1 (Activation) (None, 39) 0
=================================================================
Total params: 170,489,799
Trainable params: 170,489,799
Non-trainable params: 0
问题
- 我不认为我的 metric ='accuracy' 是一个好的选择:它并不能反映所发生事情的现实。例如,我对我的训练数据进行了评估测试,得到了 0.95(95% 的 bin 分类良好),但这并不意味着模型表现良好,因为在每个输出中:应该有 3 个39 个分量,其余的都是零。所以很有可能有很多零,因此即使在最坏的情况下,39 个值被预测为 0(没有检测到)比我们的 36/39 精度:哪个不能反映真正的问题?(这就是我得到的结果,对于给定的 X,我得到了许多接近零的值,所以当我使用阈值(0.5)时,它使一切都等于零:
- 你认为我的模型表现不佳是因为我没有很多图像吗?(每个标签的图像)?
- 你认为我的模型性能不好是因为神经网络的结构不好吗?我尝试使用预训练模型来修复第一层,因为最先进的技术表明这些层负责检测边缘,而我只训练了下一层:在这种情况下,我的结果也很糟糕(通过“准确度”指标计算) ?
- 总而言之,我知道我的问题可能没有通用的解决方案,但至少我想知道可能导致这些问题的原因以及如何解决这些问题?因此,欢迎任何帮助,尤其是来自在输出中有许多标签的多标签分类工作的人