Czy jest możliwe zaimplementowanie wielu softmaxów w ostatniej warstwie w Keras? Tak więc suma węzłów 1-4 = 1; 5-8 = 1; itp.
Czy powinienem wybrać inny projekt sieci?
Czy jest możliwe zaimplementowanie wielu softmaxów w ostatniej warstwie w Keras? Tak więc suma węzłów 1-4 = 1; 5-8 = 1; itp.
Czy powinienem wybrać inny projekt sieci?
Odpowiedzi:
Chciałbym użyć funkcjonalnego interfejsu.
Coś takiego:
from keras.layers import Activation, Input, Dense
from keras.models import Model
from keras.layers.merge import Concatenate
input_ = Input(shape=input_shape)
x = input_
x1 = Dense(4, x)
x2 = Dense(4, x)
x3 = Dense(4, x)
x1 = Activation('softmax')(x1)
x2 = Activation('softmax')(x2)
x3 = Activation('softmax')(x3)
x = Concatenate([x1, x2, x3])
model = Model(inputs=input_, outputs=x)
categorical_accuracy
i predict_classes
metod może potrzebować więcej myśli. . .
Możliwe jest po prostu zaimplementowanie własnej funkcji softmax. Możesz podzielić tensor na części, a następnie obliczyć softmax osobno dla każdej części i połączyć części tensora:
def custom_softmax(t):
sh = K.shape(t)
partial_sm = []
for i in range(sh[1] // 4):
partial_sm.append(K.softmax(t[:, i*4:(i+1)*4]))
return K.concatenate(partial_sm)
concatenate
bez argumentu osi konkatenacja przez ostatnią oś (w naszym przypadku oś = 1).
Następnie możesz dołączyć tę funkcję aktywacji do ukrytej warstwy lub dodać ją do wykresu.
Dense(activation=custom_activation)
lub
model.add(Activation(custom_activation))
Musisz także zdefiniować nową funkcję kosztów.