Medio Ambiente:
windows 10
Python 3.5
tensorflow 1.13.1
numpy 1.18.1
1. En primer lugar, descargue el código abierto modelo de buena pre-entrenamiento de Google. Utilizo este es BERT-Base, sin entubar (primera)
BERT-Base, sin entubar: 12 es-capa, 768-ocultos, 12 es-Heads, 110M Parámetros
BERT-Large, sin entubar : 24-Capa, 1024 ocultos-, 16-Heads, 340M Parámetros
BERT-Base, entubados : 12 es-capa, ocultos-768, 12 se-Heads, 110M Parámetros
2. referencia https://www.zybuluo.com/Team/note/1632532 ( https://zhuanlan.zhihu.com/p/91024786?utm_source=wechat_session&utm_medium=social&utm_oi=1035849572991401984 ) parte IV. Esa es la cifra a continuación:
3. Abra la github oficial de Nvidia, a parte de conversión de ellos eran parte de la modificación de parámetros.
En el que el código se implementa como sigue :( función es la de FP32 convertido a FP16)
1 importación tensorflow como tf 2 importación numpy como np 3 de tensorflow.contrib.framework.python.framework importación checkpoint_utils 4 de tensorflow.python.ops importación io_ops 5 de tensorflow.python.training.saver importación 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 por nombre, forma en var_list: 13 var = checkpoint_utils.load_variable (tf.flags.FLAGS.init_checkpoint, nombre) 14 recon_dtype = tf.float16 si var.dtype == np.float32 otro var.dtype 15 tf.get_variable (nombre, forma = forma, dtype = recon_dtype) 16 17 init_graph () 18 protector = tf.train.Saver (constructor = CastFromFloat32SaverBuilder ()) 19 con tf.Session () como sess: 20 saver.restore (sess, in_checkpoint_file) 21 protector. Guardar (sess, 'tmp.ckpt ' ) 22 23 tf.reset_default_graph () 24 25 init_graph () 26 protector = tf.train.Saver () 27 con tf.Session () como sess: 28 saver.restore (sess, ' tmp.ckpt ' ) 29 saver.save (sess, out_checkpoint_file) 30 31 32 clase CastFromFloat32SaverBuilder (BaseSaverBuilder): 33 # Basado en tensorflow.python.training.saver.BulkSaverBuilder.bulk_restore 34 def bulk_restore (self, filename_tensor, saveables, preferred_shard, 35 restore_sequentially): 36 restore_specs = [] 37 para saveable en saveables: 38 para spec en saveable.specs: 39 restore_specs.append ((spec.name, spec.slice_spec, spec.dtype)) 40 nombres, rebanadas, dtypes = zip (* restore_specs) 41 restore_dtypes = [tf.float32 si dtype.base_dtype == tf.float16 demás dtype para dtype en dtypes] 42 # información de impresión 43 parai en gama (len (restore_specs)): 44 de impresión (nombres [i], ' de ' , restore_dtypes [i], ' a ' , dtypes [i] .base_dtype) 45 con tf.device ( " CPU: 0 " ) : 46 restaurado = io_ops.restore_v2 ( 47 filename_tensor, nombres, rebanadas, restore_dtypes) 48 de retorno [tf.cast (r, dt.base_dtype) para r, dt en zip (restaurados, dtypes)] 49 50 51 si __name__ == '__main__ ' : 52 tf.flags.DEFINE_string ( " fp16_checkpoint " , " mrpc_output / fp16_model.ckpt " , " fp16 archivo punto de control " ) 53 tf.flags.DEFINE_string ( " init_checkpoint " , " bert_base / bert_model.ckpt " , " punto de control inicial archivo " ) 54 checkpoint_dtype_cast (tf.flags.FLAGS.init_checkpoint, tf.flags.FLAGS.fp16_checkpoint)
En el que, la función principal de los dos parámetros puede ser modificado. El primer modelo es el lugar al que desea convertir la salida final, y la segunda es la dirección de google el modelo que se descargue.