日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

代码实现tan graph model for classification_自定义 Estimator 实现(以BERT为例)

發(fā)布時(shí)間:2025/3/11 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码实现tan graph model for classification_自定义 Estimator 实现(以BERT为例) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文將主要介紹tensorflow 的Estimator 這個(gè)高級(jí)API,它的主要作用就是提出一個(gè)高級(jí)范式(paradigm),將模型的訓(xùn)練,驗(yàn)證,預(yù)測(cè),以及保存規(guī)范起來(lái),免去了tensorflow的Session.run 的操作,并且很好地結(jié)合了 tf.data.Dataset 作為數(shù)據(jù)處理的包裝,使得整個(gè)思路變得非常清晰。

Estimator 并沒(méi)有改變網(wǎng)絡(luò)結(jié)構(gòu)的定義,而是將訓(xùn)練,驗(yàn)證,測(cè)試的管理抽象起來(lái),并且簡(jiǎn)單化,形成一個(gè)范式,用戶可以通過(guò)實(shí)現(xiàn)對(duì)應(yīng)的部分,從而使得模型的管理便捷起來(lái)。

BERT的源碼實(shí)現(xiàn)采用的是TPU的estimator的方式,但是大家日常訓(xùn)練模型的時(shí)候,很多都無(wú)法使用得?上TPU,雖然 TPUEstimator 會(huì)自動(dòng)適配到CPU 或者 GPU 的普通 Estimator, 但是我在使用tensorflow==1.14.0的時(shí)候,會(huì)發(fā)現(xiàn)在訓(xùn)練過(guò)程中的logging無(wú)法獲得訓(xùn)練過(guò)程中的loss變化等,只有下圖的log信息。see github issue

具體改動(dòng)后的代碼詳見(jiàn):https://github.com/dongxiaohuang/TextClassifier_Transformer/blob/master/run_classifier_serving_gpu.py

這些信息對(duì)于debug來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,當(dāng)然可以通過(guò)增加log hook的方式定時(shí)打印需要的log,但是即使這樣日志還是多條才看能到一次loss。于是我就將 TPUEstimator 收到改成普通的 Estimator 實(shí)現(xiàn),并且成功地獲得正常的日志輸出。

本文將會(huì)介紹總體介紹 Estimator, 然后介紹各個(gè)component,并配以bert實(shí)現(xiàn)進(jìn)行講解。有問(wèn)題麻煩指出,謝謝。

Estimator 組成

首先我們創(chuàng)建一個(gè)estimator,它對(duì)外暴露了4個(gè)接口,分別是: train(), evaluate(), predict(), export_savedmodel(),對(duì)應(yīng)的是模型的訓(xùn)練,驗(yàn)證,預(yù)測(cè),以及導(dǎo)出。estimator 通過(guò)用戶實(shí)現(xiàn) model_fn 構(gòu)建模型,并且通過(guò) model_fn 的實(shí)現(xiàn)不同的mode(ModeKeys.TRAIN,ModeKeys.EVAL,ModeKeys.PREDICT),返回不同的EstimatorSpec。

對(duì)于 train, evaluate, predict 都需要傳入相應(yīng)的 input_fn, 代表訓(xùn)練集,驗(yàn)證集,以及測(cè)試集。input_fn 將返回features,以及l(fā)ables。具體的 input_fn 的將會(huì)單獨(dú)介紹,我們只需要知道它構(gòu)造 tf.data.Dataset, 作為estimator不同模式的數(shù)據(jù)源就行了。

def input_fn(dataset):... #manipulate dataset, extracting teh feature dict and the labelreturn feat_dict, label

我們可以通過(guò)不同hooks,在estimator執(zhí)行的不同階段,執(zhí)行自己的某些操作,例如增加log,或者是early stopping等。

使用 estimator 構(gòu)建模型

使用 estimator 構(gòu)建模型,你需要實(shí)現(xiàn) model_fn(features, labels, mode, params) -> tf.estimator.EstimatorSpec , 該函數(shù)有嚴(yán)格的函數(shù)簽名,并且將會(huì)hold 模型圖定義。

  • features:input_fn 返回的第一個(gè)參數(shù),即輸入數(shù)據(jù)的特征Tensor
  • labels: input_fn 返回的第二個(gè)參數(shù),即輸入數(shù)據(jù)的label
  • mode: string,根據(jù)這個(gè)mode (PREDICT, EVAL or TRAIN) 去決定我們要運(yùn)行 model_fn 中哪一部分的graph要被建立。我們會(huì)在 model_fn 中實(shí)現(xiàn)三種模式的不同的graph,然后通過(guò)estimator的不同的方法(train/evaluate/predict)被調(diào)用,執(zhí)行不同部分,而build 不同的graph。
  • params:一個(gè)參數(shù)的字典,與 estimator 的參數(shù)之一 params 對(duì)應(yīng),例如我們有一個(gè)params 的字典
params = {'buffer': 15000,'lstm_size': 100,'words': str(Path(DATADIR, 'vocab.words.txt')),'chars': str(Path(DATADIR, 'vocab.chars.txt')),'tags': str(Path(DATADIR, 'vocab.tags.txt')),'glove': str(Path(DATADIR, 'glove.npz')) }

我們要使用buffer,可以直接通過(guò) params['buffer'] 使用。當(dāng)然我們不使用這一參數(shù)也可以,我們可以通過(guò)構(gòu)建一個(gè) model_fn_builder() 將參數(shù)傳入這個(gè)builder中,最后返回 model_fn(),BERT中也是這么實(shí)現(xiàn)的,待會(huì)會(huì)具體介紹。

模型的 model_fn 的主要實(shí)現(xiàn)框架如下,通過(guò)features的輸入傳入模型,得到輸出,然后根據(jù)不同mode,實(shí)現(xiàn)特定輸出。Estimator是通過(guò) model_fn 進(jìn)行配置的,該函數(shù)構(gòu)建了tensorflow的圖,并且返回了足夠的信息使得模型可以進(jìn)行訓(xùn)練,驗(yàn)證,測(cè)試及導(dǎo)出。使用自定義的estimator只需要實(shí)現(xiàn)這個(gè)函數(shù)。大概的實(shí)現(xiàn)框架如下圖

def model_fn(features, labels, mode, params):# Define the inference graphgraph_outputs = some_tensorflow_applied_to(features)if mode == tf.estimator.ModeKeys.PREDICT:# Extract the predictionspredictions = some_dict_from(graph_outputs)return tf.estimator.EstimatorSpec(mode, predictions=predictions)else:# Compute loss, metrics, tensorboard summariesloss = compute_loss_from(graph_outputs, labels)metrics = compute_metrics_from(graph_outputs, labels)if mode == tf.estimator.ModeKeys.EVAL:return tf.estimator.EstimatorSpec(mode, loss=loss, eval_metric_ops=metrics)elif mode == tf.estimator.ModeKeys.TRAIN:# Get train operatortrain_op = compute_train_op_from(graph_outputs, labels)return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op)else:raise NotImplementedError('Unknown mode {}'.format(mode))

定義inference 圖

首先我們將根據(jù)我們的特征輸入,構(gòu)建我們的graph。下面的代碼主要是通過(guò)數(shù)據(jù)的features傳入 BERT模型, 然后獲得模型的loss, probabilities 等結(jié)果,然后通過(guò)預(yù)訓(xùn)練模型進(jìn)行初始化,具體原理參考BERT詳解。

