15

現在、以下の記事の結果を再現しようとしています。
http://karpathy.github.io/2015/05/21/rnn-effectiveness/
theano バックエンドで Keras を使用しています。この記事では、最終的なソフトマックス層の温度を制御してさまざまな出力を生成することについて語っています。

温度。サンプリング中に Softmax の温度を操作することもできます。温度を 1 から低い数値 (0.5 など) に下げると、RNN の信頼性が高まりますが、サンプルがより保守的になります。逆に、温度が高くなると多様性が増しますが、間違いが増えます (スペルミスなど)。特に、温度をゼロに非常に近く設定すると、Paul Graham が言う可能性が最も高いでしょう。

私のモデルは次のとおりです。

model = Sequential()
model.add(LSTM(128, batch_input_shape = (batch_size, 1, 256), stateful = True, return_sequences = True))
model.add(LSTM(128, stateful = True))
model.add(Dropout(0.1))
model.add(Dense(256, activation = 'softmax'))

model.compile(optimizer = Adam(),
              loss = 'categorical_crossentropy', 
              metrics = ['accuracy'])

最終的な高密度レイヤーの温度を調整する唯一の方法は、重みマトリックスを取得し、それに温度を掛けることです。誰かがそれを行うためのより良い方法を知っていますか? また、モデルのセットアップ方法に問題がある場合は、RNN を初めて使用するのでお知らせください。

4

3 に答える 3

13

温度は、ソフトマックス層の出力に対して行うもののようです。この例を見つけました。

https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

次の関数を適用して、ソフトマックス出力をサンプリングします。

def sample(a, temperature=1.0):
    # helper function to sample an index from a probability array
    a = np.log(a) / temperature
    a = np.exp(a) / np.sum(np.exp(a))
    return np.argmax(np.random.multinomial(1, a, 1))
于 2016-05-16T12:37:57.780 に答える