Один горячий ввод для выхода softmax в кератах - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть нейронная сеть с горячими m * n векторами в качестве входных данных, со строками, представляющими категории, и столбцами, представляющими положение.

Я хочу обучить сеть выводить другой (стохастический) вектор с той же формой m * n на выходном слое, причем вероятности в каждом столбце суммируются в единицу.Идея состоит в том, чтобы использовать последний слой softmax, но нужно ли мне строить каждый столбец отдельно и объединять как здесь ?или это можно сделать проще (например, в одной строке) в Keras?

1 Ответ

0 голосов
/ 20 сентября 2018

Если ваша модель имеет выходную форму (None, m, n) и вы хотите вычислить softmax по второй оси, вы можете просто использовать метод активации softmax и передать аргумент axisэто (в вашем случае это должно быть axis=1):

from keras import activations

def the_softmax(axis):
    def my_softmax(x):
        return activations.softmax(x, axis=axis)
    return my_softmax

# sequential model
model.add(Dense(..., activation=the_softmax(1)))

# functional model
output = Dense(..., activation=the_softmax(1))(prev_layer_output)

В качестве альтернативы, если вы хотите использовать его в качестве независимого слоя, вы можете использовать слой Lambdaи бэкэнд softmax функция:

from keras import backend as K

def the_softmax(axis):
    def my_softmax(x):
        return K.softmax(x, axis=axis)
    return my_softmax

# sequential model
model.add(Lambda(the_softmax(1)))

# functional model
output = Lambda(the_softmax(1))(prev_layer_output)
...