# 正常圖構(gòu)造 input_ids = features["input_ids"] input_mask = features["input_mask"] segment_ids = features["segment_ids"] label_ids = features["label_ids"] is_real_example = None if "is_real_example" in features:is_real_example = tf.cast(features["is_real_example"], dtype=tf.float32) else:is_real_example = tf.ones(tf.shape(label_ids), dtype=tf.float32)(total_loss, per_example_loss, probabilities, predictions) = create_model(albert_config, is_training, input_ids, input_mask,segment_ids, label_ids, num_labels, use_one_hot_embeddings) # 模型參數(shù)通過(guò)預(yù)訓(xùn)練模型進(jìn)行初始化,fine-tuning tvars = tf.trainable_variables() initialized_variable_names = {} if init_checkpoint:(assignment_map, initialized_variable_names) = modeling.get_assignment_map_from_checkpoint(tvars, init_checkpoint)tf.train.init_from_checkpoint(init_checkpoint, assignment_map)

Train Mode

在訓(xùn)練模式的時(shí)候,EstimatorSpec需要返回三個(gè)參數(shù)

  • mode(所有模式都必須有的)
  • loss:訓(xùn)練的loss
  • train_op:訓(xùn)練的operation,一般是通過(guò) optimizer.minimise(loss)
if mode == tf.estimator.ModeKeys.TRAIN:train_op = optimization.create_optimizer(total_loss, learning_rate, num_train_steps, num_warmup_steps, False)output_spec = tf.estimator.EstimatorSpec(mode=mode,loss=total_loss,train_op=train_op)

Eval Mode

在 tf.estimator.ModeKeys.EVAL 模式下,我們需要返回

  • - mode
  • - loss
  • - eval_metric_ops: 評(píng)測(cè)的Metric operation 指標(biāo)。這是一個(gè)字典(metrics dictionary)的形式,key是評(píng)測(cè)指標(biāo)的名稱(string),value是tuple的形式,tuple由以下兩個(gè)tensor 組成:
  • 第一個(gè)元素是 value_op,它指的是真實(shí)最終的metrics value。
  • 第二個(gè)元素是 update_op,它指的是用來(lái)更新metrics value的tensor,為什么這樣設(shè)計(jì)是因?yàn)?#xff0c;我們通常在做驗(yàn)證的時(shí)候,數(shù)據(jù)不能一下子fit進(jìn)memory 或者其它原因,我們不能通過(guò)一次性在驗(yàn)證集上進(jìn)行驗(yàn)證,我們是通過(guò)mini batch的方式進(jìn)行評(píng)測(cè)的,而batch的方式就導(dǎo)致我們需要每驗(yàn)證一個(gè)batch就更新我們的metrics value,而不是單獨(dú)地使用某一個(gè)batch的metrics value作為結(jié)果。

其中 Metrics 是layers的一個(gè)特殊類,通常用于做evaluation:它的輸入是真是值 labels,以及預(yù)測(cè)值 predictions,可選項(xiàng)權(quán)重weights;輸出是metric 例如說(shuō)是 log-likelihood, accuracy,或者M(jìn)SE等。該輸出由兩個(gè)Tensor組成,update op:這每一個(gè) minibatch 都會(huì)計(jì)算; 然后是 value op:這個(gè)計(jì)算最后的metric value。所以我們可以借助metrics這個(gè)類,來(lái)計(jì)算我們需要的驗(yàn)證指標(biāo),例如列了常見(jiàn)了幾種metric的計(jì)算方式,其中 tf_metrics以及ref 里面實(shí)現(xiàn)了accuracy以及recall,f1等評(píng)測(cè)指標(biāo)。

'accuracy': tf.metrics.accuracy(labels=label_ids, predictions=predictions, weights=is_real_example) 'loss': tf.metrics.mean(values=per_example_loss, weights=is_real_example) 'Recall@5': metrics.streaming_sparse_recall_at_k(predictions, tf.cast(labels["class_idx"], tf.int64), 5) 'precision': tf_metrics.precision(tags, pred_ids, num_tags, indices, weights), 'recall': tf_metrics.recall(tags, pred_ids, num_tags, indices, weights), 'f1': tf_metrics.f1(tags, pred_ids, num_tags, indices, weights),

其中tf_metrics 可以通過(guò)以下指令安裝: pip install git+https://github.com/guillaumegenthial/tf_metrics.git

其中BERT的實(shí)現(xiàn)如下:

elif mode == tf.estimator.ModeKeys.EVAL:def metric_fn(per_example_loss, label_ids, predictions, is_real_example):accuracy = tf.metrics.accuracy(labels=label_ids, predictions=predictions, weights=is_real_example)loss = tf.metrics.mean(values=per_example_loss, weights=is_real_example)for metric_name, op in metrics.items(): # tensorboardtf.summary.scalar(metric_name, op[1])return {"eval_accuracy": accuracy,"eval_loss": loss,}eval_metric_ops = metric_fn(per_example_loss, label_ids, predictions, is_real_example)output_spec = tf.estimator.EstimatorSpec(mode=mode,loss=total_loss,eval_metric_ops=eval_metric_ops

Prediction Mode

prediction mode是最簡(jiǎn)單的模式,我們需要返回:

  • mode
  • predictions:這是一個(gè)字典,字典的key是我們要返回的tensor的名字,字典的value是我們要返回的tensor,例如說(shuō), 我們需要返回兩個(gè)tensor,分別是 probabilities, predictions, 我們將他們直接構(gòu)建一個(gè)字典,傳入predictions這個(gè)參數(shù)中。
_,top_3 = tf.nn.top_k(probabilities,k=3) output_spec = tf.estimator.EstimatorSpec(mode=mode,predictions={"probabilities": probabilities,"predictions": predictions,"top_3":top_3})

BERT的model_fn 實(shí)現(xiàn)

bert的 model_fn 實(shí)現(xiàn),并沒(méi)有使用到estimator傳入的params,而是通過(guò)構(gòu)建一個(gè) model_fn_builder, 將各種參數(shù)傳入其中,最后返回需要的 model_fn(features, labels, mode, params) 函數(shù)。

