마지막 레이어에서 Keras Multiple“Softmax”가 가능합니까?


10

마지막 레이어에서 여러 소프트 맥스

Keras의 마지막 레이어에서 다중 소프트 맥스를 구현할 수 있습니까? 따라서 노드 1-4의 합은 1입니다. 5-8 = 1; 기타

다른 네트워크 디자인을해야합니까?

답변:


7

기능적 인터페이스를 사용합니다.

이 같은:

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)

2
나는 당신이 솔루션을 추가 할 것을 제안하지는 않지만 대답을 그대로 두는 것은 OP의 모델 구축 작업이 완료 될 것이라는 인상을 준다고 생각합니다. 그러나 실제로 모델을 학습하려는 경우 OP가 다른 코드 부분에서 수행해야 할 추가 작업량이 있습니다. 최소한 그 요구 사항을 참조 할 수 있습니다. 다른 답변에도 동일하게 적용됩니다. . .
닐 슬레이터

1
@ NeilSlater 당신은 절대적으로 맞습니다. 왜 다른 비용 함수가 필요한지 모르겠습니다. 이것이 왜 중요한지 말해 줄 수 있습니까?
arthurDent

1
@arthurDent - Keras '멀티 클래스 크로스 엔트로피 손실 때문에 아마도 잘못 다른 그룹의 출력들에 할당 구배 될 수 하나 개의 그룹에서 오류 - 세 동시 진정한 각 실시 예에 클래스 및 그룹으로 분리 대처하도록 기어드하지 . 당신은 그것을 시도하고 어떻게되는지 볼 수 있습니다. . . 여전히 수렴 할 수 있지만 균형점이 3 개의 완전히 별개의 네트워크를 갖는 것만 큼 좋지 않을 수 있습니다.
닐 슬레이터

1
@arthurDent :. . . 더 자세히 생각하고 있지만 softmax를 사용한 멀티 클래스 교차 엔트로피에 대한 로짓의 기울기는 여전히 적용되어 성공적으로 작동 할 수 있습니다. 일반적인 softmax 출력은 물론 3 개의 클래스를 동시에 배우지 못하지만 아마도이 대답만으로도 충분합니다. . . y^y
닐 슬레이터

1
메트릭스 사용 예를 들어 categorical_accuracy, predict_classes방법은 더 많은 생각이 필요할 수 있습니다. . .
닐 슬레이터

5

고유 한 softmax 기능 만 구현하면됩니다. 텐서를 파트로 분할 한 다음 파트 당 개별적으로 softmax를 계산하고 텐서 파트를 연결할 수 있습니다.

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 축 인수가 없으면 마지막 축을 통해 연결됩니다 (이 경우 axis = 1).

그런 다음이 활성화 함수를 숨겨진 레이어에 포함 시키거나 그래프에 추가 할 수 있습니다.

Dense(activation=custom_activation)

또는

model.add(Activation(custom_activation))

또한 새로운 비용 함수를 정의해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.