[解決済み】PythonでSoftmax関数を実装する方法
2022-04-02 09:35:46
質問
から Udacityのディープラーニングの授業 y_i のソフトマックスは、単純に Y ベクトル全体の指数和で割った指数となります。
どこ
S(y_i)
のソフトマックス関数です。
y_i
と
e
は指数であり
j
は入力ベクトルYの列数である。
以下のように試してみました。
import numpy as np
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()
scores = [3.0, 1.0, 0.2]
print(softmax(scores))
を返します。
[ 0.8360188 0.11314284 0.05083836]
しかし、提案された解決策は
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x) / np.sum(np.exp(x), axis=0)
を生成します。 最初の実装と同じ出力 最初の実装では、各列の差分と最大値を明示的に取り、その合計で割っているにもかかわらず、です。
誰かその理由を数学的に示してくれませんか?一方が正しくて、もう一方は間違っているのでしょうか?
コードと時間の複雑さの点で、両者の実装は似ていますか?どちらがより効率的ですか?
どのように解決するのですか?
どちらも正しいのですが、数値の安定性の観点から、あなたの方が好ましいと思います。
でスタートします。
e ^ (x - max(x)) / sum(e^(x - max(x))
a^(b - c) = (a^b)/(a^c) であることを利用すると、次のようになります。
= e ^ x / (e ^ max(x) * sum(e ^ x / e ^ max(x)))
= e ^ x / sum(e ^ x)
というのは、もう一つの答えに書いてあることです。max(x)を任意の変数に置き換えても打ち消されます。
関連
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python カメの描画コマンドとその例
-
Pythonによるjieba分割ライブラリ
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python: OverflowError: 数学の範囲エラー