私はKerasでモデルを作成していて、独自のメトリック(perplexity)を計算したいと思っています。これには、非正規化確率/ロジットを使用する必要があります。しかし、kerasモデルは、ソフトマックスprobabiltiesを返す:Keras - 確率ではなく正規化されていないログを取得する方法
model = Sequential()
model.add(embedding_layer)
model.add(LSTM(n_hidden, return_sequences=False))
model.add(Dropout(dropout_keep_prob))
model.add(Dense(vocab_size))
model.add(Activation('softmax'))
optimizer = RMSprop(lr=self.lr)
model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy')
Kerasよくある中間層hereの出力を取得するためのソリューションを持っています。もう1つの解はhereです。しかし、これらの答えは、中間の出力を私が必要としない別のモデルに保存します。 カスタムメトリックのログを使用したいとします。カスタムメトリックは、トレーニング中に評価および表示されるように、model.compile()
関数に含める必要があります。だから、私はDense
層の出力を別のモデルではなく、元のモデルの一部として分離する必要はありません。要するに
、私の質問は以下のとおりです。
def custom_metric(y_true, y_pred)
を使用して概説hereなどのカスタムメトリックを定義し、y_pred
がlogitsまたは正規化された確率が含まれていますか?正規化された確率を含む場合、正規化されていない確率、つまり
Dense
層によって出力されるログを得るにはどうすればよいですか?
このモデルを保持したいのですが、変更することはできますか? sparse_categorical_crossentropyを損失として保持しますか? –
同じ最終結果を得られる代替手段は何でしょうか? – Lemon