検索

この記事では、最初にプーリングに対応する操作について説明し、次にプーリングの背後にある原理のいくつかを分析し、最後にプーリングの 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 までご連絡ください。
Python vs. C:重要な違​​いを理解しますPython vs. C:重要な違​​いを理解しますApr 21, 2025 am 12:18 AM

PythonとCにはそれぞれ独自の利点があり、選択はプロジェクトの要件に基づいている必要があります。 1)Pythonは、簡潔な構文と動的タイピングのため、迅速な開発とデータ処理に適しています。 2)Cは、静的なタイピングと手動メモリ管理により、高性能およびシステムプログラミングに適しています。

Python vs. C:プロジェクトのためにどの言語を選択しますか?Python vs. C:プロジェクトのためにどの言語を選択しますか?Apr 21, 2025 am 12:17 AM

PythonまたはCの選択は、プロジェクトの要件に依存します。1)迅速な開発、データ処理、およびプロトタイプ設計が必要な場合は、Pythonを選択します。 2)高性能、低レイテンシ、および緊密なハードウェアコントロールが必要な場合は、Cを選択します。

Pythonの目標に到達する:毎日2時間のパワーPythonの目標に到達する:毎日2時間のパワーApr 20, 2025 am 12:21 AM

毎日2時間のPython学習を投資することで、プログラミングスキルを効果的に改善できます。 1.新しい知識を学ぶ:ドキュメントを読むか、チュートリアルを見る。 2。練習:コードと完全な演習を書きます。 3。レビュー:学んだコンテンツを統合します。 4。プロジェクトの実践:実際のプロジェクトで学んだことを適用します。このような構造化された学習計画は、Pythonを体系的にマスターし、キャリア目標を達成するのに役立ちます。

2時間の最大化:効果的なPython学習戦略2時間の最大化:効果的なPython学習戦略Apr 20, 2025 am 12:20 AM

2時間以内にPythonを効率的に学習する方法は次のとおりです。1。基本的な知識を確認し、Pythonのインストールと基本的な構文に精通していることを確認します。 2。変数、リスト、関数など、Pythonのコア概念を理解します。 3.例を使用して、基本的および高度な使用をマスターします。 4.一般的なエラーとデバッグテクニックを学習します。 5.リストの概念を使用したり、PEP8スタイルガイドに従ったりするなど、パフォーマンスの最適化とベストプラクティスを適用します。

PythonとCのどちらかを選択:あなたに適した言語PythonとCのどちらかを選択:あなたに適した言語Apr 20, 2025 am 12:20 AM

Pythonは初心者やデータサイエンスに適しており、Cはシステムプログラミングとゲーム開発に適しています。 1. Pythonはシンプルで使いやすく、データサイエンスやWeb開発に適しています。 2.Cは、ゲーム開発とシステムプログラミングに適した、高性能と制御を提供します。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. C:プログラミング言語の比較分析Python vs. C:プログラミング言語の比較分析Apr 20, 2025 am 12:14 AM

Pythonはデータサイエンスと迅速な発展により適していますが、Cは高性能およびシステムプログラミングにより適しています。 1. Python構文は簡潔で学習しやすく、データ処理と科学的コンピューティングに適しています。 2.Cには複雑な構文がありますが、優れたパフォーマンスがあり、ゲーム開発とシステムプログラミングでよく使用されます。

1日2時間:Python学習の可能性1日2時間:Python学習の可能性Apr 20, 2025 am 12:14 AM

Pythonを学ぶために1日2時間投資することは可能です。 1.新しい知識を学ぶ:リストや辞書など、1時間で新しい概念を学びます。 2。練習と練習:1時間を使用して、小さなプログラムを書くなどのプログラミング演習を実行します。合理的な計画と忍耐力を通じて、Pythonのコアコンセプトを短時間で習得できます。

Python vs. C:曲線と使いやすさの学習Python vs. C:曲線と使いやすさの学習Apr 19, 2025 am 12:20 AM

Pythonは学習と使用が簡単ですが、Cはより強力ですが複雑です。 1。Python構文は簡潔で初心者に適しています。動的なタイピングと自動メモリ管理により、使いやすくなりますが、ランタイムエラーを引き起こす可能性があります。 2.Cは、高性能アプリケーションに適した低レベルの制御と高度な機能を提供しますが、学習しきい値が高く、手動メモリとタイプの安全管理が必要です。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版

SublimeText3 Mac版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール