Не удалось передать входной массив из фигуры (8,8,3) в фигуру (8,8,2048,3) - PullRequest
0 голосов
/ 02 ноября 2018

Итак, я снова пытаюсь запустить тонкую настройку Inception v3 с помощью keras, я думаю, что есть некоторые проблемы с массивами. Я уже видел другие посты на эти темы, но теперь я не знаю, что делать. У меня нет большого опыта. Так что любая помощь будет оценена.

Вот весь код https://github.com/c3s4grod/PecuScope

И это ошибка, которая появляется:

Traceback (последний последний вызов):

Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ utils \ data_utils.py", строка 578, в get input = self.queue.get (block = True) .get () Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ multiprocessing \ pool.py", строка 644, в get поднять файл self._value "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ multiprocessing \ pool.py", строка 119, в рабочем result = (True, func (* args, ** kwds)) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ utils \ data_utils.py" , строка 401, в get_index return _SHARED_SEQUENCES [uid] [i] Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ preprocessing \ image.py", строка 1034, в getitem вернуть файл self._get_batches_of_transformed_samples (index_array) "C: \ Users \ Shangai \ AppData \ Local \ Конда \ Конда \ envs \ PSAI \ Lib \ сайт-пакеты \ keras \ препроцессора \ image.py", строка 1442, в _get_batches_of_transformed_samples batch_x [i] = x ValueError: не удалось передать входной массив из фигуры (8,8,3) в фигуру (8,8,2048,3)

Вышеуказанное исключение было прямой причиной следующего исключения:

Traceback (последний последний вызов):

Файл "C: /Users/Shangai/PycharmProjects/PSai/INCEPTION.py", строка 234, в validation_steps = steps_test) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ legacy \ interfaces.py", линия 91, в обертке return func (* args, ** kwargs) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ models.py", строка 1315, в fit_generator initial_epoch = initial_epoch) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ legacy \ interfaces.py", линия 91, в обертке return func (* args, ** kwargs) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ engine \ training.py", строка 2194, в fit_generator generator_output = next (output_generator) Файл "C: \ Users \ Shangai \ AppData \ Local \ conda \ conda \ envs \ PSAI \ lib \ site-packages \ keras \ utils \ data_utils.py", строка 584, в get six.raise_from (StopItered (e), e) Файл "", строка 2, в lift_from StopIteration: не удалось передать входной массив из фигуры (8,8,3) в форму (8,8,2048,3)

1 Ответ

0 голосов
/ 02 ноября 2018

Похоже, ваш входной тензор имеет неправильный размер. В общем случае вещание работает только в том случае, если оба массива / тензора имеют одинаковое количество измерений. В вашем случае это не так:

8 8 3       -> dim = 3
8 8 2048 3  -> dim = 4

Вам необходимо развернуть первый массив и добавить ось с размером 1 в правильном положении:

8 8 1    3
8 8 2048 3

Теперь размеры каждой оси совпадают и возможна трансляция в 3 измерениях. Для этого вы можете использовать newaxis - или None .

import numpy as np
A = np.ones((8, 8, 3))
B = np.ones((8, 8, 2048, 3))
C = A + B # Fails
A = A[:, :, np.newaxis, :]
# A = A[:, :, None, :]  # Alternative
C = A + B # Works

Другая возможность - использовать функцию numpy.expand_dims . То же обозначение доступно для тензоров в керас / тензорный поток (т. Е. тензорный поток.newaxis , тензорный поток.expand_dims ).

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