def model_fn_builder(albert_config, num_labels, init_checkpoint, learning_rate,num_train_steps, num_warmup_steps, use_one_hot_embeddings):def model_fn(features, labels, mode, params): # pylint: disable=unused-argument"""The `model_fn` for TPUEstimator."""tf.logging.info("*** Features ***")for name in sorted(features.keys()):tf.logging.info(" name = %s, shape = %s" % (name, features[name].shape))input_ids = features["input_ids"]input_mask = features["input_mask"]segment_ids = features["segment_ids"]label_ids = features["label_ids"]is_real_example = Noneif "is_real_example" in features:is_real_example = tf.cast(features["is_real_example"], dtype=tf.float32)else:is_real_example = tf.ones(tf.shape(label_ids), dtype=tf.float32)is_training = (mode == tf.estimator.ModeKeys.TRAIN)(total_loss, per_example_loss, probabilities, predictions) = create_model(albert_config, is_training, input_ids, input_mask,segment_ids, label_ids, num_labels, use_one_hot_embeddings)tvars = tf.trainable_variables()initialized_variable_names = {}if init_checkpoint:(assignment_map, initialized_variable_names) = modeling.get_assignment_map_from_checkpoint(tvars, init_checkpoint)tf.train.init_from_checkpoint(init_checkpoint, assignment_map)tf.logging.info("**** Trainable Variables ****")for var in tvars:init_string = ""if var.name in initialized_variable_names:init_string = ", *INIT_FROM_CKPT*"tf.logging.info(" name = %s, shape = %s%s", var.name, var.shape,init_string)output_spec = Noneif mode == tf.estimator.ModeKeys.TRAIN:train_op = optimization.create_optimizer(total_loss, learning_rate, num_train_steps, num_warmup_steps, False)output_spec = tf.estimator.EstimatorSpec(mode=mode,loss=total_loss,train_op=train_op)elif mode == tf.estimator.ModeKeys.EVAL:def metric_fn(per_example_loss, label_ids, predictions, is_real_example):accuracy = tf.metrics.accuracy(labels=label_ids, predictions=predictions, weights=is_real_example)loss = tf.metrics.mean(values=per_example_loss, weights=is_real_example)return {"eval_accuracy": accuracy,"eval_loss": loss,}eval_metric_ops = metric_fn(per_example_loss, label_ids, predictions, is_real_example)output_spec = tf.estimator.EstimatorSpec(mode=mode,loss=total_loss,eval_metric_ops=eval_metric_ops)else:output_spec = tf.estimator.EstimatorSpec(mode=mode,predictions={"probabilities": probabilities,"predictions": predictions})return output_specreturn model_fn

初始化Estimator

在定義完estimator之后,就可以初始化estimator了,estimator有四個(gè)參數(shù):

  • model_fn:我們上面定義的模型model_fn
  • model_dir:模型保存的路徑,如果沒(méi)有設(shè)置,會(huì)使用config中的 model_dir 參數(shù)的值,如果兩個(gè)都設(shè)置了,必須一致,如果兩個(gè)都沒(méi)有設(shè)置,那么將會(huì)保存在一個(gè)temp的路徑下。
  • config:estimator的config,下面會(huì)具體介紹
  • params=None:params,字典形式,將會(huì)傳給model_fn的params參數(shù)
  • warm_start_from:string,checkpoint or SavedModel的文件路徑用來(lái)warm_start

RunConfig

Runconfig主要用來(lái)設(shè)置模型保存的路徑model_dir, 以及模型保存的頻率 save_checkpoints_steps or save_checkpoints_secs (默認(rèn)是600 seconds 保存一次,如果兩個(gè)參數(shù)都設(shè)置未None,則不保存),以及Session的設(shè)置 session_config,例如說(shuō)XLA是否開(kāi)啟等等。 或者說(shuō)分布式策略設(shè)置train_distributeor eval_distribute 等等。

config = tf.compat.v1.ConfigProto()if FLAGS.horovod:tf.compat.v1.logging.info("Multi-GPU training with TF Horovod")tf.compat.v1.logging.info("hvd.size() = %d hvd.rank() = %d", hvd.size(), hvd.rank())global_batch_size = FLAGS.train_batch_size * FLAGS.num_accumulation_steps * hvd.size()master_process = (hvd.rank() == 0)hvd_rank = hvd.rank()config.gpu_options.visible_device_list = str(hvd.local_rank())if FLAGS.use_xla:config.graph_options.optimizer_options.global_jit_level = tf.compat.v1.OptimizerOptions.ON_1run_config = tf.estimator.RunConfig(model_dir=FLAGS.output_dir if master_process else None,session_config=config,save_checkpoints_steps=FLAGS.save_checkpoints_steps if master_process else None,keep_checkpoint_max=1)

實(shí)例化代碼

estimator = tf.estimator.Estimator(model_fn=model_fn,config=run_config,params=None)

Estimator使用

estimator初始化完了之后,我們就很容易通過(guò)調(diào)用它的train 進(jìn)行訓(xùn)練, 調(diào)用 evaluate進(jìn)行驗(yàn)證, 調(diào)用predict 進(jìn)行預(yù)測(cè),同時(shí)調(diào)用export_saved_model導(dǎo)出SavedModel。通常我們還可以使用tf.estimator.train_and_evaluate()進(jìn)行模型的訓(xùn)練及驗(yàn)證(推薦)。

訓(xùn)練

訓(xùn)練的腳本很簡(jiǎn)單,我們傳入訓(xùn)練的input_fn(暫不cover在這個(gè)tutorial),以及hooks(下面會(huì)介紹),以及saving_listeners(每次checkpoint保存之后執(zhí)行)。 train( input_fn, hooks=None, steps=None, max_steps=None, saving_listeners=None ) 具體的bert訓(xùn)練的腳本就是如下:

num_train_steps = int(len(train_examples) / FLAGS.train_batch_size * FLAGS.num_train_epochs) estimator.train(input_fn=train_input_fn,max_steps=num_train_steps,hooks=[early_stopping_hook])

驗(yàn)證

evaluate(input_fn, steps=None, hooks=None, checkpoint_path=None, name=None )

evaluate 函數(shù)將傳入驗(yàn)證集的input_fn,驗(yàn)證的步數(shù)steps, hooks,以及模型的 checkpoint_path 注意如果:

  • steps:驗(yàn)證步數(shù),如果未None,則運(yùn)行到input_fn raises an end-of-input exception.
  • checkpoint_path:需要驗(yàn)證的模型的路徑,如果 None, 會(huì)使用 model_dir 中最新的checkpoint。如果 model_dir 不存在或者沒(méi)有checkpoints,會(huì)使用新初始化的參數(shù)下去驗(yàn)證,在我們bert例子中,就是用預(yù)訓(xùn)練的模型而不是fine-tuning的模型下去驗(yàn)證。

函數(shù)返回值是一個(gè)字典,即我們定義在 tf.estimator.ModeKeys.EVAL 模式下的字典結(jié)果。

result = estimator.evaluate(input_fn=eval_input_fn, steps=None, checkpoint_path=None) for key in sorted(result.keys()):tf.logging.info(" %s = %s", key, str(result[key]))

預(yù)測(cè)

predict共有五個(gè)參數(shù)

predict(input_fn, predict_keys=None, hooks=None, checkpoint_path=None,yield_single_examples=True )
  • input_fn:測(cè)試集的傳入input_fn
  • predict_keys:list,如果未None,則返回所有的tf.estimator.EstimatorSpec里的 predictions 的所有key的值,否則,則只返回 predict_keys 里的key的值,過(guò)濾掉其他的keys。
  • checkpoint_path:這個(gè)作用和evaluate的作用一致,如果沒(méi)指定,則使用 model_dir 里最新的checkpoint,還是沒(méi)有的話,則使用新初始化的參數(shù)模型進(jìn)行預(yù)測(cè)。
  • yield_single_examples:True 返回的結(jié)果以單條呈現(xiàn),否則則按照f(shuō)eed進(jìn)predictor的batch返回。

返回的是一個(gè)generator,yield 的是values of predictions tensors,其為字典形式,根據(jù)EstimatorSpec中predictions來(lái)的。我們要取用某個(gè)值時(shí),跟平常字典使用類似。 例如我們要取得我們bert中的 probabilities 的值,我們可以采用以下的方式:

result = estimator.predict(input_fn=predict_input_fn) for (i, (example, prediction)) in enumerate(zip(predict_examples, result)):probabilities = prediction["probabilities"]

導(dǎo)出

tensorflow具有三種模型保存的方式

  • checkpoint
  • SavedModel
  • frozen graph

