2017-10-09 10 views
0

먼저 질문과 상황에 대해 알려드립니다. 나는 chainer에서 다중 라벨 분류를하고 싶고 나의 클래스 불균형 문제는 매우 심각하다.체인저에서 손실 무게를 설정하는 방법은 무엇입니까?

이 경우 나는 손실 함수를 계산하기 위해 inorder를 조각 내야한다. 예를 들어 다중 레이블 분류에서 ground truth 레이블 벡터의 대부분 요소는 0이고 그 중 소수만이 1이다.이 상황에서 F .sigmoid_cross_entropy 모든 0/1 요소를 적용하면 수렴되지 않는 교육이 발생할 수 있으므로 [[xx, xxx, ..., xxx]] 슬라이스 (마지막 FC 레이어의 가변 출력)를 사용하여 슬라이스를 결정합니다. 손실 함수를 계산하기위한 특정 요소. 이 경우 레이블 불균형으로 인해 희귀 클래스의 분류 성능이 저하 될 수 있으므로 역 전파 중에 희귀 한 gt 레이블 변수가 높은 손실 무게를 설정하려고하지만 주요 레이블 (gt가 너무 많음)을 설정할 수 있습니다. 번식.

어떻게해야합니까? chainer에서 다중 라벨 불균형 문제에 대한 귀하의 제안은 무엇입니까?

+0

sigmoid_cross_entropy에서이 기능을 찾을 수 없지만 원하는대로 정확히 수행하는'softmax_cross_entropy'에서'class_weight'를 찾을 수 있습니다. https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html#chainer.functions.softmax_cross_entropy sigmoid_cross_entropy에 대한 상황을 채택하도록 구현을 참조 할 수도 있습니다. https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L249-L253 – corochann

+0

softmax_crossentropy는 다중 라벨 분류에 적합하지 않습니다. 왜냐하면 multi -label 문제 하나의 이미지에 multible 레이블이 1 일 수 있지만 softmax_crossentropy를 사용하면 단 하나의 레이블 만이 True 일 수 있습니다. – machen

+0

softmax_cross_entropy가 다중 레이블 문제에 적합하지 않다면, BP에 대해 특정 요소 (희귀 클래스 예측 요소)를 여러 번 복사하고 손실을 계산하는 데 F.tile (pred)을 사용하는 방법, 희귀 한 클래스의 손실이 증가 될 수 있습니까? (필자는 F.tile이 이것을 할 수 있는지 모른다.) – machen

답변

0

당신의 sigmoid_cross_entropy() 사용하여 각각의 공간 위치에서 손실 값의 가중 평균에 대한 average 함수를 획득하기 위해 (reduce='no'를 통과시킴으로써) 모드 아니오-줄인다.

sigmoid_cross_entropy()은 먼저 각 공간 위치 및 배치 차원의 각 데이터에서 손실 값을 계산 한 다음 공간 차원 및 일괄 처리 차원에 대한 평균 또는 합계를 취합니다 (normalize 옵션에 따라 다름). reduce='no'을 전달하여 감소 부분을 비활성화 할 수 있습니다. 가중치 평균을 원할 경우 각 위치에서 손실 값을 구할 수 있도록 지정해야하며이를 직접 축소해야합니다.

그런 다음 가중 평균을 수동으로 수행하는 가장 간단한 방법은 평균화를위한 가중치를 나타내는 weight 인수를 허용 할 수있는 average()을 사용하는 것입니다. 먼저 입력과 weight을 사용하여 가중 합계를 수행 한 다음 결과를 weight의 합계로 나눕니다. 입력과 동일한 모양을 갖는 적절한 가중치 배열을 전달하고 sigmoid_cross_entropy(..., reduce='no')으로 얻은 원시 (되돌림되지 않은) 손실 값과 함께 average()으로 전달할 수 있습니다. weight이 적절하게 조정 된 경우 (예 : 1까지 합계) 체중 배열을 수동으로 곱하고 F.sum(score * weight)과 같은 합계를 취하는 것도 좋습니다.

+0

고맙습니다. 정말 많이 도움이됩니다. 체중이 가장 적절한 것은 내 많은 실험에 달려 있습니다 (깊은 학습의 블랙 박스가 너무 까맣기 때문에). 튜닝 파라미터 절차는 불편합니다. 즉, 어떤 매개 변수가 손실과 정확도를 가장 잘 나타내는 지 관찰하는 데 많은 시간을 소비합니다. chainer에 시각화 및 관리자 관리 도구가 있으면 매개 변수를 조정하는 것이 좋습니다. – machen

0

다중 라벨 분류 작업을 수행하는 경우 softmax_crossentropy을 사용하는 것이 어떨까요?

softmax_crossentropy는 class_weight 속성을 지정하여 클래스 불균형을 고려할 수 있습니다. https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L57

https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html

+1

softmax_crossentropy는 다중 라벨 분류에 적합하지 않다. 하나의 이미지에 다중 라벨 문제가 있기 때문에 1이지만 softmax_crossentropy를 사용한다. 오직 하나만이 참이라는 것을 의미합니까? – machen

+0

softmax_cross_entropy가 다중 레이블 문제에 적합하지 않다면, BP에 대해 특정 요소 (희귀 클래스 예측 요소)를 여러 번 복사하고 손실을 계산하는 데 F.tile (pred)을 사용하는 방법, 희귀 한 클래스의 손실이 증가 될 수 있습니까? (필자는 F.tile이이 작업을 수행 할 수 있는지 여부를 모르겠습니다.) – machen

+0

맞습니다. 다중 라벨과 다중 라벨을 혼동해서 죄송합니다. – hmm