Keras のような深層学習フレームワークは、大衆の参入障壁を下げ、DL モデルの開発を経験の浅い人々に民主化します。経験の浅い人々は、合理的なデフォルトと簡素化された API に依存して、重労働の矢面に立たされ、まともな結果を生み出すことができます。
次のような分類に Keras 損失関数を使用する場合、新しい深層学習実践者の間でよくある混乱が生じます。 CategoricalCrossentropy
& SparseCategoricalCrossentropy
:
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
loss = keras.losses.SparseCategoricalCrossentropy(from_logits=False)
どういう
from_logits
フラグ参照?
答えはかなり単純ですが、損失関数を使用して等級付けしようとしているネットワークの出力を確認する必要があります。
ロジットと SoftMax 確率
ロングストーリーショート:
確率は正規化されています。つまり、
[0..1]
. ロジットは正規化されておらず、[-inf...+inf]
.
ネットワークの出力層に応じて:
output = keras.layers.Dense(n, activation='softmax')(x)
output = keras.layers.Dense(n)(x)
の出力 Dense
レイヤーは どちら 戻り値:
- 確率: 出力は、出力を一連の確率に正規化する SoftMax 関数を介して渡されます。
n
、すべて合計すると1
. - ロジット:
n
アクティベーション。
この誤解は、レイヤーにアクティベーションを追加できる簡略化された構文から生じる可能性があります。 一見 単なる省略形ですが、単一のレイヤーとして:
output = keras.layers.Dense(n, activation='softmax')(x)
dense = keras.layers.Dense(n)(x)
output = keras.layers.Activation('softmax')(dense)
損失関数は、正規化された分布 (SoftMax 関数を介して渡される出力) またはロジットを期待するかどうかについて通知する必要があります。 従って from_logits
国旗!
いつすべきか from_logits=True?
ネットワークが出力確率を正規化する場合、損失関数を設定する必要があります from_logits
〜へ False
、ロジットを受け入れていないためです。 これは、フラグを受け入れるすべての損失クラスのデフォルト値でもあります。 activation='softmax'
出力レイヤーに:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10, activation='softmax')
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
この結果:
tf.Tensor(
[[[0.12467965 0.10423233 0.10054766 0.09162105 0.09144577 0.07093797
0.12523937 0.11292477 0.06583504 0.11253635]]], shape=(1, 1, 10), dtype=float32)
このネットワークは正規化された分布になるため、出力をターゲット出力と比較し、分類損失関数を介してそれらを等級付けする場合 (適切なタスクに対して) - 設定する必要があります from_logits
〜へ False
、またはデフォルト値のままにします。
一方、ネットワークが出力に SoftMax を適用しない場合:
model = keras.Sequential([
keras.layers.Input(shape=(10, 1)),
keras.layers.Dense(10)
])
input_data = tf.random.uniform(shape=[1, 1])
output = model(input_data)
print(output)
この結果:
tf.Tensor(
[[[-0.06081138 0.04154852 0.00153442 0.0705068 -0.01139916
0.08506121 0.1211026 -0.10112958 -0.03410497 0.08653068]]], shape=(1, 1, 10), dtype=float32)
設定する必要があります from_logits
〜へ True
損失関数が出力を適切に処理するため。
出力で SoftMax を使用する場合
ほとんどの実務家は、出力に SoftMax を適用して、正規化された確率分布を提供します。これは、多くの場合、特に単純化された教材でネットワークを使用するためです。 ただし、場合によっては、 しない 関数を出力に適用して、SoftMax または別の関数を適用する前に別の方法で処理したい場合。
注目に値する例は NLP モデルから来ています。このモデルでは、大きなボキャブラリに対する実際の確率が出力テンソルに存在する可能性があります。 SoftMax を適用する それらのすべて そして貪欲に argmax
通常、あまり良い結果は得られません。
ただし、ロジットを観察する場合は、上位 K を抽出します (K は任意の数値ですが、通常は [0...10]
)、そしてその後にのみ SoftMax を トップK 語彙内の可能なトークンは、分布を大幅にシフトし、通常、より現実的な結果を生成します。
ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!
これはトップ K サンプリングとして知られており、理想的な戦略ではありませんが、通常、グリーディ サンプリングよりも大幅に優れています。
さらに先へ - コンピュータ ビジョンのための実用的な深層学習
あなたの好奇心旺盛な性質は、さらに先へ進みたいと思わせますか? 私たちは私たちをチェックアウトすることをお勧めします コース: 「Pythonによるコンピュータビジョンのための実践的な深層学習」.
別のコンピューター ビジョン コースですか?
MNIST 数字や MNIST ファッションの分類は行いません。 彼らはずっと前に彼らの役割を果たしました。 高度なブラックボックス アーキテクチャにパフォーマンスの負担を負わせる前に、あまりにも多くの学習リソースが基本的なデータセットと基本的なアーキテクチャに焦点を合わせています。
私たちが注目したいのは 謎解き, 実用性, 理解する, 直感 & 実際のプロジェクト. 学びたい の あなたは違いを生むことができますか? 私たちの脳が画像を処理する方法から、乳がんの研究レベルのディープ ラーニング分類器の作成、「幻覚」を起こすディープ ラーニング ネットワークまで、実際の作業を通じて原理と理論を教え、コンピュータビジョンを解決するためにディープラーニングを適用する専門家になるためのノウハウとツール。
内部には何がありますか?
- ビジョンの第一原理と、コンピューターに「見る」ことを教える方法
- コンピューター ビジョンのさまざまなタスクとアプリケーション
- あなたの仕事を楽にする貿易ツール
- コンピュータ ビジョンのためのデータセットの検索、作成、および利用
- 畳み込みニューラル ネットワークの理論と応用
- データセット内のドメイン シフト、共起、およびその他のバイアスの処理
- 転移学習と、他人のトレーニング時間と計算リソースを自分の利益のために利用する
- 最先端の乳がん分類器の構築とトレーニング
- 主流のアイデアに健全な懐疑心を適用し、広く採用されている手法の意味を理解する方法
- t-SNE と PCA を使用した ConvNet の「概念空間」の可視化
- 企業がコンピューター ビジョン技術を使用してより良い結果を達成する方法のケース スタディ
- 適切なモデル評価、潜在空間の可視化、モデルの注意の特定
- ドメイン調査の実施、独自のデータセットの処理、モデル テストの確立
- 最先端のアーキテクチャ、アイデアの進展、それらの独自性と実装方法
- KerasCV – 最先端のパイプラインとモデルを作成するための WIP ライブラリ
- 論文を解析して読み、自分で実装する方法
- 用途に応じた機種選定
- エンドツーエンドの機械学習パイプラインの作成
- Faster R-CNN、RetinaNet、SSD、YOLO を使用したオブジェクト検出のランドスケープと直感
- インスタンスとセマンティック セグメンテーション
- YOLOv5によるリアルタイム物体認識
- YOLOv5 オブジェクト検出器のトレーニング
- KerasNLP (業界で強力な WIP ライブラリ) を使用したトランスフォーマーの操作
- トランスフォーマーを ConvNets と統合して画像のキャプションを生成する
- DeepDream
まとめ
この短いガイドでは、 from_logits
これは、Keras 損失クラスの議論であり、新しい実践者にしばしば疑問を投げかけます。
混乱は、レイヤー自体の定義内で、他のレイヤーの上にアクティベーションレイヤーを追加できる簡略構文から発生する可能性があります。 最後に、いつ引数を設定する必要があるかを見てきました True
or False
、および出力をロジットとして残すか、SoftMax などのアクティベーション関数を介して渡す必要がある場合。