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 текстов, вам необходимо включить весь текст, который вы планируете использовать, в первые данные для создания словарного запаса.