zoukankan      html  css  js  c++  java
  • In Theano, how to do Reverse-MaxPooling in the Convolutional MaxPooling Auto-Encoder

    MaxPooling Layer always follows Convolutional Layer. But in the Convolutional MaxPooling Auto-Encoder, how to do reverse or Un-MaxPooling?

    Here is the method:

     1 import numpy as np
     2 import theano
     3 import theano.tensor as T
     4 import theano.sandbox.neighbours as nbr
     5 
     6 poolsize = (2, 2)
     7 print 'neighbor box:'
     8 print poolsize
     9 # Defining batch images
    10 images = T.tensor4('images')
    11 #conver images to neighbors matrix
    12 neibs = nbr.images2neibs(images, neib_shape=poolsize)
    13 
    14 # Constructing theano function 
    15 window_function = theano.function([images], neibs)
    16 
    17 # Input tensor image width and height are 4
    18 im_val = np.random.randint(0, 100, (2, 1, 4, 4))
    19 im_val = im_val.astype(np.float32)
    20 # Function application
    21 neibs_val = window_function(im_val)
    22 
    23 print 'original images:'
    24 print im_val
    25 print 'neighbor flatten:'
    26 print neibs_val
    27 
    28 
    29 neibs0 = T.zeros_like(neibs)
    30 #get maximum of neighbors
    31 am = T.argmax(neibs, axis=1)
    32 neibs1 = T.set_subtensor(neibs0[T.arange(neibs.shape[0]), am], 1)
    33 neibs *= neibs1 #suppress the non-maximum
    34 
    35 #convert neighbors matrix to images
    36 im_new = nbr.neibs2images(neibs, poolsize, im_val.shape)
    37 # Theano function definition
    38 inv_window = theano.function([images], im_new)
    39 # Function application
    40 im_new_val = inv_window(im_val)
    41 
    42 print 'non maximum suppression result:'
    43 print im_new_val
    View Code

    The following is the output:

     1 neighbor box:
     2 (2, 2)
     3 original images:
     4 [[[[ 15.  46.  46.  37.]
     5    [ 73.  93.   2.  91.]
     6    [ 97.  93.  78.   7.]
     7    [  0.  24.  34.  26.]]]
     8 
     9 
    10  [[[ 70.  46.   2.  93.]
    11    [ 11.  54.  29.  83.]
    12    [  0.  48.  69.  95.]
    13    [ 49.  48.  10.  19.]]]]
    14 neighbor flatten:
    15 [[ 15.  46.  73.  93.]
    16  [ 46.  37.   2.  91.]
    17  [ 97.  93.   0.  24.]
    18  [ 78.   7.  34.  26.]
    19  [ 70.  46.  11.  54.]
    20  [  2.  93.  29.  83.]
    21  [  0.  48.  49.  48.]
    22  [ 69.  95.  10.  19.]]
    23 non maximum suppression result:
    24 [[[[  0.   0.   0.   0.]
    25    [  0.  93.   0.  91.]
    26    [ 97.   0.  78.   0.]
    27    [  0.   0.   0.   0.]]]
    28 
    29 
    30  [[[ 70.   0.   0.  93.]
    31    [  0.   0.   0.   0.]
    32    [  0.   0.   0.  95.]
    33    [ 49.   0.   0.   0.]]]]
    View Code
  • 相关阅读:
    web移动端开发经验总结
    《前端JavaScript面试技巧》笔记一
    《SEO在网页制作中的应用》视频笔记
    web前端开发笔记(2)
    OAuth2.0理解和用法
    基于hdfs文件创建hive表
    kafka 配置事项
    centos7时间同步
    lambda架构
    hbase hadoop版本
  • 原文地址:https://www.cnblogs.com/starimpact/p/4319709.html
Copyright © 2011-2022 走看看