2

분류를 위해 keras 모델을 작성하는 데 도움이 필요합니다. I은 ​​할Keras 분류 모델

입력 : 광 스펙트럼의 167 점

출력 조사 체 (11 개)의 클래스.

그러나 하나의 데이터 세트는 여러 물질 (예 : 클래스 2,3,4를 포함)이있는 물질의 유령이 될 수 있습니다. categorical_crossentropy을 사용하려고 시도했지만 교차하지 않는 클래스에만 적합합니다.

KerasDoc :

참고 : 당신은 10 개 클래스가있는 경우 categorical_crossentropy 손실을 사용할 때, 당신의 목표는 범주 형식이어야합니다 (예를 들어, 각 샘플의 목표는 모든 인 10 차원 벡터해야한다 -zeros는 샘플의 클래스에 해당하는 인덱스에서 1을 기대합니다).

내 코드 : 나는 많은 모델을 시도했지만 좋은 결과를 얻을 수

model = Sequential() 
model.add(Dense(64, input_dim=167)) 
model.add(Dense(32)) 
model.add(Dense(11)) 
model.add(Activation('sigmoid')) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) 

범주 목표로 정수 목표를 변환하기 위해, 당신은 Keras 유틸리티 to_categorical를 사용할 수 있습니다. 이 사건 아니지만, categorial_crossentropy를 들어, 이상적으로 softmax 활성화를 사용해야합니다

답변

1

당신은 아마 sigmoidbinary_crossentropy (See here)

PS 잘 가야한다. softmax는 하나의 클래스 만 최대화하도록 최적화 된 것을 출력합니다.

(누구나이 "좋은"최적화 도구로이 답을 보완하고 싶다면, 언제든지).

+0

내가 사용 binary_crossentropy을 시도했지만 모든 적합한 조치에 있을지 예측 [0.23598771 0.24065545 0.20274314 0.20727901 0.21786793 0.20546967 0.24399549 0.23881513 0.22483987 0.24453731 0.2304628]를 얻을 그러나 유효한 [0, 0, 0, 1, 0, 0, 1, 임의 유령에 체크 , 0, 1, 1, 0]을 포함한다. 나는 진리와 비슷한 결과를 얻을 수 없다. – Mogost

+0

"임의의 유령"에서 참값을 얻을 것으로 예상하십니까? fit 메소드에서'verbose = 1' (또는 2)를 사용하면 모델의 "손실"이 감소하는 것을 볼 수 있습니다. 또한,'epochs = someNumber'를 사용하여 여러 번 훈련을 반복 할 수 있습니다. 손실이 줄어들면 모델은 잘 훈련됩니다. 그렇지 않은 경우 문제가 있습니다. 나는 167 개의 데이터 샘플이 당신의 모델을 제대로 제대로 배울 수 없다고 생각한다. 나는 당신이 알고있는 서로 다른 물질의 다른 조합을 가진 합성 (무작위가 아닌) 유령을 만드는 것과 같은 일종의 데이터 보강을 제안합니다. –

+0

작은 데이터 샘플을 위해 염두에 두어야 할 한가지 : 모델 기차를 만들어 올바르게 예측할 수 있지만 너무 적 으면 모델링이 모델을 이해하는 대신 암기 할 가능성이 있습니다 (overfittin). 모델이 잘 맞지 않으면 훈련 데이터와 함께 훌륭한 것처럼 보이지만 교육 데이터에 포함되지 않은 다른 데이터는 좋은 결과를 얻지 못합니다. –