Изменение формы массива numpy приводит к TypeError - PullRequest
0 голосов
/ 24 апреля 2020

Я следую инструкциям на YouTube (https://www.youtube.com/watch?v=y1ZrOs9s2QA&feature=youtu.be), код можно найти здесь: https://github.com/murtazahassan/Digits-Classification/blob/master/OCR_CNN_Trainning.py

Но когда я пытаюсь запустите приведенный ниже код, я получаю сообщение об ошибке: TypeError: в скалярный индекс могут быть преобразованы только целочисленные скалярные массивы.

x_train = np.array(list(map(preprocess, x_train)))
x_test = np.array(list(map(preprocess, x_test)))
x_validation = np.array(list(map(preprocess, x_validation)))

x_train = x_train.reshape(x_train[0], x_train[1], x_train[2], 1)
x_test = x_test.reshape(x_test[0], x_test[1], x_test[2], 1)
x_validation = x_validation.reshape(x_validation[0], x_validation[1], x_validation[2], 1)

Я нашел это ( TypeError: только целочисленные скалярные массивы можно преобразовать в скалярный индекс при попытке kfold cv ) и это ( TypeError при индексации списка с массивом NumPy: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс ), но это не так Помоги мне. Что я делаю не так?

1 Ответ

1 голос
/ 24 апреля 2020

Вы передаете значения reshape, которые не относятся к типу int:

x_train = x_train.reshape(x_train[0], x_train[1], x_train[2], 1)

Здесь, например, x_train[0] должен иметь тип int (и остальные). Если вы хотите использовать их форму вместо их значений, используйте:

x_train = x_train.reshape(x_train.shape[0], x_train.shape[1], x_train.shape[2], 1)

В противном случае у вас есть два варианта:

  1. Если вы знаете значения в x_train , x_test и x_validation являются целыми числами, установите для их типа dtype значение int (и убедитесь, что он остается неизменным во время операций ML:

    x_train = np.array(list(map(preprocess, x_train)), dtype=np.int)
    x_test = np.array(list(map(preprocess, x_test)), dtype=np.int)
    x_validation = np.array(list(map(preprocess, x_validation)), dtype=np.int)
    
  2. Если они нужны быть float, но хотите назвать их как int, используйте:

    x_train = x_train.reshape(int(x_train[0]), int(x_train[1]), int(x_train[2]), 1)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...