我正在使用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'类。当然,班级分布到处都是,特别是在训练数据集上。
我下载了错误的数据集吗?我在这里想念东西吗?
答案 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)
。