プーリングの原理とPython実装

Nov 02, 2016 am 10:07 AM

この記事では、最初にプーリングに対応する操作について説明し、次にプーリングの背後にある原理のいくつかを分析し、最後にプーリングの Python 実装を示します。

1. プーリングに対応する操作

まず第一に、プーリング全体の直感的な概念があります (つまり、プーリングの入力、出力、および特定の機能を説明しますが、特定の実装の詳細は無視します)。プーリングは行列であり、出力は行列です。完成した関数は、入力行列のローカル領域を操作して、その領域に対応する出力がその領域の特性を最もよく表すことができるようにすることです。図 1 に示すように、左側の図の黄色の行列は入力行列を表し、右側の図の青色の行列は出力行列を表し、動的オレンジ色の行列は選択された入力行列の局所領域を表します。選択されたすべての代表が、元の入力行列に対応する空間的位置関係に従って出力行列内で並べ替えられます。

このプロセスは選挙プロセスにたとえることができます。北京市長を選出したい場合、実現可能なアプローチは、北京の各区がその区の利益に最も適した代表者を選出し、選出された代表者が北京市長の選出方法を決定することです。もちろん、私たちは各地区で選出された議員がその地区の利益に最もよく応えられることを望んでいます。プーリングを簡単に例えると、北京 入力マトリックス、朝陽区、海淀区、その他の 地方地域が 出力マトリックスを表します (会議中に地理的位置に従って配置されている場合、これはプーリングの特性と同じです (非常に似ています)。

プーリングの原理とPython実装

2. プールの背後にある理由

地域の代表者を選出するプロセスでは、私たちの一般的なアプローチは、その地域で最も権威のある人を代表者として選択することです(最大プールに対応)、またはその人を選択することですこれに応じて、エリア所有者の一般的な特徴を持つ人が代表者として使用されます (平均プーリングに対応)。プーリングには 2 つの一般的な方法があります。1 つは最大のローカル エリア値を持つ人がエリアの代表者として選ばれます。または、エリア内のすべての値がエリアの代表として平均化されます。

地域内で最も評判の高い人を代表として選ぶのと、地域内の全員の一般的な特徴を最もよく表す人を代表として選ぶのとでは、次のような利点があります。

1) これは、地元で最も評判の高い人が市長を選ぶ 偏りはあるが、高齢に頼っている可能性があり、地域の一般大衆の意見を代表することはできない(極大値、一般的な特性は無視されやすい)。

2) 地域内のすべての人の一般的な特性を最もよく代表する人は、その地域のすべての住民の最大の権利と利益を代表することができますが、その人の認知能力は限られているため (局所平均は小さい) 、そのため彼の認知能力には限界がある)、市長を選ぶ際にバイアスが生じやすい。

3) エリア内の人々がある程度の移動の自由(平行移動と回転の不変性に相当)を持っている場合、基本的には上記の 2 つの代表者選出方法に影響を与えません。

プーリングの正式な説明

関連理論によると: (1) 近傍のサイズが制限されているため、推定値の分散が増加します。(2) 誤差により推定平均値の偏差が生じます。一般に、平均プーリングは最初のエラーを減らし、画像のより多くの背景情報を保持できますが、最大プーリングは 2 番目のエラーを減らし、より多くのテクスチャ情報を保持できます。

一般に、プーリングの入力次元は高く、出力次元は低くなります。これは、プーリング原理の上記の説明に基づいて、この次元削減プロセスであると推測できます。入力すべき最も重要な情報の一部を大幅に保持します。実際にプーリングを適用する場合には、実際の問題の特性に基づいて詳細な分析を行う必要があります。実際、プーリングの動作と原理を理解したら、具体的な問題とうまく組み合わせれば、それは良いイノベーションのポイントになります(笑)。

3. pooing の Python 実装

コードを書くときの著者の考えの一部は次のとおりです。その核心は、複雑な問題をコードで直接実装できる問題に分割することです。

1) 入力。コードを記述するときにこれら 2 つの形式を直接考慮すると、どこから始めればよいかわかりません (考慮すべき状況がたくさんあり、多次元行列になると混乱しやすくなります)。 。注意深く分析した結果、mxn 行列のプーリングを実装すると、mxn 行列の実装を使用して mxnxp 行列を簡単に実装できることがわかりました。

2) mxn 行列入力の場合、図 1 のオレンジ色のボックスが入力行列を正確にカバーできない可能性があるため、入力行列を拡張する必要があります。拡張も非常に簡単です。最後の poolStride に対応する poolSize が入力行列をカバーできる限り、他の行列も確実にカバーできます。

3) 最後に、for ループは同様の操作を実行します。

def pooling(inputMap,poolSize=3,poolStride=2,mode='max'):
    """INPUTS:
              inputMap - input array of the pooling layer
              poolSize - X-size(equivalent to Y-size) of receptive field
              poolStride - the stride size between successive pooling squares
       
       OUTPUTS:
               outputMap - output array of the pooling layer
               
       Padding mode - 'edge'
    """
    # inputMap sizes
    in_row,in_col = np.shape(inputMap)
    
    # outputMap sizes
    out_row,out_col = int(np.floor(in_row/poolStride)),int(np.floor(in_col/poolStride))
    row_remainder,col_remainder = np.mod(in_row,poolStride),np.mod(in_col,poolStride)
    if row_remainder != 0:
        out_row +=1
    if col_remainder != 0:
        out_col +=1
    outputMap = np.zeros((out_row,out_col))
    
    # padding
    temp_map = np.lib.pad(inputMap, ((0,poolSize-row_remainder),(0,poolSize-col_remainder)), 'edge')
    
    # max pooling
    for r_idx in range(0,out_row):
        for c_idx in range(0,out_col):
            startX = c_idx * poolStride
            startY = r_idx * poolStride
            poolField = temp_map[startY:startY + poolSize, startX:startX + poolSize]
            poolOut = np.max(poolField)
            outputMap[r_idx,c_idx] = poolOut
    
    # retrun outputMap
    return  outputMap
# 测试实例
test = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
test_result = pooling(test, 2, 2, 'max')
print(test_result)
ログイン後にコピー

テスト結果:

プーリングの原理とPython実装

概要: まずテクノロジーのインプット、アウトプット、機能を理解し、次に人生における同様の例を探します。最後に、テクノロジーを達成可能なステップに分解します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

See all articles