Почему слой conv2d требует ввода ndim = 4? - PullRequest
0 голосов
/ 17 мая 2019

Я хочу использовать слой 2d Convolutional в своей сети, и в качестве входного сигнала я хотел бы дать ему изображения.Итак, у меня есть пакет изображений, которые означают матрицу ndim = 3, например, для примера:

размерность моего ввода:

[10, 6, 7]

Значение 10 равно batch sizeи два других значения - размер изображения.Так какое же четвертое измерение требуется слою conv 2d?

Вот интересные строки кода:

self.state_size = [6, 7]

self.inputs_    = tf.placeholder(tf.float32, shape=[None, *self.state_size],  name="inputs_")


# Conv2D layer 1
self.conv1   = tf.layers.conv2d(inputs = self.inputs_,
                                filters = 4,
                                kernel_size = [4, 4],
                                strides = [1, 1],
                      kernel_initializer=tf.contrib.layers.xavier_initializer_conv2d())

Вот ошибка, которую я получаю:

Input 0 of layer conv2d_1 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 6, 7]*

1 Ответ

2 голосов
/ 17 мая 2019

Вот краткое объяснение размеров входного тензора для слоя Convolutional 2D.

 tensor_shape = (BATCH_SIZE, WIDTH, HEIGHT, CHANNELS).

Четвертое измерение - это измерение каналов (цвета).

Длинный ответ будет: Сверточный 2D-слой предполагает, что вход имеет четыре измерения.В тензорном потоке есть два формата тензора изображения.
1.channel_last (NHWC) - Размеры упорядочены как (BATCH_SIZE, HEIGHT, WIDTH, CHANNEL).
2.channel_first (NCHW) - Размеры упорядочены как BATCH_SIZE, CHANNELS, HEIGHT, WIDTH).

Измерение размера партии

В тензорном потоке (возможно, в других библиотеках машинного обучения), после того как вы определили свою модель, у вас естьдва варианта подачи данных в вашу модель.Первый вариант - подача точек данных по одной за раз.Вторым вариантом является подача N количества точек данных за раз к вашей модели.Это возможно из-за размера Размер партии

Размер по ширине

Этот размер определяет ширину изображения.

Размер по высоте

Этот размер определяет высоту изображения

Размер канала

Размер канала в изображении RGB - это размерность значений RGB.

РЕДАКТИРОВАТЬ:

Кукажите формат данных вашего входного изображения. Тензорный слой conv2d принимает аргумент data_format. По умолчанию используется «channel_last».Вы можете найти больше здесь .Следующий код показывает ввод в формате данных channals_last

inputs_ = tf.placeholder(tf.float32, [None, 32, 32, 3])

conv1 = tf.layers.conv2d(inputs_,32, (3, 3), data_format="channals_last")  

для каналов в начале

conv1 = tf.layers.conv2d(inputs_,32, (3, 3), data_format="channels_first")
...