環境:
ウィンドウズ10
python 3.5
tensorflow 1.13.1
numpyの1.18.1
1.まず、Googleのオープンソースの良いプレトレーニングモデルをダウンロードしてください。私はこれが(最初の)BERT - ベース、Uncasedで使用します
BERT-ベース、 Uncased:12は、768-隠された、12層であり、110Mパラメータ・ヘッズで
BERT-大、Uncased:24レイヤ、1024隠され、16頭、340Mパラメータ
同棲BERT-ベース、:12は、レイヤです隠された-768、12で-ヘッズ、110Mパラメータ
2参照https://www.zybuluo.com/Team/note/1632532 ( https://zhuanlan.zhihu.com/p/91024786?utm_source=wechat_session&utm_medium=social&utm_oi=1035849572991401984)パートIV。それは以下の図です。
3.オープンは、それらの一部を変換するために、NVIDIAの公式githubのは、パラメータ変更の一部でした。
次のようにするコードが実装されている:(機能)FP16にFP32を変換することです
1つの インポートTFとしてtensorflow 2 インポートnumpyのはNPとして 3 から tensorflow.contrib.framework.python.frameworkのインポートcheckpoint_utils 4 から tensorflow.python.opsのインポートio_ops 5 から tensorflow.python.training.saver インポートBaseSaverBuilder 6 7 8 DEF checkpoint_dtype_cast(in_checkpoint_file 、out_checkpoint_file): 9 var_list = checkpoint_utils.list_variables(tf.flags.FLAGS.init_checkpoint) 10 11 DEF init_graph(): 12 以下のための名前、形状にvar_list: 13 VAR = checkpoint_utils.load_variable(tf.flags.FLAGS.init_checkpoint、名) 14 recon_dtype = tf.float16 場合 var.dtype == np.float32 他var.dtype 15 tf.get_variable(名前、形状=形状、DTYPE = recon_dtype) 16 17 init_graph() 18 セーバー= tf.train.Saver(ビルダー= CastFromFloat32SaverBuilder()) 19 のSESとしてtf.Session()を持つ: 20 saver.restore(SESの、in_checkpoint_file) 21 セーバー。 、(SESのを保存"tmp.ckpt ' ) 22 23 tf.reset_default_graph() 24 25 init_graph() 26 セーバー= tf.train.Saver() 27 のSESとしてtf.Session()を持つ: 28 saver.restore(SESの、' tmp.ckpt ' ) 29 (out_checkpoint_fileのSES)saver.save 30 31 32 クラスCastFromFloat32SaverBuilder(BaseSaverBuilder): 33 #tensorflow.python.training.saver.BulkSaverBuilder.bulk_restoreに基づいて 34 デフbulk_restore(自己、filename_tensor、saveables、preferred_shard、 35 restore_sequentially): 36 restore_specs = [] 37 用 saveable でsaveables: 38 のための仕様でsaveable.specs: 39 restore_specs.append((spec.name、spec.slice_spec、spec.dtype)) 40 名、スライス、dtypes =ジップ(* restore_specs) 41 restore_dtypes = [tf.float32 場合 dtype.base_dtype == tf.float16 他 DTYPE ため DTYPE にdtypes] 42 #印刷情報 43 のためのI における範囲(LEN(restore_specs)): 44 プリント(名前[i]は、' から'、restore_dtypes [i]は、' に' 、dtypes [I] .base_dtype) 45 tf.device有する(" CPU:0 " ) : 46 =回復io_ops.restore_v2( 47 filename_tensor、名前、スライス、restore_dtypes) 48 リターン [tf.cast(R、dt.base_dtype)のために、RをDT にジッパー(復元、dtypes)] 49 50 51 場合 __name__ == '__main__ " : 52 tf.flags.DEFINE_string(" fp16_checkpoint "、" mrpc_output / fp16_model.ckpt "、" FP16チェックポイント・ファイル" ) 53 tf.flags.DEFINE_string(" init_checkpoint "、" bert_base / bert_model.ckpt "、" 最初のチェックポイントファイル" ) 54 checkpoint_dtype_cast(tf.flags.FLAGS.init_checkpoint、tf.flags.FLAGS.fp16_checkpoint)
前記2つのパラメータの主な機能は変更することができます。最初のモデルは、あなたが最終的な出力を変換したい場所であり、第二は、あなたがダウンロードしたモデルをグーグルのアドレスです。