2016-08-23 3 views
0

하나 이상의 출력 레이어의 아키텍처를 가진 신경망을 만들 예정입니다. 보다 구체적으로는 일련의 길쌈 레이어 위에 병렬 프로 시저를 구성하도록 설계되었습니다. 하나의 가지는 분류 결과를 계산하는 것입니다 (softmax와 같습니다). 다른 하나는 회귀 결과를 얻는 것입니다. 그러나, 나는 손실 기능 (기준)을 선택하는 것뿐만 아니라 모델 설계에 매달렸다.멀티 출력 레이어 신경망의 토치 구현

I. conv 레이어 (nn.Sequential()) 상단의 분기 레이어에 토치 컨테이너 nn.Parallel() 또는 nn.Concat()을 사용해야합니까? 데이터 형식을 제외한 차이점은 무엇입니까?

II. 출력 데이터로 인해 분류 손실 함수와 회귀 손실 함수가 선형 적으로 결합됩니다. 결정된 컨테이너와 관련하여 nn.MultiCriterion() 또는 nn.ParallelCriterion()이 선택되는지 궁금합니다. 또는 새로운 기준 클래스를 사용자 정의해야합니다.

III. 유사한 작업을 한 사람이라면 누구든지 토치가 훈련을위한 역량을 구현하기 위해 추가 맞춤화가 필요한지를 알 수 있습니까? 토치 용기의 데이터 구조 문제에 관심이 있습니다. Parallel VS

답변

1
  1. ConcatParallel는 각 입력은 마지막 층의 출력 슬라이스를 취하면서 Concat 각 모듈은, 입력으로서 마지막 층의 전체 출력을 얻는 것이 다르다. 귀하의 목적을 위해서는 이 아니라 Parallel이 필요합니다. 왜냐하면 두 손실 기능 모두 순차적 네트워크의 전체 출력을 필요로하기 때문입니다.

  2. MultiCriterionParallenCriterion의 소스 코드를 기반으로하면 실제로는 똑같은 작업을 수행합니다. 중요한 차이점은 MultiCriterion의 경우 여러 손실 기능을 제공하지만 하나의 목표 만 제공하고 모두 해당 목표에 대해 계산된다는 것입니다. 분류 및 회귀 작업을 수행 할 때 다른 대상이 있다고 가정하면 ParallelCriterion(false)이 필요합니다. 여기서 은 복수 대상 모드를 사용할 수 있습니다 (인수가 trueParallelCriterion 인 경우 MultiCriterion과 동일하게 보임). 그런 다음 target은 개별 기준의 대상 테이블이 될 것으로 예상됩니다.

  3. ConcatParallelCriterion을 사용하는 경우 토치가 적절하게 그라디언트를 계산할 수 있어야합니다. 둘 다 개별 블록의 그래디언트를 올바르게 병합하는 updateGradInput을 구현합니다.