È possibile implementare i softmax multipli nell'ultimo livello di Keras? Quindi la somma dei nodi 1-4 = 1; 5-8 = 1; eccetera.
Dovrei optare per un progetto di rete diverso?
È possibile implementare i softmax multipli nell'ultimo livello di Keras? Quindi la somma dei nodi 1-4 = 1; 5-8 = 1; eccetera.
Dovrei optare per un progetto di rete diverso?
Risposte:
Vorrei usare l'interfaccia funzionale.
Qualcosa come questo:
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
e predict_classes
metodi, potrebbe richiedere più riflessione. . .
È possibile semplicemente implementare la propria funzione softmax. È possibile dividere un tensore in parti, quindi calcolare il softmax separatamente per parte e concatenare le parti del tensore:
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
senza argomento dell'asse concatenato attraverso l'ultimo asse (nel nostro caso asse = 1).
Quindi puoi includere questa funzione di attivazione in un livello nascosto o aggiungerla a un grafico.
Dense(activation=custom_activation)
o
model.add(Activation(custom_activation))
È inoltre necessario definire una nuova funzione di costo.