回答:
ニューラルネットワークのボトルネックは、ニューロンが少ない層であり、その下または上の層よりもニューロンが少ないです。このようなレイヤーがあると、トレーニング中に最良の損失を取得するために、ネットワークがフィーチャ表現を圧縮して利用可能なスペースに最適にフィットするようになります。
CNN(GoogleのInceptionネットワークなど)では、ボトルネックレイヤーが追加されて、ネットワーク内のフィーチャーマップ(別名「チャネル」)の数を減らします。そうしないと、各レイヤーで増加する傾向があります。これは、入力チャネルよりも出力チャネルが少ない1x1畳み込みを使用することで実現されます。
通常、ボトルネックレイヤーの重みを直接計算することはありません。他のすべての重みと同様に、トレーニングプロセスで処理されます。ボトルネックレイヤーに適したサイズを選択することは、うまく機能するネットワークアーキテクチャを見つけるために、推測して実験する必要があります。ここでの目標は通常、新しい画像にうまく一般化するネットワークを見つけることです。ボトルネックレイヤーは、ネットワークのパラメーター数を減らしながら、ネットワークを深くして多くの機能マップを表すことを可能にします。
事前トレーニング済みモデルの最後のレイヤーを再計算したいとします。
Input->[Freezed-Layers]->[Last-Layer-To-Re-Compute]->Output
電車に[最終レイヤ・ツー・再計算]は、あなたがの出力を評価する必要がある[凍結-レイヤー]指定された入力データに対して複数回。時間を節約するために、これらの出力を一度だけ計算できます。
Input#1->[Freezed-Layers]->Bottleneck-Features-Of-Input#1
次に、すべてのBottleneck-Features-Of-Input#iを保存し、直接使用して[Last-Layer-To-Re-Compute]をトレーニングします。
「image_retraining」の例の「cache_bottlenecks」関数からの説明:
同じ画像を複数回読み取る可能性があるため(トレーニング中に歪みが適用されない場合)、前処理中に各画像のボトルネックレイヤー値を1回計算し、それらのキャッシュされた値を読み取るだけで、速度が大幅に向上します。トレーニング中に繰り返し。
Tensorflowボトルネックは、データ認識を使用した実際のトレーニングが始まる前の最後の前処理フェーズです。各トレーニング画像からデータ構造が形成されるフェーズで、トレーニングの最終フェーズが行われ、その画像をトレーニング資料で使用される他のすべての画像と区別できます。画像の指紋のようなものです。
これは、再トレーニングコマンドに関係しており、その名前が示すように、これはコマンド実行の主な利用者です。このボトルネックが時間がかかりすぎると思われる場合は、トレーニング資料の量を妥協する必要があるかもしれません。
コマンドラインコマンドなので、正確なアルゴリズムはわかりません。アルゴリズムはGithubのコードで公開されていますが、おそらく非常に複雑(定義上、実行時間は非常に長い)であるため、このタイプの答えに書き留めることはできないと思います。