Python TypeError: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы - PullRequest
1 голос
/ 14 января 2020

Я новичок в Python & Deep Learning.

Я пытаюсь сделать простое обучение, но я получил ошибку:

only integer scalar arrays can be converted to a scalar index. on t_batch = t_label[batch_mask]

t_label пример: ['circle', 'circle', 'rectangle', 'triangle', ..., 'pentagon']

пример batch_mask: [2 0 2 1 2 2 1 0 0 2 2 1 2 0 0 1 0 0 1 0 1 0].

train_size = 3 # x_train.shape[0]
batch_size = 22
for i in range(242): # iters_num = 242
   batch_mask = np.random.choice(train_size, batch_size)
   print( t_train, batch_mask )
   x_batch = x_train[batch_mask]
   t_batch = t_label[batch_mask]

Я загрузил изображения и метки, используя следующие коды. Спасибо за вашу помощь.

data_list = glob('dataset\\training\\*\\*.jpg')
def _load_img():

    for v in data_list:
   #     print("Converting " + v + " to NumPy Array ...")       
        data = np.array(Image.open(v))
        data = data.reshape(-1, img_size)

    return data

def _load_label():
    labels = []
    for path in data_list:
        labels.append(get_label_from_path(path))

    return labels

1 Ответ

1 голос
/ 14 января 2020

Предполагается, что t_label создается с использованием _load_label(), это list, и этот тип не поддерживает индексацию с другим списком (вашим batch_mask). Отсюда ваша ошибка.

Если вы хотите использовать этот тип индексации, вам нужно создать t_label как массив NumPy. Более конкретно:

def load_label(data_list):
    labels = []
    for path in data_list:
        labels.append(get_label_from_path(path))
    return np.array(labels)

def load_label_variation(data_list):
    # Use a list comprehension to build list of labels
    labels = [get_label_from_path(path) for path in data_list]
    return np.array(labels)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...