使用 "tf.nn.avg_pool" 在 tensorflow 中最大池化单个图像
Max pool a single image in tensorflow using "tf.nn.avg_pool"
我想在单个图像上应用 "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)
我认为这与尝试将池化应用于单个示例而不是批处理有关。我需要对单个示例进行合并。
感谢任何帮助。
您的输入是 (7,7,3)
,内核大小是 (3,3)
,步长是 (2,2)
。所以如果你不想要任何填充,(在你的评论中说明),你应该使用 padding="VALID"
,这将 return 一个 (3,3)
张量作为输出。如果使用 padding="SAME"
,它将 return (4,4)
张量。
通常SAME pad的输出尺寸计算公式为:
out_size = ceil(in_sizei/stride)
对于 VALID pad 是:
out_size = ceil(in_size-filter_size+1/stride)
我想在单个图像上应用 "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)
我认为这与尝试将池化应用于单个示例而不是批处理有关。我需要对单个示例进行合并。
感谢任何帮助。
您的输入是 (7,7,3)
,内核大小是 (3,3)
,步长是 (2,2)
。所以如果你不想要任何填充,(在你的评论中说明),你应该使用 padding="VALID"
,这将 return 一个 (3,3)
张量作为输出。如果使用 padding="SAME"
,它将 return (4,4)
张量。
通常SAME pad的输出尺寸计算公式为:
out_size = ceil(in_sizei/stride)
对于 VALID pad 是:
out_size = ceil(in_size-filter_size+1/stride)