Максимальный пул одного изображения в тензорном потоке с использованием "tf.nn.avg_pool" - PullRequest
1 голос
/ 30 октября 2019

Я хочу применить "tf.nn.max_pool ()" к одному изображению, но я получаю результат с размером, который полностью отличается от входного:

import tensorflow as tf
import numpy as np

ifmaps_1 = tf.Variable(tf.random_uniform( shape=[ 7, 7, 3], minval=0, maxval=3, dtype=tf.int32))

ifmaps=tf.dtypes.cast(ifmaps_1, dtype=tf.float64)

ofmaps_tf = tf.nn.max_pool([ifmaps], ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding="SAME")[0] # no padding

init = tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    print("ifmaps_tf = ")
    print(ifmaps.eval())
    print("ofmaps_tf = ")
    result = sess.run(ofmaps_tf)
    print(result)

Я думаю, что это связано спытаясь применить пул к одному примеру, а не на пакет. Мне нужно сделать объединение на одном примере.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 31 октября 2019

Ваш ввод (7,7,3), размер ядра (3,3) и шаг (2,2). Поэтому, если вы не хотите никаких дополнений (укажите в своем комментарии), вы должны использовать padding="VALID", который вернет тензор (3,3) в качестве вывода. Если вы используете padding="SAME", он вернет (4,4) тензор.

Обычно формула расчета выходного размера для SAME pad составляет:

out_size = ceil(in_sizei/stride)

Для VALID pad:

out_size = ceil(in_size-filter_size+1/stride)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...