CIFAR-10数据集使用Keras

时间:2018-01-12 15:49:33

标签: machine-learning neural-network deep-learning keras conv-neural-network

我正在使用Keras在CIFAR-10上训练模型以识别某些类,但是,我想要一些类而不是所有类,所以我编写了以下代码:

selected_classes = [2, 3, 5, 6, 7]
print('train\n', x_train.shape, y_train.shape)
x = [ex for ex, ey in zip(x_train, y_train) if ey in selected_classes]
y = [ey for ex, ey in zip(x_train, y_train) if ey in selected_classes]
x_train = np.stack(x)
y_train = np.stack(y).reshape(-1,1)
print(x_train.shape, y_train.shape)

print('test\n', x_test.shape, y_test.shape)
x = [ex for ex, ey in zip(x_test, y_test) if ey in selected_classes]
y = [ey for ex, ey in zip(x_test, y_test) if ey in selected_classes]
x_test = np.stack(x)
y_test = np.stack(y).reshape(-1,1)
print(x_test.shape, y_test.shape)
num_classes = len(selected_classes)

我一直收到以下错误:

IndexError                                Traceback (most recent call last)
<ipython-input-8-d53a2cf8bdf8> in <module>()

 # Convert class vectors to binary class matrices.
 y_train = keras.utils.to_categorical(y_train, num_classes)
 y_test = keras.utils.to_categorical(y_test, num_classes)

 ~\Anaconda3\lib\site-packages\keras\utils\np_utils.py in to_categorical(y, 
 num_classes)
      n = y.shape[0]
      categorical = np.zeros((n, num_classes))
      categorical[np.arange(n), y] = 1
      output_shape = input_shape + (num_classes,)
      categorical = np.reshape(categorical, output_shape)

 IndexError: index 6 is out of bounds for axis 1 with size 5

我搜索了keras源代码并发现: y要转换为矩阵的类向量(从0到num_classes的整数).4

当我将num_classes定义为8左右时,它确实有效,但是,我只有5个类......

1 个答案:

答案 0 :(得分:2)

您需要重命名目标。 我建议将目标转换为字符串,然后标记编码,最后转为分类。

from keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder

y= [2, 3, 5, 6, 7]
y=[str(x) for x in y] #as strings
le = LabelEncoder()
le.fit(y)
y_transformed=le.transform(y)

y_train=to_categorical(y_transformed)

将您的预测转换为类,您可以使用le.classes_找出哪个类与哪个结果相对应。