之后會(huì)專門出一篇介紹, 并介紹如何使用SavedModel進(jìn)行single example和batch預(yù)測(cè)。我們這邊主要講一下 export_saved_model API,

export_saved_model(export_dir_base, serving_input_receiver_fn, assets_extra=None, as_text=False,checkpoint_path=None, experimental_mode=ModeKeys.PREDICT )
  • export_dir_base: 導(dǎo)出的路徑,導(dǎo)出SavedModel
  • serving_input_receiver_fn: 一個(gè)無(wú)參函數(shù),返回 tf.estimator.export.ServingInputReceiver or tf.estimator.export.TensorServingInputReceiver.具體的作用就是定義我們模型的輸入placeholders。
  • assets_extra: 一個(gè)字典說(shuō)明如何在SavedModel 路徑下產(chǎn)生assets.extra 文件夾,None 代表不產(chǎn)生。
  • as_text: 是否將 SaveModel 保存為 Text 格式
  • checkpoint_path: 要被導(dǎo)出的checkpoint的路徑,如果是None,則使用 model_dir 里最新的checkpoint
  • experimental_mode: tf.estimator.ModeKeys 值,代表哪一個(gè)Mode要被exported。正常來(lái)說(shuō)默認(rèn)是 ModeKeys.PREDICT

具體可以參考:

def serving_input_fn():label_ids = tf.placeholder(tf.int32, [None], name='label_ids')input_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_ids')input_mask = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='input_mask')segment_ids = tf.placeholder(tf.int32, [None, FLAGS.max_seq_length], name='segment_ids')input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn({'label_ids': label_ids,'input_ids': input_ids,'input_mask': input_mask,'segment_ids': segment_ids,})()return input_fnif FLAGS.do_export:estimator._export_to_tpu = Falseestimator.export_saved_model(FLAGS.output_dir, serving_input_fn)

train_and_evaluate

這個(gè)工具函數(shù)提供了一個(gè)estimator的train,evaluate,和export(可選)的接口。

所有訓(xùn)練相關(guān)的配置都在 train_spec 中配置(包括training input_fn 和 training max steps, etc),所有的驗(yàn)證相關(guān)的配置都在 eval_spec 中(evaluation input_fn 和 steps, etc),

這個(gè)函數(shù)函數(shù)的好處在于他將train 和 evaluate結(jié)合起來(lái),然后在訓(xùn)練和驗(yàn)證之間的轉(zhuǎn)換的時(shí)候,不需要銷毀和重建graph,而之前的 estimator.train 和 estimator.evaluate 是異步的。使用這個(gè)函數(shù)之后,就能夠很高效地實(shí)現(xiàn)訓(xùn)練和驗(yàn)證集合。并且它支持分布式訓(xùn)練等。 此外它支持導(dǎo)出最優(yōu)模型的配置 BestExporter。

具體參考下面BERT的使用:

if FLAGS.do_train:train_spec = tf.estimator.TrainSpec(input_fn=train_input_fn,max_steps=num_train_steps,hooks=[early_stopping_hook])exporter = tf.estimator.BestExporter(serving_input_receiver_fn= serving_input_fn,exports_to_keep=2)eval_spec = tf.estimator.EvalSpec(input_fn=eval_input_fn,steps=None, # steps=None, evaluate on the entire eval datasetexporters=exporter)tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)

注意:EvalSpec中的 steps需要顯性設(shè)置未None, 否則默認(rèn)是100。并不是在整個(gè)驗(yàn)證集上面進(jìn)行驗(yàn)證。

hooks

我們可以為訓(xùn)練 estimator.train() 和測(cè)試 estimator.evaluate() 增加hooks。hooks 顧名思義,就是鉤子,指的是如果一個(gè)事件發(fā)生了,先被特定hook捕獲,然后執(zhí)行hook的操作,然后在傳入下個(gè)pipeline。也即這項(xiàng)技術(shù)就是提供了一個(gè)入口,能夠針對(duì)不同的消息或者API在執(zhí)行前,先執(zhí)行你的操作,你的操作也稱為「鉤子函數(shù)。

常見(jiàn)的操作有

  • early_stopping_hooks

我們可以通過(guò)tf.estimator.experimental.stop_if_no_decrease_hook 或者 tf.contrib.estimator.stop_if_no_increase_hook 實(shí)現(xiàn)early stopping hook。比如說(shuō)eval_loss 多少個(gè)steps都不下降,那么我們啟動(dòng)early stopping,或者說(shuō) f1 在多少個(gè)steps都不上升,那么我們進(jìn)行early stopping。因?yàn)?hook somehow 假設(shè)模型 model’s eval_dir 已經(jīng)存在,所以我們需要在其未存在的時(shí)候提前創(chuàng)建路徑。

具體參考下面的代碼:

Path(estimator.eval_dir()).mkdir(parents=True, exist_ok=True) early_stopping_hook = tf.estimator.experimental.stop_if_no_decrease_hook(estimator=estimator,metric_name='eval_loss',max_steps_without_decrease=3*FLAGS.save_checkpoints_steps,eval_dir=None,min_steps=0,run_every_secs=None,run_every_steps=FLAGS.save_checkpoints_steps)

或者是

Path(estimator.eval_dir()).mkdir(parents=True, exist_ok=True) hook = tf.contrib.estimator.stop_if_no_increase_hook(estimator, 'f1', 500, min_steps=8000, run_every_secs=120)
  • LoggingHooks
logging_hook = tf.train.LoggingTensorHook({"loss": total_loss}, every_n_iter=10)

然后將我們這個(gè)hook加到

estimator.train(input_fn=train_input_fn,max_steps=num_train_steps,hooks=[early_stopping_hook, logging_hook])

或者是

train_spec = tf.estimator.TrainSpec(input_fn=train_input_fn,max_steps=num_train_steps,hooks=[early_stopping_hook, logging_hook])

