Keras의 멀티 태스킹 학습


12

Keras에서 공유 레이어를 구현하려고합니다. Keras에는 keras.layers.concatenate있지만, 사용에 대한 설명서는 확실하지 않습니다. 여러 개의 공유 레이어를 만드는 데 사용할 수 있습니까? Keras를 사용하여 아래에 표시된 것처럼 간단한 공유 신경 네트워크를 구현하는 가장 좋은 방법은 무엇입니까?공유 신경망

3 개의 NN에 대한 모든 입력, 출력 및 공유 레이어의 모양은 동일합니다. 세 개의 NN에는 여러 개의 공유 계층 (및 비공유 계층)이 있습니다. 컬러 레이어는 각 NN에 고유하며 모양이 동일합니다.

기본적으로이 그림은 여러 개의 공유 숨겨진 레이어가있는 3 개의 동일한 NN과 여러 개의 공유되지 않은 숨겨진 레이어를 나타냅니다.

Twitter 예제에서와 같이 여러 레이어를 공유하는 방법이 확실하지 않습니다. 공유 레이어가 하나뿐이었습니다 (API 문서의 예).

답변:


10

기능적 API를 사용하면 네트워크의 다른 부분간에 가중치를 쉽게 공유 할 수 있습니다. 귀하의 경우 입력 인 가 있고 공유라는 레이어가 생깁니다. 그런 다음 sub1, sub2 및 sub3이라는 3 개의 다른 레이어와 out1, out2 및 out3이라는 3 개의 출력 레이어를 갖게됩니다.Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

이제 다음과 같이 모델을 정의 할 수 있습니다.

model = Model(inputs=x, outputs=[out1, out2, out3])

이제는 각 출력마다 하나씩 세 요소의 튜플 / 목록이 필요합니다.

이러한 개념으로 훨씬 더 나아갈 수 있습니다. 개인 레이어에 대한 개별 가중치를 배우고 싶지만 출력 레이어를 향한 선형 조합에 대해 동일한 가중치를 원한다고 가정 해 보겠습니다.

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

편집 : 연결은 기본적으로 원하는 작업의 반대입니다. 네트워크의 다른 부분에 대한 (중간) 출력을 새 레이어에 붙여 넣습니다. 실제로 여러 다른 부분으로 분리하려고합니다.


고마워 우리가 할 때 model.fit([data1, data2], [labels1, labels2]), 이것은 단일 모델로 훈련 될 것입니다.
Aditya

1
네, 라벨이 다른 손실을 가지고 있다면 더 많은 작업을 수행해야 할 것입니다. 케 라스에서는 쉽지는 않지만 불가능하지는 않습니다.
Jan van der Vegt

통합 모델을 재교육해야합니다. 하위 모델에 대한 교육 가중치가 이미있는 경우 어떻게합니까? 병합 된 모델에 대한 wieght를 작성하기 위해 이러한 가중치를 사용하는 방법이 있습니까?
shahar_m

@shahar_m 죄송합니다. 사용 사례가 무엇인지 잘 모르겠습니다. 통합 모델의 학습 가중치가 고정 된 경우 해당 레이어를로드하고 고정 할 수 있습니다.
Aditya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.