0

의 가능성을 예측하기 위해, 다음과 같은 사실이다 : 나는 각각에 속하는 입력 확률을 예측하기 위해 노력하고있어구조는 여러 개의 독립적 인 클래스 내가 해결하고있어 문제

  • 12 개 수업.
  • 입력이 12 클래스 중 하나에 속하지 않을 수도 있습니다. 즉, 12 개의 출력 (확률)이 모두 낮을 수 있습니다.
  • 출력 확률은 독립적이어야합니다. 즉, 클래스 1의 확률이 95 %라면 클래스 2의 확률은> 5 % 등이 될 수 있습니다. 즉, 일부 클래스가 유사하기 때문에 전체 확률을 최대 1로 더 할 필요가 없습니다. 실제로, 각 입력은 오직 하나의 클래스에만 속할 수 있습니다. 제가 말하는 것은 확률입니다.

    • 하나 뜨거운 인코딩 12 출력 클래스
    • 손실 기능 : 범주 crossentropy
    • 최종 층 : 12 개 뉴런에 고밀도 다음과 같이

    나는 현재이 접근하고있어 방법은 시그 모이 드 활성화

질문

  1. 이 12 개 클래스 각각의 멤버십을 예측하는 모델이 1 개있는 것이 합리적입니까? 아니면 각각 하나의 클래스에 대한 확률을 예측하는 독립 모델을 갖는 것이 더 합리적입니까? 뭐가 더 나은가요?
  2. 12 개 대신 13 개 클래스를 갖는 것이 더 낫습니다. 새로운 클래스는 입력이 어떤 클래스에도 속하지 않는다는 것을 나타냅니다.

코드

test_fraction = 0.2 
dropout_prob = 0.4 
activation_function = 'relu' 
loss_function = 'categorical_crossentropy' 
opt = Adam() 
verbose_level = 1 
num_targets = 12 
batch_size = 32 
epochs = 75 

X = np.array(keypoints) 
labels = np.array(labels) 
labels = np_utils.to_categorical(labels) 
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=test_fraction, random_state=42) 

# model training 
model = Sequential() 
model.add(Dense(32, input_shape=(180,))) 
model.add(Dense(64, activation=activation_function)) 
model.add(Dense(128, activation=activation_function)) 
model.add(Dense(num_targets, activation='sigmoid')) 
model.summary() 
model.compile(loss=loss_function, optimizer=opt, metrics=['accuracy']) 
history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=verbose_level, 
        validation_data=(X_test, y_test)) 
model.save('../models/model.h5') 
+0

각 입력이 하나의 클래스에만 속할 수있는 경우 확률이 1보다 커질 수있는 방법을 이해하지 못합니다. 실제적으로 모델의 출력을 다음과 같이 변환하는 데 사용할 메소드는 무엇입니까? 확률? 어쨌든 입력이 여러 클래스에 속할 수 없다면 한 모델이 나에게 가장 좋은 것 같습니다. 제 생각에는 '수업 없음'을 다루는 13 개의 수업이 있어야한다고 생각합니다. 그러나 모든 교육 인스턴스가 수업에 속한 경우 어떻게하면 13 번째 경우에 대비할 것입니까? – Stephen

답변

0

이것은 멀티 라벨 분류라고하며 쉽게 모델의 두 가지 사항을 변경하여 구현 될 수

  • 사용에 시그 모이 드 활성화를 출력
  • 다중 레이블 분류를 처리 할 수있는 binary_crossentropy 손실을 사용합니다.

그리고 나서 모델을 훈련 시키십시오.

0

올바른 시작을 위해

model.add(Dense(num_targets, activation='softmax')) 

sigmoid activation

model.add(Dense(num_targets, activation='sigmoid')) 

이 질문에 대답하기 위해 나는 말할 것 이진 분류되지 멀티 클래스 분류에 사용되는

  1. 당신은 독립적 인 모델 (클래스 당 하나의 모델)이 필요하지 않습니다. 하나의 모델은 모두 괜찮습니다.클래스 당 하나의 모델은 하드웨어 리 소스 관점에서 볼 때 이익이 없을 수도 있습니다.
  2. 두 번째 질문에 대해 12 개의 클래스 대신 13 개가있는 것은 다루는 문제에 달려 있습니다. 이 13 번째 클래스의 데이터가 있다면 원하는대로 모델을 학습 할 수 있습니다.