【发布时间】:2018-06-22 02:45:46
【问题描述】:
我正在使用 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 个类......
【问题讨论】:
-
您有 5 个类,但类索引不在 [0, 4] 范围内,您必须将原始类索引转换为适合该范围的新类索引。
标签: machine-learning neural-network deep-learning keras conv-neural-network