はじめに
機械学習のコードをいじっているとき,
出てきたバイナリファイルの中身を確認したいときがありますよね?
そんなとき用に備忘録として確認の仕方を残しておきます.
結論
Open-NMTでpreprocessを行った際に,-save_data
引数に指定したファイルに保存されたバイナリ化したデータを対象に説明していきます.
pythonのインタラクティブモードでデータをloadすると以下のようになっていると思います.
(ここではtraining-data-en-de.vocab.pt
が対象データ)
>>> import torch
>>> data = torch.load('training-data-en-de.vocab.pt')
>>> data
{'src': <onmt.inputters.text_dataset.TextMultiField object at 0x7f14bde081c0>, 'tgt': <onmt.inputters.text_dataset.TextMultiField object at 0x7f140916cee0>, 'indices': <torchtext.data.field.Field object at 0x7f140916cfd0>}
このとき,data
はdict型ですが,それぞれの中身がオブジェクトとなっています.
このオブジェクトの中身を確認したい場合,組み込み関数のvars()
かdir()
を用います.
2つの組み込み関数を比較した結果が以下になります.
>>> vars(data['src'])
{'preprocessing': None, 'postprocessing': None, 'is_target': False, 'fields': [('src', <torchtext.data.field.Field object at 0x7f14bde083d0>)]}
>>> dir(data['src'])
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'base_field', 'fields', 'is_target', 'postprocessing', 'preprocess', 'preprocessing', 'process']
ざっくり見てみると,
vars()
はそれぞれの変数に何が格納されているのかdict型で返しているのに対して,
dir()
は変数やクラスなどの名前をlist型で返してくれます.
参考文献
https://qiita.com/wakoit/items/659dd0fdbb16b214454f
https://docs.python.org/ja/3/library/functions.html