我目前正在尝试复现以下文章的结果:
http://karpathy.github.io/2015/05/21/rnn-effectiveness/我正在使用带有Theano后端的Keras。在这篇文章中,他谈到了控制最终softmax层的温度以提供不同的输出。
温度。我们还可以在采样过程中调整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'])
我能想到调整最后一层Dense层温度的唯一方法是获取权重矩阵并将其乘以温度。有人知道更好的方法吗?如果有人发现我设置模型时有任何问题,请让我知道,因为我对RNN还很陌生。
np.random.choice(len(a), p=a)
有什么不同? - danijara
实际上是网络的 softmax 输出。因此,我们使用对数来反转 softmax 操作并获得类似于 logits 的值。这些是可以应用温度的值。这与 维基百科 一致。 - John