ref

  • https://towardsdatascience.com/first-contact-with-tensorflow-estimator-69a5e072998d
  • https://arxiv.org/pdf/1708.02637.pdf
  • https://towardsdatascience.com/an-advanced-example-of-tensorflow-estimators-part-1-3-c9ffba3bff03
  • https://guillaumegenthial.github.io/serving-tensorflow-estimator.html
  • https://github.com/tensorflow/docs/blob/master/site/en/guide/estimator.ipynb
  • https://b23.tv/av80286594/p1
  • https://guillaumegenthial.github.io/introduction-tensorflow-estimator.html
  • https://github.com/NVIDIA/DeepLearningExamples/tree/master/TensorFlow/LanguageModeling/BERT
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的代码实现tan graph model for classification_自定义 Estimator 实现(以BERT为例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久草影视在线 | 欧美日韩91 | 亚洲欧美日韩不卡 | 日韩在线大片 | 欧美精品一二三 | 中文字幕在线观看视频免费 | 国产女人40精品一区毛片视频 | 亚洲精品玖玖玖av在线看 | 久久免费资源 | 国产精品美女久久久久久久网站 | 中文字幕在线观看一区二区 | 99精品国产高清在线观看 | 亚洲精品国产精品乱码不99热 | 日韩国产在线观看 | 欧美久久久久久久久中文字幕 | 亚洲成aⅴ人片久久青草影院 | 超碰在线中文字幕 | 天天干天天天 | 天天综合网 天天 | 日日操夜 | 三级av免费看 | 91麻豆传媒 | 久久少妇av | 国产精品入口麻豆www | 在线观看中文字幕dvd播放 | 精品黄色在线观看 | 欧美一级视频一区 | 永久免费av在线播放 | 中文字幕在线观看第二页 | 国产精品麻 | 成人毛片100免费观看 | 亚洲精品国偷拍自产在线观看 | 日韩天堂在线观看 | av中文字幕网站 | 九九热视频在线免费观看 | 国产一区在线不卡 | 国产一区在线免费 | 国产在线观看免费 | 伊人va| 久久99久久99久久 | 成年人黄色在线观看 | 亚洲区精品视频 | 欧美a影视 | 亚洲精品久久在线 | 麻花豆传媒一二三产区 | 97av视频| 亚洲在线视频免费观看 | 亚洲精品国产高清 | 天天干,夜夜操 | 欧美一级片 | 国产色a在线观看 | 久久精品免费看 | 日韩精品 在线视频 | 亚洲在线日韩 | 国产精品激情偷乱一区二区∴ | 91热在线 | 天天干天天操天天操 | 色黄www小说 | 在线观看黄网站 | 99色视频在线 | 黄色激情网址 | 欧美日韩精 | 高清av免费一区中文字幕 | 日本黄色免费播放 | 狠狠躁18三区二区一区ai明星 | 欧美中文字幕第一页 | 久久在现 | 91中文字幕 | 成人一区电影 | 黄在线免费看 | 黄色官网在线观看 | 日韩在线电影观看 | 亚洲精品久久久久中文字幕m男 | 国产精品欧美一区二区三区不卡 | 久综合网| 免费看91的网站 | 免费观看丰满少妇做爰 | av网站大全免费 | 男女拍拍免费视频 | 国内视频一区二区 | 黄色在线观看网站 | 婷婷久久网 | 久久久婷| 人人超碰免费 | 99久久精品国产免费看不卡 | 91精品少妇偷拍99 | 99久热在线精品视频观看 | 久久久久女教师免费一区 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 日韩色爱| 国产福利91精品一区二区三区 | 美女久久一区 | 成人99免费视频 | 九九热在线视频 | 超碰成人av | 国产视频精选在线 | 九九99| 日韩精品欧美精品 | 国产综合香蕉五月婷在线 | 天天射网站 | 中文字幕视频一区二区 | 在线播放日韩av | 在线视频观看亚洲 | 天堂av在线免费 | 欧美天天射 | 久久精品www人人爽人人 | www久久精品 | 成人在线视频免费看 | 婷婷综合网 | 成 人 黄 色 免费播放 | 国产99区 | 欧美一二区视频 | 亚洲成人中文在线 | 欧日韩在线视频 | 久久香蕉影视 | 四虎8848免费高清在线观看 | 亚洲禁18久人片 | 久草精品在线 | 午夜少妇av | 色综合久久99 | 日韩国产在线观看 | 久草手机视频 | 国产精品久久一 | 99热精品国产一区二区在线观看 | 欧美亚洲一区二区在线 | 伊甸园永久入口www 99热 精品在线 | 久久99国产精品自在自在app | 成x99人av在线www | 97超碰免费在线观看 | 亚洲动漫在线观看 | 日韩有码专区 | 午夜在线观看一区 | 欧美精品久久久久久久久久 | 91精品推荐 | 337p欧美 | 久久精品欧美一 | 久久国内免费视频 | 黄色的网站在线 | 午夜性色 | 91最新视频在线观看 | 亚洲成av人片在线观看 | 中文字幕亚洲高清 | 在线va网站 | 天天鲁一鲁摸一摸爽一爽 | 91热视频在线观看 | 国产精品免费视频观看 | 808电影 | 2021国产精品视频 | 最近免费中文字幕mv在线视频3 | 新版资源中文在线观看 | 久久久久久看片 | 日本特黄特色aaa大片免费 | 国产精品精品国产色婷婷 | av电影在线播放 | 四虎在线免费视频 | 深爱五月激情五月 | 久久精品国产精品亚洲 | 91少妇精拍在线播放 | 免费黄av | 特片网久久 | 成片免费观看视频大全 | 色婷av| 中文字幕 国产精品 | 国产美女精品人人做人人爽 | 免费视频三区 | 成人av电影在线观看 | 中文字幕免费国产精品 | 久久精品激情 | 黄色在线免费观看网站 | 在线观看香蕉视频 | 久久撸在线视频 | 久青草国产在线 | 欧美二区在线播放 | 婷婷五综合| 亚洲在线不卡 | 亚洲精品小视频在线观看 | 免费一级特黄录像 | 久草视频播放 | 国产成人久久精品77777 | 天天色天天色 | 国产只有精品 | 一区二区三区三区在线 | 夜色成人av | 亚洲精品一区二区18漫画 | 开心激情网五月天 | 免费成人在线观看视频 | www.久久99| 欧美精品久久久久久久 | 天天草天天爽 | 日韩在线视频在线观看 | 成人av在线网 | 成人观看视频 | 天天爽天天爽 | 狠狠操电影网 | 日韩欧美亚州 | 天堂v中文 | 成人免费中文字幕 | 九月婷婷人人澡人人添人人爽 | 天天插日日操 | 在线精品视频免费播放 | 国产专区一 | 日韩视频一区二区三区在线播放免费观看 | 欧美福利视频一区 | 一级片黄色片网站 | 中文国产在线观看 | 欧美激情视频一区 | 日韩在线免费观看视频 | 婷婷成人在线 | 最近中文字幕大全中文字幕免费 | 一级黄色片在线 | 久久久国产99久久国产一 | 久久成人高清视频 | 国产福利精品视频 | 国内小视频在线观看 | 69精品视频在线观看 | 一区二区三区日韩视频在线观看 | 在线成人av | 中文字幕91在线 | 日操干 | 婷婷在线色 | 久久久久国产精品一区 | 天天操天天弄 | 欧美激情精品久久久久久免费 | 久久久久网址 | 亚洲天堂在线观看完整版 | 91九色在线| 午夜视频在线瓜伦 | 久久短视频 | 国产精品96久久久久久吹潮 | 激情开心站 | 97超碰福利久久精品 | 在线观看视频h | 成人久久18免费网站图片 | 欧美日韩在线观看不卡 | 久久久久亚洲精品中文字幕 | 国产香蕉视频在线播放 | 色资源在线观看 | 97国产精品 | 亚洲精品字幕在线 | 二区三区在线 | 97视频在线观看视频免费视频 | 国产超碰在线观看 | 久久久午夜视频 | 不卡视频一区二区三区 | 99精品观看 | 亚洲日韩欧美一区二区在线 | 日韩视频在线观看免费 | 在线色视频小说 | 亚洲精品男人天堂 | 国产不卡片 | www在线免费观看 | 五月天天在线 | 国产精品乱码一区二三区 | 免费视频一二三区 | 成人黄色小说网 | av福利在线 | 精品视频久久久久久 | 亚洲自拍av在线 | 久久视了 | 91精品欧美一区二区三区 | 91福利影院在线观看 | 97操操| 中文字幕在线观看免费观看 | 91超碰在线播放 | 国产h片在线观看 | 97精品超碰一区二区三区 | 色婷婷综合久久久 | 草久久久久 | 激情欧美一区二区免费视频 | 国产精品都在这里 | 精品av在线播放 | 丁香五月网久久综合 | 激情影音先锋 | 国产视频久久久久 | 九九九九九国产 | 人人擦| 色干干 | 亚洲成人资源在线观看 | 99视频在线观看一区三区 | 九九久久成人 | 91在线精品秘密一区二区 | 久草在线手机观看 | 丁香五月亚洲综合在线 | 美女国产在线 | 久久免费电影网 | 亚洲成人999 | 亚洲黄色影院 | 国产精品久久久久久久久久久杏吧 | 国产成人亚洲在线观看 | 日本三级人妇 | 国产精品美女久久 | 五月婷婷六月丁香激情 | 日韩中文字幕免费在线观看 | 亚洲片在线资源 | 久久精品看 | 视频国产 | 六月天综合网 | 在线免费黄色av | 日韩av专区| 天天综合色天天综合 | 欧美a√在线 | 丁香高清视频在线看看 | 亚洲国产大片 | 亚洲精品国精品久久99热一 | 91天天视频 | 超碰av在线播放 | 999ZYZ玖玖资源站永久 | 欧美黑人xxxx猛性大交 | 日日夜夜天天射 | 日韩在线观看第一页 | 免费av高清 | 精品国产免费观看 | 人人天天夜夜 | 婷婷丁香自拍 | 日韩电影在线一区二区 | 国产精品久久久久久久久久久杏吧 | 精品久久久久久久久久 | 97碰碰碰| 国产精品麻豆91 | 九九热视频在线播放 | 日韩av影视在线 | 中文字幕免费看 | 国产97在线视频 | 欧美另类高清 | 在线日韩三级 | 96久久欧美麻豆网站 | 精品久久久久免费极品大片 | 91在线精品一区二区 | 欧美成人中文字幕 | 日韩成人免费在线电影 | 五月天亚洲激情 | 日韩黄色免费 | 97精品视频在线播放 | 91完整版观看 | 欧美日韩久久不卡 | 91成人小视频 | 中文在线中文资源 | 国产精品黄色影片导航在线观看 | 中文字幕免费一区二区 | 黄色在线观看免费网站 | 国产精品18久久久久白浆 | 六月婷色 | 久久国产免费视频 | 国产视频资源在线观看 | 成年人免费在线播放 | 中文在线a√在线 | 伊人开心激情 | 久久久久久久久久亚洲精品 | www五月 | 色五丁香| 日本爽妇网| 成年人在线免费看视频 | 精品少妇一区二区三区在线 | 欧美日韩中文国产一区发布 | 国产精品久久久久久久久久久久午夜片 | 91在线小视频 | 丁香婷婷激情国产高清秒播 | 香蕉视频91 | 日韩精品一区二区久久 | 久久久精品二区 | 久久精选视频 | 四川bbb搡bbb爽爽视频 | 久久国产午夜精品理论片最新版本 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产a视频免费观看 | 免费观看av网站 | 91精品免费在线观看 | 欧美极度另类性三渗透 | 久久久久久久网站 | 在线中文字幕视频 | 不卡的av电影 | 在线a人v观看视频 | 国产精品一码二码三码在线 | 欧美精品久久久久性色 | 视频在线观看亚洲 | 午夜视频在线观看一区二区三区 | 久久狠狠一本精品综合网 | 又粗又长又大又爽又黄少妇毛片 | 欧美性做爰猛烈叫床潮 | 国产精品av久久久久久无 | 亚洲欧洲精品视频 | av在线播放一区二区三区 | 中文字幕在线观看第二页 | 久草在线视频中文 | 91九色在线观看 | 国内久久久久久 | 人人爽人人爽人人片 | 天天操福利视频 | 99免费| 国产一区高清在线观看 | 欧美视频www | 日韩中文字幕免费看 | www.久久久com| 四虎影视成人精品国库在线观看 | 日韩精品一区二区三区免费视频观看 | 婷婷www| 中文字幕资源网 国产 | 久久99精品久久久久久 | 91久久精品一区二区二区 | 精品欧美一区二区精品久久 | 五月婷婷影视 | 韩国精品福利一区二区三区 | 天天干夜夜夜操天 | 国产高清免费在线播放 | av电影免费| 99热高清| 最近高清中文字幕 | 久久成人精品电影 | 中文字幕免费观看视频 | 在线观看国产麻豆 | 久久精品视频国产 | 成人久久影院 | 久久免费大片 | 国产一区二区手机在线观看 | 亚洲欧美日韩不卡 | 亚洲三级黄色 | 国产一区二区成人 | 91精品国产一区二区三区 | 免费看的黄色 | 成人一区二区三区在线 | 在线国产片 | 91最新地址永久入口 | 在线高清 | 色婷婷狠狠五月综合天色拍 | 在线有码中文 | 日韩免费一级电影 | 亚洲,播放| 五月天丁香亚洲 | 一区二区三区免费在线 | 日本黄色大片免费看 | 免费在线观看午夜视频 | 香蕉视频亚洲 | 日本午夜在线亚洲.国产 | 国语麻豆| www.国产在线观看 | 免费在线观看不卡av | 久久精品精品电影网 | 一本色道久久精品 | 500部大龄熟乱视频 欧美日本三级 | 久久久久亚洲国产精品 | 激情五月***国产精品 | 天天色天天干天天 | 91大神在线看 | 久久老司机精品视频 | 2022久久国产露脸精品国产 | 2019av在线视频 | 日本丶国产丶欧美色综合 | 在线观看日韩精品 | 349k.cc看片app| 91中文在线观看 | 美女网站视频一区 | 久久久久国产一区二区 | av色图天堂网 | 少妇bbw撒尿 | 国产精品国产三级国产 | 人人射网站| 中文字幕免费看 | 色婷婷综合久久久久 | 在线观看av免费观看 | 婷婷在线综合 | 国产.精品.日韩.另类.中文.在线.播放 | 久久午夜电影 | 日韩,中文字幕 | 亚洲激情电影在线 | 久热免费在线观看 | 亚洲成人一二三 | 在线观看一区 | 久久精品国产久精国产 | 激情伊人五月天 | 99国产精品久久久久久久久久 | 免费毛片aaaaaa | 四虎在线观看网址 | 伊人婷婷色| 狠狠操狠狠干天天操 | 成年人毛片在线观看 | 波多野结衣久久精品 | 一级片免费观看视频 | 久久久www | 色综合天天天天做夜夜夜夜做 | 在线精品亚洲一区二区 | 亚洲国产精品va在线看黑人动漫 | 综合激情| 91久久国产露脸精品国产闺蜜 | 午夜国产一区二区三区四区 | 丁香婷婷久久 | 久久99国产综合精品 | 久久免费福利视频 | 久久久综合香蕉尹人综合网 | 国产精品第 | 国产不卡av在线播放 | 99tvdz@gmail.com| 久久精品99国产精品酒店日本 | 免费三级影片 | 久久综合久久88 | 狠狠搞,com | 最近免费中文视频 | 国产一区二区三区高清播放 | 婷婷久久综合网 | 在线免费观看黄色大片 | 欧美日韩一区二区在线观看 | 在线观看深夜视频 | www久草| 人人澡人人爽欧一区 | 日日爽夜夜操 | 欧美在线久久 | 亚洲va欧洲va国产va不卡 | 久久96国产精品久久99漫画 | 久久av影视 | 国产在线播放观看 | 久久毛片网 | 99 久久久久 | 亚洲欧洲日韩在线观看 | 啪啪免费视频网站 | 狠狠操操操 | 国产淫片免费看 | 天天插天天干天天操 | 色婷婷色 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 麻豆影视网站 | 天天操天天操天天操天天操 | av在线一级| 一区二区三区久久 | 亚洲黄色在线免费观看 | 久热精品国产 | 免费观看成人网 | 久草国产在线观看 | 超碰在线免费97 | 久久久久综合网 | 日韩免费电影在线观看 | 人人干狠狠操 | 色网站在线免费观看 | 久久这里只有精品9 | 久久视奸 | 免费日韩电影 | 在线观看中文 | 黄色aa久久 | 奇米影视在线99精品 | 国产精品都在这里 | 福利视频一区二区 | 精品久久久久久久久中文字幕 | 中文字幕在 | 国产在线视频资源 | 色婷婷在线观看视频 | 国产精品99久久久 | 97人人添人澡人人爽超碰动图 | 亚洲粉嫩av | 在线观看免费黄色 | www91在线观看 | 国产精品电影一区 | 久久99热这里只有精品 | 日日干美女 | 亚洲a资源 | 黄色一级免费网站 | 国产韩国日本高清视频 | 国产精品无 | 国产96在线 | 麻豆视频免费看 | 在线香蕉视频 | 日本成人a | 国产精品激情偷乱一区二区∴ | 中文字幕第一页在线播放 | 中文字幕在线观看播放 | 日本公妇在线观看 | 国产日韩欧美在线观看 | 日韩成人免费在线 | 中文字幕免费高清在线 | 亚洲精品国产精品国 | av不卡中文 | 91成人精品在线 | 亚洲欧美国产日韩在线观看 | 国产第一页福利影院 | 97久久精品午夜一区二区 | 色99中文字幕 | 狠狠干狠狠操 | 黄色小视频在线观看免费 | 精品久久久久免费极品大片 | 国产尤物在线 | 久久试看| 美女视频黄在线 | 麻豆国产网站 | 色com| 人人爽人人爽人人 | 天天操天天操 | 久久久久成人免费 | 波多野结衣视频一区二区三区 | 五月婷婷综合在线 | 国产一级二级在线播放 | 天天干天天操天天爱 | 九九视频热 | 99在线视频网站 | 91成人精品国产刺激国语对白 | 色中射| 欧美一级免费黄色片 | 国产综合小视频 | 亚洲电影成人 | 国产v在线播放 | 国产 亚洲 欧美 在线 | 久久尤物电影视频在线观看 | av官网在线 | 日韩在线观看一区二区 | 欧美午夜理伦三级在线观看 | 中文在线8新资源库 | 91av综合 | 一区二区三区高清不卡 | 六月激情丁香 | 99久久99视频只有精品 | 国产精品欧美精品 | 亚洲国产网址 | 五月天中文字幕mv在线 | 综合天天网| 亚洲精品动漫久久久久 | 日韩一级理论片 | 免费69视频 | 久久久国产精品成人免费 | 久久高清 | 日韩中文字幕免费在线播放 | av动态图片 | 中文字幕久久精品亚洲乱码 | 亚洲黄色网络 | 在线观看麻豆av | 99视频在线看 | 亚洲精品黄色 | 精品国产精品一区二区夜夜嗨 | 亚洲精品国产精品久久99 | 国产亚洲精品日韩在线tv黄 | 蜜臀av性久久久久av蜜臀妖精 | 中文字幕丝袜一区二区 | 激情偷乱人伦小说视频在线观看 | 色婷婷综合久色 | 久爱精品在线 | 久久精品九色 | 国产精品ssss在线亚洲 | 日韩手机在线观看 | 日韩免费一区二区在线观看 | 日本不卡一区二区三区在线观看 | 天天躁日日躁狠狠躁 | 少妇性xxx | 亚洲动漫在线观看 | 精品9999| a在线免费观看视频 | 国产成人亚洲在线电影 | 91免费高清视频 | 97精品国产97久久久久久久久久久久 | 精品国产一区二区在线 | 精品国产自在精品国产精野外直播 | 国产精品午夜8888 | 久草视频资源 | 日韩高清一区在线 | 欧美日韩精品在线免费观看 | 国产小视频免费观看 | 久久天天操 | 久久久亚洲麻豆日韩精品一区三区 | 久久久久久国产精品免费 | 久久久官网 | 99久久精品一区二区成人 | 精品国产欧美一区二区三区不卡 | 99热精品国产一区二区在线观看 | 国产精品美女999 | 亚洲国产精品成人av | 国产破处视频在线播放 | 国产精品视频免费 | 久久久久久久久久久久亚洲 | 2023av在线| 中文字幕专区高清在线观看 | 亚洲高清av | 黄色特级毛片 | 国产理论在线 | 日本精品中文字幕在线观看 | 在线看片一区 | 欧美成人黄色片 | 91精品国产自产在线观看永久 | 黄色av电影在线 | 国产日韩欧美在线一区 | 人人藻人人澡人人爽 | 最近2019中文免费高清视频观看www99 | 欧美乱熟臀69xxxxxx | 国产一二区免费视频 | 97夜夜澡人人爽人人免费 | 亚洲男男gaygayxxxgv | 国产香蕉在线 | 成人免费观看视频网站 | 久久视屏网 | 日韩99热 | 免费日韩 精品中文字幕视频在线 | 91免费看黄| 高清av免费看| 久久午夜剧场 | 午夜精品久久久久久久久久久久 | 在线播放日韩 | 91精品视频网站 | 国产精品1区2区在线观看 | 日韩在线中文字幕 | 一区二区亚洲精品 | 99这里精品| 国产精品久久久久久久久久免费 | 日韩动态视频 | 国产精品麻豆果冻传媒在线播放 | 亚洲精品一区二区三区新线路 | 日韩免费看的电影 | 综合影视 | 日韩av手机在线看 | 在线看黄色的网站 | 中文字幕在线观看完整版 | 久草精品在线播放 | 国产资源在线观看 | 欧美成人xxxx | 97视频免费观看 | 久久婷婷色综合 | 午夜在线免费观看 | 国产明星视频三级a三级点| 欧美中文字幕久久 | 在线观看视频国产一区 | 亚洲高清在线观看视频 | 久久久精品日本 | 久久久精品国产免费观看同学 | 日b视频在线观看网址 | 中文字幕黄网 | 狠狠狠狠狠色综合 | 欧美大码xxxx| 在线观看av的网站 | 亚州精品一二三区 | 久操视频在线播放 | 992tv在线观看| 亚洲国产日韩欧美在线 | 国产成人久久 | 成人黄色在线看 | 91av在线免费观看 | 911免费视频 | 中文不卡视频在线 | 精品国产观看 | 欧美色一色| 开心激情五月网 | 日韩久久午夜一级啪啪 | 亚洲一区二区三区在线看 | 香蕉视频导航 | 精品在线观看一区二区 | 欧美精品久久久久久久亚洲调教 | 国产精品久久久毛片 | 亚洲 中文 欧美 日韩vr 在线 | 狠狠色丁香婷婷综合橹88 | 欧美-第1页-屁屁影院 | 亚洲涩涩网站 | 国产精品久久网 | 精品一区欧美 | 亚洲国产中文字幕在线观看 | 中文字幕一区二区三区久久蜜桃 | 久久免费视频这里只有精品 | 干 操 插| 中文在线免费视频 | 怡红院av| 色婷丁香 | 日本精油按摩3 | 欧美乱熟臀69xxxxxx | 亚洲男男gⅴgay双龙 | 欧美精品首页 | 黄色小说在线免费观看 | 国产在线黄 | 日女人免费视频 | 亚洲 欧洲 国产 日本 综合 | 亚洲国产精品视频在线观看 | 国产91对白在线 | 日日精品 | 亚洲最大激情中文字幕 | 免费观看全黄做爰大片国产 | 成人av资源| 国产在线p | 麻豆91精品视频 | 在线性视频日韩欧美 | 人人添人人澡人人澡人人人爽 | 国产精品一区二区在线观看免费 | 999久久久久久久久 69av视频在线观看 | 日韩极品在线 | 亚洲视频免费在线看 | 在线观看不卡的av | 最近中文字幕在线 | 成人99免费视频 | 国产精品手机在线播放 | 九九九九九九精品任你躁 | 色网站在线看 | 亚洲高清在线观看视频 | 一区二区三区在线不卡 | 美女视频黄免费的久久 | 国产一区二区三区免费在线 | 最近最新最好看中文视频 | 免费av小说| 男女啪啪网站 | 精品在线免费视频 | 国产一区电影在线观看 | 精品嫩模福利一区二区蜜臀 | 99色在线视频 | 碰超在线观看 | 探花视频免费观看高清视频 | 激情www| 成人久久久久久久久久 | 久久国内免费视频 | 狠狠操夜夜操 | 亚洲美女精品视频 | 亚洲九九爱 | 97av视频| 97夜夜澡人人爽人人免费 | 97在线观看视频免费 | 婷婷色婷婷| 久久在线精品视频 | 在线最新av| 天天操天天摸天天射 | 又爽又黄在线观看 | 性日韩欧美在线视频 | 亚洲视频在线观看 | 狠狠躁夜夜躁人人爽视频 | 久久免费视频这里只有精品 | 天天综合操 | 国产视频在线观看一区二区 | 奇米影视在线99精品 | 色婷婷视频在线观看 | 久久视频在线视频 | 99热手机在线观看 | 伊人五月天.com | 亚洲精品久久激情国产片 | 日韩精品不卡 | 超碰在97| 日韩高清一二区 | 亚洲一区二区三区四区在线视频 | 91干干干| 麻豆影视在线观看 | 在线观看韩国av | 精品久操 | 在线成人国产 | 热久久电影| 91中文字幕网 | av在线日韩| 久久99中文字幕 | 国产精品粉嫩 | 国产亚洲精品精品精品 | 蜜臀精品久久久久久蜜臀 | 男女激情免费网站 | 中文字幕网址 | www.888av | 国产一级高清 | 国内精品久久久久久久久久久 | 日韩av区 | 色天天中文 | 天天插天天狠天天透 | 国产精品一区二区视频 | 热99在线视频 | 久久久久国产精品免费网站 | 国产a国产a国产a | 国产精品乱码久久久久久1区2区 | 国产成人亚洲在线观看 | 亚洲美女精品 | 日日草视频 | 免费观看黄 | 日韩av中文在线观看 | 日本视频精品 | 日韩色爱 | 青青网视频 | 美女黄色网在线播放 | 中文字幕在线观看第三页 | 日韩av电影免费在线观看 | 2021久久| 国产精品99久久免费黑人 | 日韩欧美视频在线观看免费 | 久久avav | 黄色一级影院 | 成人99免费视频 | 天天操狠狠操夜夜操 | 色香天天 | 国产一级在线播放 | www.神马久久 | 久久超碰网 | 国产福利电影网址 | 日韩高清精品免费观看 | 国产黄色成人 | 国产成人精品av在线观 | 一区二区日韩av | 91免费视频国产 | 99久久婷婷国产综合亚洲 | 亚洲成人av一区二区 | 国产精品视频在线观看 | 婷婷视频导航 | 99热超碰在线 | 91麻豆免费看| 亚洲夜夜网 | 亚洲免费a | 国产免码va在线观看免费 | 在线免费视| 欧美日韩精品电影 | 国产高清一 | 欧美日韩国产综合一区二区 | www.激情五月.com | 玖玖玖国产精品 | 色婷婷电影| 97在线成人| 国产精品免费久久 | 日韩在线观看不卡 | 偷拍区另类综合在线 | 成人动图| 国产精品毛片一区 | 国产 日韩 在线 亚洲 字幕 中文 | 黄色91免费观看 | 青青草在久久免费久久免费 | ,久久福利影视 | 激情网站免费观看 | 欧美性另类 | 日日夜夜天天久久 | 国产最新视频在线 | 特级西西人体444是什么意思 | 日韩av片免费在线观看 | 91麻豆精品国产自产在线游戏 | www.xxxx变态.com | 激情综合网天天干 | 国产免费高清视频 | 精品国产伦一区二区三区免费 | 91精品成人| 91免费看黄 | 久久视频在线免费观看 | 日本中文字幕免费观看 | 国精产品999国精产品视频 | 久久不卡电影 | mm1313亚洲精品国产 | 综合久久网站 | 成人av教育 | 91在线视频在线 | 亚洲精品网页 | 91久久久久久久 | 亚洲精品国产综合久久 | 五月婷婷一级片 | 日韩精品一区二区三区免费观看视频 | 久久精品成人 | 国产 欧美 在线 | 人人讲 | av免费观看网址 | 国产成人久久精品亚洲 | www.伊人色.com | 18pao国产成视频永久免费 | 亚洲精品久久久久999中文字幕 | 91精彩视频在线观看 | 久久国产精品久久国产精品 | 五月综合婷| 成人a视频片观看免费 | 久久久视频在线 | 日产中文字幕 | 97超碰精品 | 黄色一及电影 | 青青河边草手机免费 | 中文字幕久久精品亚洲乱码 | 久久99久久99 | 天天射天天操天天干 | 欧美激情精品久久 | 一级黄色免费 | 中文字幕色站 | 免费观看黄 | 国产一级片不卡 | 成年人在线免费看视频 | 视频在线播放国产 | 日本xxxx.com| 久久激情婷婷 | 亚洲三级性片 | 国产网红在线观看 | 九九久久久久久久久激情 | 午夜黄网 | 日韩免费av在线 | 日韩欧美视频一区二区 | 天海翼一区二区三区免费 | 久久激情视频 久久 | 日日激情 | 久草视频中文 | 中午字幕在线观看 | 久久人人97超碰国产公开结果 | 97视频在线免费观看 | 在线免费观看黄色小说 | 少妇性xxx| 欧美一性一交一乱 | 国产精品免费在线 | 伊人资源站 | 亚洲美女久久 | 91免费看片黄 | 在线 你懂| 激情综合狠狠 | 人成在线免费视频 | 中文区中文字幕免费看 | 国产婷婷精品av在线 | 在线看日韩av | 亚洲精品久久久久中文字幕m男 | 奇米网在线观看 | 久久伊人色综合 | 欧美精品国产综合久久 | 亚洲综合导航 | 日韩欧美69| www五月天婷婷| 色狠狠婷婷| 久久久久久久久久久国产精品 | 国产精品夜夜夜一区二区三区尤 | 色香网| 99久久精品国产系列 | 免费高清影视 | 8x成人免费视频 | 国产亚洲综合性久久久影院 | 在线一二三区 |