MNIST数据集缺少类

时间:2018-10-21 23:35:43

标签: python keras mnist

我正在使用Keras和Theano训练ConvNet,但在此之前,我决定先看一下数据集,其数据样本和类...而且我不喜欢所看到的。

我正在使用以下代码加载训练和测试数据集,并计算每个数据集标记了多少数据样本:

import numpy as np
from keras.datasets import mnist

(X_train, y_train), (X_test, y_test) = mnist.load_data()

train_classes = [0,0,0,0,0,0,0,0,0,0]
test_classes = [0,0,0,0,0,0,0,0,0,0]

for i in y_train:
    train_classes[y_train[i]] = train_classes[y_train[i]] + 1

for i in y_test:
    test_classes[y_test[i]] = test_classes[y_test[i]] + 1

print('Training classes: ', train_classes)
print('\nTesting classes: ', test_classes)

...结果令人担忧:

(ann) C:\Users\shado\mnist>python statistics.py
Using Theano backend.
Training classes:  [6742, 17900, 5421, 6265, 11907, 5923, 0, 0, 0, 5842]

Testing classes:  [1010, 1924, 1135, 0, 1940, 974, 0, 980, 0, 2037]

因此,从标签计数中可以看出,训练数据集缺少'6','7'和'8'类,而测试数据集缺少了'3','6'和'8'类。当然,班级分布到处都是,特别是在训练数据集上。

我下载了错误的数据集吗?我在这里想念东西吗?

1 个答案:

答案 0 :(得分:1)

您需要的逻辑是:

for i in y_train:
    train_classes[i] += 1

因为i已经是标签。

或等效地:

for i in range(len(y_train)):
    train_classes[y_train[i]] += 1

您当前的代码实质上是随机抽取每组的前10个标签...

注意:您也可以简单地使用:np.unique(y_train, return_counts=True)