IndexError: индекс 8 выходит за пределы для оси 1 с размером 8. Когда я даю 9 вместо 8, это работает, но точность слишком низкая - PullRequest
0 голосов
/ 01 октября 2019

Я сделал матрицу, объединив обучающие изображения

A = np.concatenate((folder[0], folder[1], folder[2], folder[3], folder[4], folder[5],folder[6], folder[7]))

Я определил матрицу, которая является меткой для изображений в матрице А. Каждая строка матрицы представляет тренировочные изображения,Чтобы обозначить все строки в матрице, я определил матрицу размером 3777 × 1. Значения в матрице: 1, 2, 3, 4, 5, 6, 7, 8, чтобы обозначить строки с 1 по 1719, 1720до 1920, с 1921 по 2036, с 2037 по 2103, с 2104 по 2568, с 2568 по 2868, с 2868 по 3044, с 3044 по 3778 соответственно. Код следующий: на самом деле моя папка содержит 8 файлов, и это метка, которую я сделал.

 label = np.ones(3777,dtype = int)
 label[0:1720] = 1
 label[1720:1920] = 2
 label[1920:2038] = 3
 label[2038:2104] = 4
 label[2104:2568] = 5
 label[2568:2868] = 6
 label[2868:3044] = 7
 label[3044:3778] = 8
 data,Label = shuffle(A,label,random_state=2)

Маркировка выполняется на основе этих данных 1719 × 65536, 200 × 65536, 117 ×65536, 67 × 65536, 465 × 65536, 299 × 65536, 176 × 65536, 734 × 65536.

Мой код выглядит следующим образом.

labelled_data = [data, Label]
X,Y = [labelled_data[0],labelled_data[1]]

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.4, 
random_state=4)

x_test, x_validation, y_test, y_validation=train_test_split(X_test, Y_test, test_size=0.5,
random_state=4)
import numpy as np


print(X_train.shape)

вывод:

(2266, 196608)

X_train = X_train.reshape((X_train.shape[0],256,256,3))
x_validation = x_validation.reshape((x_validation.shape[0],256,256,3))
x_test =x_test.reshape((x_test.shape[0],256,256,3))


X_train = X_train.astype('float32')
x_validation = x_validation.astype('float32')
x_test = x_test.astype('float32')

X_train = X_train/255
x_validation = x_validation/255
x_test =x_test/255

from keras.utils import np_utils
Y_train = np_utils.to_categorical(Y_train,8)
y_validation =np_utils.to_categorical(y_validation,8)
y_test =np_utils.to_categorical(y_test,8)

Я получаю ошибку, подобную этой

  IndexError                                Traceback (most recent call last)
<ipython-input-33-af19e709e58b> in <module>
      1 from keras.utils import np_utils
----> 2 Y_train = np_utils.to_categorical(Y_train,8)
      3 y_validation =np_utils.to_categorical(y_validation,8)
      4 y_test =np_utils.to_categorical(y_test,8)

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

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

, когда я даю 9 вместо 8, он работает нормально, но яЯ получаю очень низкую точность, а я не получаю confusion_matrix.

1 Ответ

0 голосов
/ 01 октября 2019

Индексы классов начинаются с нуля, а не с одного:

 label = np.ones(3777,dtype = int)
 label[0:1720] = 0
 label[1720:1920] = 1
 label[1920:2038] = 2
 label[2038:2104] = 3
 label[2104:2568] = 4
 label[2568:2868] = 5
 label[2868:3044] = 6
 label[3044:3778] = 7

Это также должно обеспечить значительную точность, поскольку модель предсказывает индексы классов, также начиная с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...