Понимание изменения размера INDArray для моделей обнаружения объектов Tensorflow - PullRequest
0 голосов
/ 02 мая 2020

Попытка загрузить обученную модель Tensorflow в Deeplearning4J со следующей ошибкой:

IllegalStateException: Invalid array shape: cannot associate an array with shape [38880] with a placeholder of shape [-1, -1, -1, 3]:shape is wrong rank or does not match on one or more dimensions
var arr: INDArray = Nd4j.create(data) //.reshape(1, -1, -1, 3);
arr = Nd4j.pile(arr, arr)
sd.associateArrayWithVariable(arr, sd.variables.get(0))

Python модель была загружена так:

# Load image using OpenCV and
# expand image dimensions to have shape: [1, None, None, 3]
# i.e. a single-column array, where each item in the column has the pixel RGB value
image = cv2.imread(PATH_TO_IMAGE)
image_expanded = np.expand_dims(image, axis=0)

Пожалуйста, объясните любой вопрос, если Вы знаете:

1) Что означает [1, Нет, Нет, 3] в терминах Python массивов

2) Что означает np.expand_dims (изображение, ось = 0) в Python

3) Deeplearning4J изменяет форму (1, -1, -1, 3);

1 Ответ

1 голос
/ 02 мая 2020

Здесь вы смешиваете два разных понятия: заполнители TF и ​​императивное numpy -подобное изменение формы.

В вашем случае модель ожидает четырехмерный входной тензор с формой [-1, -1, - 1, 3]. Для человека это может быть переведено как [Any, Any, Any, 3]. Но вы пытаетесь накормить его тензором с формой [38880], ранг 1.

Теперь к вашим вопросам.

1) Смотрите выше. -1 рассматривается как «Любой».

2) Эта функция добавляет 1 в качестве измерения. то есть, если у вас есть [38880], expand_dims на оси = 0 сделает его [1, 38880]

3) Нет, это неправильно. Вы не должны использовать это как свою форму. У вас есть какое-то изображение, поэтому вы должны указать правильные размеры вашего изображения, например [1, 800, 600, 3].

...