Набор данных CIFAR-10 с использованием Keras
Я использую Keras для обучения модели на CIFAR-10 распознавать некоторые классы, однако, я хочу некоторые классы, а не все из них, поэтому я написал следующий код:
selected_classes = [2, 3, 5, 6, 7]
print('trainn', 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('testn', 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)
~Anaconda3libsite-packageskerasutilsnp_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 ответ:
Вам нужно переименовать вашу цель. Я бы предложил превратить ваши цели в строки, затем кодировать ярлыки и, наконец, перейти к категориальным.
Чтобы превратить ваши предсказания в классы, вы можете использовать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_
, чтобы узнать, какой класс соответствует какому результату.