Tensorflow word2vec InvalidArgumentError: Назначение требует соответствия форм обоих тензоров

Я использую этот код для обучения модели word2vec. Я пытаюсь тренировать это постепенно, используя saver.restore(), Я использую новые данные после восстановления модели. Так как размер словарного запаса для старых данных и новых данных не совпадает, я получил исключение, подобное этому:

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [28908,200] rhs shape= [71291,200]

Вот 71291 это размер словаря для старых данных и 28908 для новых данных.

Он получает слова из словаря train_data файл здесь, и строит сетевую модель, используя размер словаря. Я думал, что если бы я мог установить одинаковый размер словарного запаса для моих старых данных и новых данных, я смогу решить эту проблему.

Итак, мой вопрос: могу ли я сделать это в этом коде? Насколько я понимаю, я не могу достичь skipgram_word2vec() функция.

Или есть ли другой способ решения этой проблемы в этом коде помимо того, что я думал? Если это невозможно с помощью этого кода, я попробую другие способы для моей цели.

Любая помощь приветствуется.

1 ответ

Взглянув на источник word2vec_optimized.py Я бы сказал, что вам нужно будет изменить код там. Он работает, открывая текстовый файл сразу как "данные обучения". Для ваших целей вы должны изменить build_graph метод и позволяет ему получить возможность устанавливать все эти данные (слова, счетчики, words_per_epoch, current_epoch, total_words_processed, примеры, метки, opts.vocab_words, opts.vocab_counts, opts.words_per_epoch) при инициализации, а не из текстового файла.

Затем вам нужно объединить два текстовых файла и загрузить их один раз, чтобы создать словарь. Затем сохраните все данные выше и используйте их для восстановления сети при каждом последующем запуске.

Если вы используете более 2 текстов, вам необходимо включить весь текст, который вы планируете использовать, в первые данные для создания словарного запаса.

Другие вопросы по тегам