开源库OpenNMT-py使用记录
一、準(zhǔn)備
官網(wǎng):http://opennmt.net/
python+torch版Github:https://github.com/OpenNMT/OpenNMT-py
python+torch版說(shuō)明:http://zh.opennmt.net/OpenNMT-py/main.html
環(huán)境:ubuntu+python3+torch
需求:將圖片公式轉(zhuǎn)化為latex格式的半結(jié)構(gòu)化字符串
案例:http://zh.opennmt.net/OpenNMT-py/im2text.html
二、過(guò)程
1.Download the data.
wget -O data/im2text.tgz http://lstm.seas.harvard.edu/latex/im2text_small.tgz; tar zxf data/im2text.tgz -C data/2.Preprocess the data.
python3 preprocess.py -data_type img -src_dir data/im2text/images/ -train_src data/im2text/src-train.txt -train_tgt data/im2text/tgt-train.txt -valid_src data/im2text/src-val.txt -valid_tgt data/im2text/tgt-val.txt -save_data data/im2text/demo -tgt_seq_length 150 -tgt_words_min_frequency 2 -shard_size 500 -image_channel_size 13.Train the model.
nohup python3 train.py -model_type img -data data/im2text/demo -save_model demo-model -gpu_ranks 0 -batch_size 20 -max_grad_norm 20 -learning_rate 0.1 -word_vec_size 80 -encoder_type brnn -image_channel_size 1 &4.Translate the images.
python3 translate.py -data_type img -model demo-model_step_*.pt -src_dir data/im2text/images -src data/im2text/src-test.txt -output pred.txt -max_length 150 -beam_size 5 -gpu 0 -verbose -image_channel_size 1注意:-image_channel_size要設(shè)置,和前面兩個(gè)步驟一致,否則會(huì)默認(rèn)為3。
三、問(wèn)題
問(wèn)題1:
fjs@gpu1:~/OpenNMT-py$ python3 translate.py -data_type img -model demo-model_step_*.pt -src_dir data/im2text/images \ > -src data/im2text/src-test.txt -output pred.txt -max_length 150 -beam_size 5 -gpu 0 -verbose Traceback (most recent call last):File "translate.py", line 33, in <module>main(opt)File "translate.py", line 14, in maintranslator = build_translator(opt, report_score=True)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 31, in build_translatorfields, model, model_opt = load_test_model(opt, dummy_opt.__dict__)File "/home/fjs/OpenNMT-py/onmt/decoders/ensemble.py", line 135, in load_test_model'Ensemble models must use the same preprocessed data' AssertionError: Ensemble models must use the same preprocessed data處理:在onmt/decoders/ensemble.py中注釋點(diǎn)assert,這個(gè)不知有何影響,暫無(wú)法明確。
問(wèn)題2:
fjs@gpu1:~/OpenNMT-py$ python3 translate.py -data_type img -model demo-model_step_*.pt -src_dir data/im2text/images -src data/im2text/src-test.txt -output pred.txt -max_length 150 -beam_size 5 -gpu 0 -verbose -image_channel_size 1 /usr/local/lib/python3.5/dist-packages/torchtext/data/field.py:359: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).var = torch.tensor(arr, dtype=self.dtype, device=device) Traceback (most recent call last):File "translate.py", line 33, in <module>main(opt)File "translate.py", line 19, in mainattn_debug=opt.attn_debug)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 205, in translatebatch, data, attn_debug, fast=self.fastFile "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 309, in translate_batchreturn self._translate_batch(batch, data)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 621, in _translate_batchbatch, data_type)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 322, in _run_encoder'Ensemble decoding only supported for text data' AssertionError: Ensemble decoding only supported for text data?是onmt/translate/translator.py的提示,增加代碼如下:
問(wèn)題3:
fjs@gpu1:~/OpenNMT-py$ python3 translate.py -data_type img -model demo-model_step_*.pt -src_dir data/im2text/images -src data/im2text/src-test.txt -output pred.txt -max_length 150 -beam_size 5 -gpu 0 -verbose -image_channel_size 1 /usr/local/lib/python3.5/dist-packages/torchtext/data/field.py:359: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).var = torch.tensor(arr, dtype=self.dtype, device=device) Traceback (most recent call last):File "translate.py", line 33, in <module>main(opt)File "translate.py", line 19, in mainattn_debug=opt.attn_debug)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 205, in translatebatch, data, attn_debug, fast=self.fastFile "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 309, in translate_batchreturn self._translate_batch(batch, data)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 646, in _translate_batchmemory_bank = tuple(tile(x, beam_size, dim=1) for x in memory_bank)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 646, in <genexpr>memory_bank = tuple(tile(x, beam_size, dim=1) for x in memory_bank)File "/home/fjs/OpenNMT-py/onmt/utils/misc.py", line 42, in tile.transpose(0, 1) \ RuntimeError: CUDA out of memory. Tried to allocate 435.00 MiB (GPU 0; 10.92 GiB total capacity; 9.64 GiB already allocated; 355.50 MiB free; 376.90 MiB cached)?調(diào)整執(zhí)行參數(shù):-beam_size 3
問(wèn)題4:
fjs@gpu1:~/OpenNMT-py$ python3 translate.py -data_type img -model demo-model_step_*.pt -src_dir data/im2text/images -src data/im2text/src-test.txt -output pred.txt -max_length 150 -beam_size 3 -gpu 0 -verbose -image_channel_size 1 /usr/local/lib/python3.5/dist-packages/torchtext/data/field.py:359: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).var = torch.tensor(arr, dtype=self.dtype, device=device) Traceback (most recent call last):File "translate.py", line 33, in <module>main(opt)File "translate.py", line 19, in mainattn_debug=opt.attn_debug)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 205, in translatebatch, data, attn_debug, fast=self.fastFile "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 309, in translate_batchreturn self._translate_batch(batch, data)File "/home/fjs/OpenNMT-py/onmt/translate/translator.py", line 649, in _translate_batchmemory_lengths = tile(src_lengths, beam_size)File "/home/fjs/OpenNMT-py/onmt/utils/misc.py", line 32, in tileperm = list(range(len(x.size()))) AttributeError: 'int' object has no attribute 'size'未解決?
總結(jié)
以上是生活随笔為你收集整理的开源库OpenNMT-py使用记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Setting up Pytorch w
- 下一篇: Google开源库Image Capti