Tensorflow word2vec InvalidArgumentError: Assign требует, чтобы формы обоих тензоров совпадали

Kubra спросил: 28 марта 2018 в 02:30 в: tensorflow

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

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

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

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

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

1 ответ

Peter Szoldan ответил: 28 марта 2018 в 07:44

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

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

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

Kubra ответил: 28 марта 2018 в 08:16
Спасибо за ответ. На самом деле я разбил свой текстовый файл на части, потому что мой компьютер не может обработать такое количество данных одновременно. Мое намерение состояло в том, чтобы обучить часть и добавить другие данные, чтобы возобновить обучение, но я столкнулся с этой проблемой. Я подумал, что если есть способ установить размер словаря, например взять только самые частые 100 000 слов, я мог бы создать одну и ту же сеть для всех своих текстов.
Peter Szoldan ответил: 29 марта 2018 в 09:52
Это выполнимо, но затем вы должны внести эти изменения в сам код word2vec_optimized.py. Однако теоретический вопрос заключается в том, как будет работать одна и та же сеть с изменяющимися словарями.