4

TensorFlow를 사용하여 다중 레이블 분류기를 개발하고 싶습니다. 다중 클래스를 포함하는 다중 레이블이 있음을 의미합니다. 설명하기 위해 당신이 할 수있는 이미지의 상황과 같은 :Tensorflow의 다중 레이블 분류 자 ​​

  • 라벨-1 클래스 : 조명 비가, 비가, 부분 비가, 아니 비가
  • 라벨-2 클래스 : 햇볕이 잘 드는, 매우 흐림, 흐림, 구름 많음.

이 두 레이블을 신경망으로 분류하고 싶습니다. 지금은 모든 (label-1, label-2) 쌍 클래스마다 다른 클래스 레이블을 사용했습니다. 즉, 4 x 4 = 16 개의 다른 레이블이 있음을 의미합니다.

현재 손실

cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1])) 

# prediction is sofmaxed 
loss = cross_entropy + regul * schema['regul_ratio'] # regul things is for regularization 
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) 

내 모델을 훈련함으로써

그러나 나는 멀티 라벨 훈련 이러한 조건에서 더 좋은 일 것이라고 생각한다.

  • 내 기능은 [N_SAMPLES, n_features]됩니다
  • 내 레이블을 할 예정입니다 [N_SAMPLES, n_classes, 2]
[X1, X2, X3, X4 ...] #의

N_SAMPLES 기능

[0, 0, 0, 1], [0, 0, 1, 0] #없는 비가의 N_SAMPLES 및

흐린 어떻게 tensorflow와 softmax를 확률 분포 예측을 할 수있다. 이와 같은 다중 라벨 문제에 대한 실제 예제가 있습니까? 내 손실 텐서는 어떻게 될까요?

답변

4

왜 네트워크가 두 개의 다른 출력을 생성하지 않는가?

네트워크 -> prediction1 및 prediction2 prediction1 및 prediction2 모두 [#, #, #, #]하지만 제가 아래에 설명하는 서로 다른 크기를 경우에도 작동

.

그럼 그냥 실행

loss1 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction1, labels_1)) 
loss2 = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction2, labels_2)) 

loss = loss1 + loss2