2019年8月30日金曜日

pooling

配列を pooling する方法です。

CNN ではなく、ただ単に配列を最大値で pooling したいと考え、その方法を探しました。
最初は numpy や scipy にあるだろうと簡単に考えていたのですが、見つけることができず。

最終的には、tensorflow の max_pooling を利用しました。このような感じ↓
******************************************

In [1]:
import numpy as np
from scipy.ndimage.filters import maximum_filter
import tensorflow as tf
In [2]:
x1=np.array([[0,1,2,3],[8,9,10,11],[4,5,6,7],[15,14,13,12]])
x1
Out[2]:
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11],
       [ 4,  5,  6,  7],
       [15, 14, 13, 12]])
In [3]:
x = x1.reshape([1, 4, 4, 1])
x
Out[3]:
array([[[[ 0],
         [ 1],
         [ 2],
         [ 3]],

        [[ 8],
         [ 9],
         [10],
         [11]],

        [[ 4],
         [ 5],
         [ 6],
         [ 7]],

        [[15],
         [14],
         [13],
         [12]]]])
In [4]:
x.shape
Out[4]:
(1, 4, 4, 1)
In [5]:
maximum_filter(x1,size=[2,2])
Out[5]:
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11],
       [ 8,  9, 10, 11],
       [15, 15, 14, 13]])
In [7]:
pool=tf.nn.max_pool(x, ksize=[1, 2, 2,1], strides=[1, 2, 2, 1], padding='SAME')
se = tf.Session()
pool = se.run([pool])
np.array(pool).reshape([1,2,2])
Out[7]:
array([[[ 9, 11],
        [15, 13]]])

0 件のコメント:

コメントを投稿