Attualmente sto cercando di riprodurre i risultati del seguente articolo.
http://karpathy.github.io/2015/05/21/rnn-effectiveness/
Sto utilizzando Keras con il backend theano. Nell'articolo parla del controllo della temperatura dello strato di softmax finale per dare risultati diversi.Come modificare la temperatura di un'uscita softmax in Keras
Temperatura. Possiamo anche giocare con la temperatura di Softmax durante il campionamento. Riducendo la temperatura da 1 ad un numero inferiore (ad esempio 0,5), l'RNN è più sicuro, ma anche più conservativo nei suoi campioni. conservativo. Viceversa, temperature più elevate daranno maggiore diversità a ma al costo di più errori (ad esempio errori di ortografia, ecc.). In particolare, la temperatura ambiente molto vicino allo zero darà la più probabile cosa che Paul Graham potrebbe dire:
Il mio modello è il seguente.
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'])
L'unico modo che posso pensare di regolare la temperatura dello strato denso finale sarebbe quella di ottenere la matrice peso e moltiplicarlo per la temperatura. Qualcuno sa di un modo migliore per farlo? Inoltre, se qualcuno vede qualcosa di sbagliato nel modo in cui ho impostato il modello, fammi sapere poiché sono nuovo per gli RNN.
L'ultimo è diverso da 'np.random.choice (len (a), p = a)'? – danijar
Questo non è il softmax standard con la temperatura come definito qui: https: //en.wikipedia.org/wiki/Softmax_function (nella sezione di apprendimento di rinforzo). Perché viene applicato un log prima di dividere per temperatura? –