Конвертировать между NHWC и NCHW в TensorFlow

Каков наилучший способ преобразовать тензор из формата NHWC в формат NCHW и наоборот?

Есть ли конкретная операция, которая делает это, или мне нужно будет использовать некоторую комбинацию операций типа split / concat?

Ответы на вопрос(1)

Решение Вопроса

Все, что вам нужно сделать, это перестановка измерений от NHWC до NCHW (или наоборот).

Значение каждой буквы может помочь понять:

N: количество изображений в пакетеH: высота изображенияW: ширина изображенияC: количество каналов изображения (например: 3 для RGB, 1 для градаций серого ...)Из NHWC в NCHW

Форма изображения(N, H, W, C) и мы хотим, чтобы вывод имел форму(N, C, H, W), Поэтому нам нужно подать заявкуtf.transpose с хорошо выбранной перестановкойperm.

Возвращенное тензорное измерениеi будет соответствовать входному измерениюperm[i]

perm[0] = 0  # output dimension 0 will be 'N', which was dimension 0 in the input
perm[1] = 3  # output dimension 1 will be 'C', which was dimension 3 in the input
perm[2] = 1  # output dimension 2 will be 'H', which was dimension 1 in the input
perm[3] = 2  # output dimension 3 will be 'W', which was dimension 2 in the input

На практике:

images_nhwc = tf.placeholder(tf.float32, [None, 200, 300, 3])  # input batch
out = tf.transpose(x, [0, 3, 1, 2])
print(out.get_shape())  # the shape of out is [None, 3, 200, 300]
От NCHW до NHWC

Форма изображения(N, C, H, W) и мы хотим, чтобы вывод имел форму(N, H, W, C), Поэтому нам нужно подать заявкуtf.transpose с хорошо выбранной перестановкойperm.

Возвращенное тензорное измерениеi будет соответствовать входному измерениюperm[i]

perm[0] = 0  # output dimension 0 will be 'N', which was dimension 0 in the input
perm[1] = 2  # output dimension 1 will be 'H', which was dimension 2 in the input
perm[2] = 3  # output dimension 2 will be 'W', which was dimension 3 in the input
perm[3] = 1  # output dimension 3 will be 'C', which was dimension 1 in the input

На практике:

images_nchw = tf.placeholder(tf.float32, [None, 3, 200, 300])  # input batch
out = tf.transpose(x, [0, 2, 3, 1])
print(out.get_shape())  # the shape of out is [None, 200, 300, 3]
 Olivier Moindrot26 янв. 2018 г., 10:08
@ user3085931: ты понял
 nikk29 июн. 2018 г., 00:06
Кроме того, что являетсяperm - или как это определяется?
 Ruthvik Vaila03 дек. 2018 г., 19:23
где ты использовалx а такжеperm?
 user308593126 янв. 2018 г., 09:40
Для полноты картины: объяснение, почему эти команды необходимы
 Olivier Moindrot29 июн. 2018 г., 11:27
perm перестановка размеров изображения, чтобы перейти от(N, H, W, C) в(N, C, H, W) например.

Ваш ответ на вопрос