나는 keras에 커스텀 손실 기능을 구현 중이다. 모델은 autoencoder
입니다. 첫 번째 레이어는 (batch_size, sentence_length)
크기의 입력을 (batch_size, sentence_length, embedding_dimension)
에 포함시키는 포함 레이어입니다. 그런 다음 모델은 임베딩을 특정 차원의 벡터로 압축하고 마지막으로 임베디드를 (batch_size, sentence_lenght, embedding_dimension)
으로 재구성해야합니다.Keras : 손실 함수에서 레이어의 가중치를 사용하는 방법은 무엇입니까?
하지만 임베디드 레이어는 훈련 가능하며 손실은 임베디드 레이어의 가중치를 사용해야합니다 (필자의 어휘의 모든 단어 임베딩을 합하여 계산해야 함).
예를 들어 장난감을 훈련 시키려면 "고양이"를 원합니다. sentence_length is 2
및 embedding_dimension is 10
및 vocabulary size is 50
을 가정하므로 포함 행렬의 모양은 (50,10)
입니다. 임베디드 레이어의 출력 X
은 모양이 (1,2,10)
입니다. 그런 다음 모델을 통과하고 출력 X_hat
은 모양이 (1,2,10)
입니다. 이 모델은 벡터 '012'를 나타내는 벡터 X_hat[0]
이 벡터 'X[0]
'과 가장 유사하고 'cat'의 경우 'embedding'에서 'the'를 나타내는 확률이 최대가되도록 훈련되어야합니다. 그러나 코사인 유사도를 X
과 X_hat
사이의 코사인 유사도를 계산해야하며 코사인 유사도 합이 X_hat
이고 정규화 된 임베딩 매트릭스의 모든 임베딩 (50은 어휘 크기가 50이므로 50 임)은 손실입니다. 임베디드 레이어의 가중치
하지만 교육 과정을 반복 할 때마다 퍼가기 레이어의 가중치에 어떻게 액세스 할 수 있습니까?
감사합니다.
첫 번째 출력을 사용 모델을 해킹하여 포함 함수의 출력을 손실 함수로 이동 시키지만 레이어의 가중치를 취하는 것은 더 복잡한 작업을 추가하는 것 같습니다. –
이 방법을 원하십니까? 표준화 합계가 폭발 할 수 있습니다. 당신의 방법이 묘사 된 종이가 있습니까? 어쩌면 당신은 거기 softmax 출력을했습니다. –
NIPS 2017에서 허용되는이 문서를 구현하려고합니다. https://arxiv.org/pdf/1708.04729.pdf. 어쩌면이 논문을 잘 이해하지 못하더라도 방정식 1을 볼 수있을 것입니다. 분모는 We에 포함 된 어휘의 모든 단어에 대해 코사인 유사성을 취합니다. 이는 삽입 행렬입니다. – mat112