После того, как входная матрица построена, входная форма несовместима с сетью - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над моделью, использующей tf.keras.Conv2D, которая анализирует множество плоскостей паттернов за период времени, при этом входная форма модели (None, 9, 19, 19), 9 - это число наблюдаемых временных рамок. Причина, по которой форма ввода такова, что я выравниваю шаблоны 19x19 по времени, чтобы сформировать массив. При преобразовании в tf.constant этот массив имеет форму (9, 19, 19).

Вот загвоздка: tf.keras.Conv2D по умолчанию видит последнюю запись входной формы как глубину и сохраняет согласованность 2-й и 3-й записи. Это означает, что если я сохраню входную форму сети, форма, принятая новым слоем Conv2D, будет иметь форму (None, 9, 19, filter_numer), но размерность 2D, которую я хотел, составляла 19x19, а не 9x19. Если я изменю форму ввода с (9, 19, 19) на (19, 19, 9), время, которое потребуется, значительно увеличится, так как будет много оценок. Моя программа требует, чтобы время обработки было как можно меньше, изменение формы матрицы заняло бы гораздо больше времени, чем мне бы хотелось. Будем признательны за любые предложения.

1 Ответ

0 голосов
/ 21 июня 2020

Я разобрался, в Conv2D есть необязательный параметр data_format. Если data_format == 'channels_first' (по умолчанию 'channels_last'), новый слой Conv2D будет иметь предполагаемую форму (None, filter_number, 19, 19).

К сожалению, TensorFlow 2.2 не поддерживает данные channels_first формат пока что:

tensorflow.python.eager.core._NotOkStatusException: UnimplementedError: {{function_node __inference_keras_scratch_graph_1087}} The Conv2D op currently only supports the NHWC tensor format on the CPU. The op was given the format: NCHW
     [[{{node conv2d/Conv2D}}]] [Op:__inference_keras_scratch_graph_1087]

Преобразование между NHW C и NCHW в TensorFlow предоставляет альтернативный способ преобразования.

(Я только что понял, насколько мелким мои знания об этой библиотеке действительно ...)

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