1. 程式人生 > >TensorFlow 池化層

TensorFlow 池化層

www tar float 深度 value pytho version str pan

在 TensorFlow 中使用池化層

在下面的練習中,你需要設定池化層的大小,strides,以及相應的 padding。你可以參考 tf.nn.max_pool()。Padding 與卷積 padding 的原理一樣。

說明

  1. 完成 maxpool 函數中所有的 TODO

  2. 設定 stridespaddingksize 使得池化的結果維度為 (1, 2, 2, 1)

"""
Set the values to `strides` and `ksize` such that
the output shape after pooling is (1, 2, 2, 1).
""" import tensorflow as tf import numpy as np # `tf.nn.max_pool` requires the input be 4D (batch_size, height, width, depth) # (1, 4, 4, 1) x = np.array([ [0, 1, 0.5, 10], [2, 2.5, 1, -8], [4, 0, 5, 6], [15, 1, 2, 3]], dtype=np.float32).reshape((1, 4, 4, 1)) X = tf.constant(x) def maxpool(input):
# TODO: Set the ksize (filter size) for each dimension (batch_size, height, width, depth) ksize = [?, ?, ?, ?] # TODO: Set the stride for each dimension (batch_size, height, width, depth) strides = [?, ?, ?, ?] # TODO: set the padding, either ‘VALID‘ or ‘SAME‘. padding = ? # https://www.tensorflow.org/versions/r0.11/api_docs/python/nn.html#max_pool
return tf.nn.max_pool(input, ksize, strides, padding) out = maxpool(X)

方案

這是我的做法。註意:有不止一種方法得到正確的輸出維度,你的答案可能會跟我的有所不同。

def maxpool(input):
    ksize = [1, 2, 2, 1]
    strides = [1, 2, 2, 1]
    padding = VALID
    return tf.nn.max_pool(input, ksize, strides, padding)

我想要把輸入的 (1, 4, 4, 1) 轉變成 (1, 2, 2, 1)。padding 方法我選擇 ‘VALID‘。我覺得他更容易理解,也得到了我想要的結果。

out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))

替換入值:

out_height = ceil(float(4 - 2 + 1) / float(2)) = ceil(1.5) = 2
out_width  = ceil(float(4 - 2 + 1) / float(2)) = ceil(1.5) = 2
深度在池化的時候不變,所以不用擔心。

TensorFlow 池化層