Учитывая, что вы используете 'softmax'
:
softmax = exp(neurons) / sum(exp(neurons))
И что вы хотите, чтобы результаты классов были:
frequency = [0.4 , 0.3 , 0.2 , 0.08 , 0.02]
Смещения должно быть задано уравнением (поэлементно):
frequency = exp(biases) / sum(exp(biases))
Это формирует систему уравнений:
f1 = e^b1 / (e^b1 + e^b2 + ... + e^b5)
f2 = e^b2 / (e^b1 + e^b2 + ... + e^b5)
- ...
f5 = e^b5 / (e^b1 + e^b2 + ... + e^b5)
Если вы можете решить эту систему уравнений, вы получите нужные отклонения.
Я использовал метод Excel и метод test-error, чтобы определить, что для желаемых частот ваши смещения должны быть соответственно:
[1.1 , 0.81 , 0.4 , -0.51 , -1.9]
Я действительно не знаю, как легко решить эту систему , но вы можете продолжать экспериментировать с Excel или другим, пока не достигнете решения.
Добавление смещений к слою - метод 1.
Используйте имя при определении слоя, например:
self.last_dense = layers.Dense(units=3, activation="softmax", name='last_layer')
Возможно, вам потребуется создать Сначала модель, поэтому:
dummy_predictions = model.predict(np.zeros((1,) + input_shape))
Затем вы получите вес:
weights_and_biases = model.get_layer('last_layer').get_weights()
w, b = weights_and_biases
new_biases = np.array([-0.45752, 0.51344, 0.30730])
model.get_layer('last_layer').set_weights([w, new_biases])
Метод 2
def bias_init(bias_shape):
return K.variable([-0.45752, 0.51344, 0.30730])
self.last_dense = layers.Dense(units=3, activation="softmax", bias_initializer=bias_init)