У меня есть lstm, который я использую как генератор последовательности, обученный векторам word2vec. Предыдущая реализация произвела распределение вероятностей для всех различных меток. Для каждого слова в словаре был свой ярлык. Эта реализация использовала CrossEntropyLoss Pytorch. Теперь я хочу изменить это, чтобы lstm выводил вектор, который имеет те же размеры, что и векторы, используемые для обучения. Таким образом, я мог использовать меру эвклидовых расстояний, чтобы сопоставить остроумие с близлежащими векторами в словаре. Проблема в том, что для этого мне нужно использовать другую функцию потерь, потому что CrossEntropyLoss подходит для классификаторов, а не для задач регрессии.
Я попытался изменить формат целевого вектора, но функция CrossEntropyLoss torch требует ввода целых чисел, а у меня есть вектор слов. Посмотрев на несколько вариантов, кажется, что Cosine Embedding Loss может быть хорошей идеей, но я не понимаю, как это работает и какой ввод требуется.
Я уже изменил свой полностью подключенный слой на выходные векторы тех же размеров, что и вложения Word, используемые для обучения:
nn.Linear(in_features=self.cfg.lstm.lstm_num_hidden,out_features=self.cfg.lstm.embedding_dim,bias=True)
Будем очень признательны за любые советы и примеры.
Источник: