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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

深入Bert实战(Pytorch)----fine-Tuning 2

發(fā)布時間:2025/3/21 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入Bert实战(Pytorch)----fine-Tuning 2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

深入Bert實戰(zhàn)(Pytorch)----fine-Tuning 2

https://www.bilibili.com/video/BV1K5411t7MD?p=5
https://www.youtube.com/channel/UCoRX98PLOsaN8PtekB9kWrw/videos
深入BERT實戰(zhàn)(PyTorch) by ChrisMcCormickAI
這是ChrisMcCormickAI在油管bert,8集系列第三篇fine-Tuning的pytorch的講解的代碼,在油管視頻下有cloab地址,如果不能翻墻的可以留下郵箱我全部看完整理后發(fā)給你。但是在fine-tuning最好還是在cloab上運行

?

文章目錄

  • 深入Bert實戰(zhàn)(Pytorch)----fine-Tuning 2
  • 4. Train Our Classification Model
    • 4.1. BertForSequenceClassification
    • 4.2. Optimizer & Learning Rate Scheduler
    • 4.3. 循環(huán)訓練
  • 5. 在測試集上的表現(xiàn)
    • 5.1. 數(shù)據(jù)準備
    • 5.2. 在測試集上評估
  • 總結
  • 附錄
    • A1. Saving & Loading Fine-Tuned Model
  • Revision History

?


4. Train Our Classification Model

4.1. BertForSequenceClassification

對于這個任務,我們首先要修改預訓練的BERT模型以給出分類輸出,然后在自己的數(shù)據(jù)集上繼續(xù)訓練模型,直到整個模型(端到端的模型)非常適合自己的任務。

值得慶幸的是,huggingface pytorch實現(xiàn)包含一組為各種NLP任務設計的接口。盡管這些接口都建立在訓練好的BERT模型之上,但每個接口都有不同的頂層和輸出類型,以適應它們特定的NLP任務。

這里是目前提供的fine-tuning列表

  • BertModel
  • BertForPreTraining
  • BertForMaskedLM
  • BertForNextSentencePrediction
  • BertForSequenceClassification?- The one we’ll use.
  • BertForTokenClassification
  • BertForQuestionAnswering

這里是transformer的文檔here.

我們使用BertForSequenceClassification。這是普通的BERT模型,上面添加了一個用于分類的線性層,我們將使用它作為句子分類器。當我們輸入數(shù)據(jù)時,整個預訓練的BERT模型和額外的未訓練的分類層是同時在這個任務上進行訓練

好的,現(xiàn)在加載BERT!這里有幾種不同的預訓練模型,"bert-base-uncased"版本,僅有小寫字母(“uncased”)相比于是較小的(“base” vs “l(fā)arge”)。

預訓練的文檔在from_pretrainedhere?定義了其它參數(shù)?here

from transformers import BertForSequenceClassification, AdamW, BertConfig# Load BertForSequenceClassification, the pretrained BERT model with a single # linear classification layer on top. # 加載BertForSequenceClassification,預訓練的模型+頂層單層線性分類層 model = BertForSequenceClassification.from_pretrained("bert-base-uncased", # Use the 12-layer BERT model, with an uncased vocab.num_labels = 2, # The number of output labels--2 for binary classification.# You can increase this for multi-class tasks.# 2分類問題,可以增加為多分類問題output_attentions = False, # Whether the model returns attentions weights.output_hidden_states = False, # Whether the model returns all hidden-states. )# Tell pytorch to run this model on the GPU. model.cuda()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

出于好奇,我們可以在這里按名稱瀏覽所有的模型參數(shù)。
在下面的單元格中,我打印出了以下權重的名稱和尺寸:

這里作者打印了所有層,總共有201層,也打印了權重和大小

  • The embedding layer.
  • The first of the twelve transformers.
  • The output layer.
  • # Get all of the model's parameters as a list of tuples. params = list(model.named_parameters())print('The BERT model has {:} different named parameters.\n'.format(len(params)))print('==== Embedding Layer ====\n')for p in params[0:5]:print("{:<55} {:>12}".format(p[0], str(tuple(p[1].size()))))print('\n==== First Transformer ====\n')for p in params[5:21]:print("{:<55} {:>12}".format(p[0], str(tuple(p[1].size()))))print('\n==== Output Layer ====\n')for p in params[-4:]:print("{:<55} {:>12}".format(p[0], str(tuple(p[1].size()))))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    The BERT model has 201 different named parameters.==== Embedding Layer ====bert.embeddings.word_embeddings.weight (30522, 768) bert.embeddings.position_embeddings.weight (512, 768) bert.embeddings.token_type_embeddings.weight (2, 768) bert.embeddings.LayerNorm.weight (768,) bert.embeddings.LayerNorm.bias (768,)==== First Transformer ====bert.encoder.layer.0.attention.self.query.weight (768, 768) bert.encoder.layer.0.attention.self.query.bias (768,) bert.encoder.layer.0.attention.self.key.weight (768, 768) bert.encoder.layer.0.attention.self.key.bias (768,) bert.encoder.layer.0.attention.self.value.weight (768, 768) bert.encoder.layer.0.attention.self.value.bias (768,) bert.encoder.layer.0.attention.output.dense.weight (768, 768) bert.encoder.layer.0.attention.output.dense.bias (768,) bert.encoder.layer.0.attention.output.LayerNorm.weight (768,) bert.encoder.layer.0.attention.output.LayerNorm.bias (768,) bert.encoder.layer.0.intermediate.dense.weight (3072, 768) bert.encoder.layer.0.intermediate.dense.bias (3072,) bert.encoder.layer.0.output.dense.weight (768, 3072) bert.encoder.layer.0.output.dense.bias (768,) bert.encoder.layer.0.output.LayerNorm.weight (768,) bert.encoder.layer.0.output.LayerNorm.bias (768,)==== Output Layer ====bert.pooler.dense.weight (768, 768) bert.pooler.dense.bias (768,) classifier.weight (2, 768) classifier.bias (2,)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    4.2. Optimizer & Learning Rate Scheduler

    現(xiàn)在我們已經(jīng)加載了模型,我們需要從存儲的模型中獲取訓練超參數(shù)。

    為了進行微調(diào),作者建議從以下值中進行選擇。(從論文的注釋?BERT paper):

    • Batch size:?16, 32
    • Learning rate (Adam):?5e-5, 3e-5, 2e-5
    • Number of epochs:?2, 3, 4

    作者選擇的參數(shù)是:

    • Batch size: 32 (set when creating our DataLoaders)
    • Learning rate: 2e-5
    • Epochs: 4 (we’ll see that this is probably too many…)

    參數(shù)eps = 1e-8?是"a very small number to prevent any division by zero in the implementation"(from?here)

    您可以在run_glue.py中找到創(chuàng)建AdamW優(yōu)化器的方法here.

    # Note: AdamW is a class from the huggingface library (as opposed to pytorch) # AdamW是huggingface實現(xiàn)的類 # I believe the 'W' stands for 'Weight Decay fix" optimizer = AdamW(model.parameters(),lr = 2e-5, # args.learning_rate - default is 5e-5, our notebook had 2e-5eps = 1e-8 # args.adam_epsilon - default is 1e-8.)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    from transformers import get_linear_schedule_with_warmup# Number of training epochs. The BERT authors recommend between 2 and 4. # We chose to run for 4, but we'll see later that this may be over-fitting the # training data. epochs = 4# Total number of training steps is [number of batches] x [number of epochs]. # (Note that this is not the same as the number of training samples). total_steps = len(train_dataloader) * epochs # 總共4 * 241批# Create the learning rate scheduler. scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps = 0, # Default value in run_glue.pynum_training_steps = total_steps)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4.3. 循環(huán)訓練

    下面是我們的訓練循環(huán)。有很多事情要做,但從根本上來說,對于循環(huán)中的每一個過程,我們都有一個training階段和一個validation階段。

    Thank you to?Stas Bekman?for contributing the insights and code for using validation loss to detect over-fitting!

    Training:

    • 打開我們的數(shù)據(jù) inputs 和 labels
    • 加載數(shù)據(jù)到GPU上
    • 清除之前計算的梯度。
      • 在pytorch中,除非顯式清除梯度,否則梯度默認累積(對于rnn之類的東西很有用)。
    • Forward pass(通過網(wǎng)絡輸入數(shù)據(jù))
    • Backward pass 反向傳播
    • 告訴網(wǎng)絡使用optimizer.step()更新參數(shù)
    • 監(jiān)控進度,跟蹤變量

    Evalution:

    • 同訓練過程一樣,打開inputs 和 labels
    • 加載數(shù)據(jù)到GPU上
    • Forward pass(通過網(wǎng)絡輸入數(shù)據(jù))
    • 計算我們驗證數(shù)據(jù)的損失,監(jiān)控進度,跟蹤變量

    Pytorch向我們隱藏了所有詳細的計算,但是我們已經(jīng)對代碼進行了注釋,指出了每一行上發(fā)生的上述步驟。

    定義一個計算精度的輔助函數(shù)。

    import numpy as np# Function to calculate the accuracy of our predictions vs labels # 這個函數(shù)來計算預測值和labels的準確度 def flat_accuracy(preds, labels):pred_flat = np.argmax(preds, axis=1).flatten() # 取出最大值對應的索引labels_flat = labels.flatten()return np.sum(pred_flat == labels_flat) / len(labels_flat)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    格式化函數(shù)時間

    import time import datetimedef format_time(elapsed):'''Takes a time in seconds and returns a string hh:mm:ss'''# Round to the nearest second. 四舍五入elapsed_rounded = int(round((elapsed)))# Format as hh:mm:ssreturn str(datetime.timedelta(seconds=elapsed_rounded))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    現(xiàn)在開始訓練,這里要修改一部分代碼,作者給的代碼有個地方要做修改,參考run_glue.py

    import random import numpy as np# This training code is based on the `run_glue.py` script here: # https://github.com/huggingface/transformers/blob/5bfcd0485ece086ebcbed2d008813037968a9e58/examples/run_glue.py#L128# Set the seed value all over the place to make this reproducible. 保證可重復性 seed_val = 42random.seed(seed_val) np.random.seed(seed_val) torch.manual_seed(seed_val) torch.cuda.manual_seed_all(seed_val)# We'll store a number of quantities(保存如) such as training and validation loss, # validation accuracy, and timings.(訓練loss, 驗證loss, 驗證準確率,訓練時間) training_stats = []# Measure the total training time for the whole run. 總訓練時間 total_t0 = time.time()# For each epoch... for epoch_i in range(0, epochs):# ========================================# Training# ========================================# 對訓練集進行一次完整的測試。print("")print('======== Epoch {:} / {:} ========'.format(epoch_i + 1, epochs))print('Training...')# Measure how long the training epoch takes.t0 = time.time()# Reset the total loss for this epoch.total_train_loss = 0# Put the model into training mode. Don't be mislead--the call to # `train` just changes the *mode*, it doesn't *perform* the training.# 這里并不是執(zhí)行的訓練,而是,實例化啟用 BatchNormalization 和 Dropout# `dropout` and `batchnorm` layers behave differently during training# vs. test (source: https://stackoverflow.com/questions/51433378/what-does-model-train-do-in-pytorch)model.train()# For each batch of training data...for step, batch in enumerate(train_dataloader): # 共241個batches# Progress update every 40 batches. 40步打印一次if step % 40 == 0 and not step == 0:# Calculate elapsed time in minutes.elapsed = format_time(time.time() - t0)# Report progress.print(' Batch {:>5,} of {:>5,}. Elapsed: {:}.'.format(step, len(train_dataloader), elapsed))# 例: Batch 40 of 241. Elapsed: 0:00:08.# `batch` contains three pytorch tensors:# [0]: input ids # [1]: attention masks# [2]: labels # 第一步的打開數(shù)據(jù), 第二步 將數(shù)據(jù)放到GPU `to`方法b_input_ids = batch[0].to(device)b_input_mask = batch[1].to(device)b_labels = batch[2].to(device)# 在執(zhí)行 backward pass 之前,始終清除任何先前計算的梯度。# PyTorch不會自動這樣做,因為累積梯度“在訓練rnn時很方便”。# (source: https://stackoverflow.com/questions/48001598/why-do-we-need-to-call-zero-grad-in-pytorch)model.zero_grad() # 第三步,梯度清零 # 執(zhí)行 forward pass (在此訓練批次上對模型進行評估).# The documentation for this `model` function is here: # https://huggingface.co/transformers/v2.2.0/model_doc/bert.html#transformers.BertForSequenceClassification# 它根據(jù)給定的參數(shù)和設置的標志返回不同數(shù)量的形參。# it returns the loss (because we provided labels) and the "logits"--the model outputs prior to activation.# 返回loss和"logits"--激活之前的模型輸出。 model = BertForSequenceClassificationoutput = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask, labels=b_labels)# 將所有批次的訓練損失累積起來,這樣我們就可以在最后計算平均損失。 # `loss` 是一個單個值的tensor; the `.item()` 函數(shù)將它轉(zhuǎn)為一個python numberloss, logits = output[:2]total_train_loss += loss.item()# 執(zhí)行反向傳播計算精度.loss.backward()# Clip the norm of the gradients to 1.0.# 梯度裁剪,防止梯度爆炸torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)# Update parameters and take a step using the computed gradient.# 更新參數(shù),計算梯度# 優(yōu)化器規(guī)定“update rule”——參數(shù)如何根據(jù)梯度、學習速率等進行修改。optimizer.step()# 更新學習率scheduler.step()# 計算平均lossavg_train_loss = total_train_loss / len(train_dataloader) # 訓練時間training_time = format_time(time.time() - t0)# 打印結果print("")print(" Average training loss: {0:.2f}".format(avg_train_loss))print(" Training epcoh took: {:}".format(training_time))# ========================================# Validation# ========================================# 在驗證集查看print("")print("Running Validation...")t0 = time.time()# 將模型置于評估模式 不使用BatchNormalization()和Dropout()model.eval()# 跟蹤變量total_eval_accuracy = 0total_eval_loss = 0nb_eval_steps = 0# 在每個epoch上評估for batch in validation_dataloader:# `batch` contains three pytorch tensors:# [0]: input ids # [1]: attention masks# [2]: labels b_input_ids = batch[0].to(device)b_input_mask = batch[1].to(device)b_labels = batch[2].to(device)# Tell pytorch not to bother with constructing the compute graph during# the forward pass, since this is only needed for backprop (training).with torch.no_grad(): # Forward pass, calculate logit predictions.# token_type_ids is the same as the "segment ids", which # differentiates sentence 1 and 2 in 2-sentence tasks.# The documentation for this `model` function is here: # https://huggingface.co/transformers/v2.2.0/model_doc/bert.html#transformers.BertForSequenceClassification# Get the "logits" output by the model. The "logits" are the output# values prior to applying an activation function like the softmax.(loss, logits) = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask,labels=b_labels)# 計算驗證損失loss, logits = output[:2]total_eval_loss += loss.item()# Move logits and labels to CPUlogits = logits.detach().cpu().numpy()label_ids = b_labels.to('cpu').numpy()# Calculate the accuracy for this batch of test sentences, and# accumulate it over all batches.total_eval_accuracy += flat_accuracy(logits, label_ids)# 返回驗證結果avg_val_accuracy = total_eval_accuracy / len(validation_dataloader)print(" Accuracy: {0:.2f}".format(avg_val_accuracy))# 計算平均復雜度avg_val_loss = total_eval_loss / len(validation_dataloader)# 時間validation_time = format_time(time.time() - t0)print(" Validation Loss: {0:.2f}".format(avg_val_loss))print(" Validation took: {:}".format(validation_time))# 記錄這個epoch的所有統(tǒng)計數(shù)據(jù)。 方便后面可視化training_stats.append({'epoch': epoch_i + 1,'Training Loss': avg_train_loss,'Valid. Loss': avg_val_loss,'Valid. Accur.': avg_val_accuracy,'Training Time': training_time,'Validation Time': validation_time})print("") print("Training complete!")print("Total training took {:} (h:mm:ss)".format(format_time(time.time()-total_t0)))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200

    讓我們來看看訓練過程的總結。

    import pandas as pd# 顯示浮點數(shù)小數(shù)點后兩位。 pd.set_option('precision', 2)# 從訓練統(tǒng)計數(shù)據(jù)里,創(chuàng)建一個 DataFrame df_stats = pd.DataFrame(data=training_stats)# 用'epoch'行坐標 df_stats = df_stats.set_index('epoch')# A hack to force the column headers to wrap. #df = df.style.set_table_styles([dict(selector="th",props=[('max-width', '70px')])])# Display the table. df_stats
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    Training LossValid. LossValid. Accur.Training TimeValidation Time epoch
    10.500.450.800:00:51
    20.320.460.810:00:51
    30.220.490.820:00:51
    40.160.550.820:00:51

    這里我跑這代碼train loss沒有下降,反而上升了,有了解這個問題的大大,麻煩請留言指教下

    請注意,當訓練損失隨著時間的推移而下降時,驗證損失卻在增加!這表明我們訓練模型的時間太長了,它對訓練數(shù)據(jù)過于擬合。

    (作為參考,我們使用了7,695個訓練樣本和856個驗證樣本)。

    驗證損失是比精度更精確的度量,因為有了精度,我們不關心確切的輸出值,而只關心它落在閾值的哪一邊。

    如果我們預測的是正確的答案,但缺乏信心,那么驗證損失將捕捉到這一點,而準確性則不會。

    import matplotlib.pyplot as plt % matplotlib inlineimport seaborn as sns# Use plot styling from seaborn. sns.set(style='darkgrid')# Increase the plot size and font size. sns.set(font_scale=1.5) plt.rcParams["figure.figsize"] = (12,6)# 繪制學習曲線 plt.plot(df_stats['Training Loss'], 'b-o', label="Training") plt.plot(df_stats['Valid. Loss'], 'g-o', label="Validation")# Label the plot. plt.title("Training & Validation Loss") plt.xlabel("Epoch") plt.ylabel("Loss") plt.legend() plt.xticks([1, 2, 3, 4])plt.show()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    5. 在測試集上的表現(xiàn)

    現(xiàn)在,我們將加載holdout數(shù)據(jù)集并準備輸入,就像我們對訓練集所做的那樣。然后,我們將使用Matthew’s correlation coefficient評估預測,因為這是更廣泛的NLP社區(qū)用于評估CoLA性能的指標。在這個指標下,+1是最好的分數(shù),-1是最差的分數(shù)。通過這種方式,我們可以看到針對這個特定任務的先進模型的性能如何。

    5.1. 數(shù)據(jù)準備

    我們需要應用與訓練數(shù)據(jù)相同的所有步驟來準備測試數(shù)據(jù)集。

    import pandas as pd# 加載數(shù)據(jù) df = pd.read_csv("./cola_public/raw/out_of_domain_dev.tsv", delimiter='\t', header=None, names=['sentence_source', 'label', 'label_notes', 'sentence'])# 顯示句子數(shù)量 print('Number of test sentences: {:,}\n'.format(df.shape[0]))# 創(chuàng)建句子和標簽列表 sentences = df.sentence.values labels = df.label.values# Tokenize input_ids = [] attention_masks = []# For every sentence... for sent in sentences:# `encode_plus` will:# (1) Tokenize the sentence.# (2) 添加 `[CLS]` token 到開始# (3) 添加 `[SEP]` token 到結束# (4) 映射tokens 到 IDs.# (5) 填充或截斷句子到`max_length`# (6) Create attention masks for [PAD] tokens.encoded_dict = tokenizer.encode_plus(sent, # 對句子做encode.add_special_tokens = True, # Add '[CLS]' and '[SEP]'max_length = 64, # Pad & truncate all sentences.pad_to_max_length = True,return_attention_mask = True, # Construct attn. masks.return_tensors = 'pt', # Return pytorch tensors.)# 將已編碼的句子添加到列表中。 input_ids.append(encoded_dict['input_ids'])# 以及它的注意力掩碼(簡單地區(qū)分填充和非填充)。attention_masks.append(encoded_dict['attention_mask'])# Convert the lists into tensors. input_ids = torch.cat(input_ids, dim=0) attention_masks = torch.cat(attention_masks, dim=0) labels = torch.tensor(labels)# Set the batch size. batch_size = 32 # Create the DataLoader. prediction_data = TensorDataset(input_ids, attention_masks, labels) prediction_sampler = SequentialSampler(prediction_data) prediction_dataloader = DataLoader(prediction_data, sampler=prediction_sampler, batch_size=batch_size)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    Number of test sentences: 516

    5.2. 在測試集上評估

    準備好測試集之后,我們可以應用我們的微調(diào)模型來生成測試集的預測。

    # Prediction on test setprint('Predicting labels for {:,} test sentences...'.format(len(input_ids)))# 在測試模型 model.eval()# 跟蹤變量 predictions , true_labels = [], []# Predict for batch in prediction_dataloader:# Add batch to GPUbatch = tuple(t.to(device) for t in batch)# Unpack the inputs from our dataloaderb_input_ids, b_input_mask, b_labels = batch# 不讓模型計算或存儲梯度,節(jié)省內(nèi)存和加速預測with torch.no_grad():# Forward pass, calculate logit predictionsoutputs = model(b_input_ids, token_type_ids=None, attention_mask=b_input_mask)logits = outputs[0]# Move logits and labels to CPUlogits = logits.detach().cpu().numpy()label_ids = b_labels.to('cpu').numpy()# Store predictions and true labelspredictions.append(logits)true_labels.append(label_ids)print(' DONE.')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    CoLA基準的精度是用“Matthews correlation coefficient”來測量的。(MCC)。

    我們在這里使用MCC是因為類是不平衡的:

    print('Positive samples: %d of %d (%.2f%%)' % (df.label.sum(), len(df.label), (df.label.sum() / len(df.label) * 100.0)))
    • 1

    Positive samples: 354 of 516 (68.60%)

    # 計算相關系數(shù) from sklearn.metrics import matthews_corrcoefmatthews_set = []# 使用Matthew相關系數(shù)對每個測試批進行評估 print('Calculating Matthews Corr. Coef. for each batch...')# For each input batch... for i in range(len(true_labels)):# 這個批處理的預測是一個2列的ndarray(一個列是“0”,一個列是“1”)。 # 選擇值最高的label,并將其轉(zhuǎn)換為0和1的列表。pred_labels_i = np.argmax(predictions[i], axis=1).flatten()# Calculate and store the coef for this batch. matthews = matthews_corrcoef(true_labels[i], pred_labels_i) matthews_set.append(matthews)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    最終的分數(shù)將基于整個測試集,但是讓我們看一下單個批次的分數(shù),以了解批次之間度量的可變性。

    每批有32個句子,除了最后一批只有(516% 32)= 4個測試句子。

    創(chuàng)建一個柱狀圖,顯示每批測試樣品的MCC分數(shù)。

    ax = sns.barplot(x=list(range(len(matthews_set))), y=matthews_set, ci=None)plt.title('MCC Score per Batch') plt.ylabel('MCC Score (-1 to +1)') plt.xlabel('Batch #')plt.show()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7


    現(xiàn)在我們將合并所有批次的結果并計算我們最終的MCC分數(shù)。

    # 合并所有批次的結果。 flat_predictions = np.concatenate(predictions, axis=0)# 對于每個樣本,選擇得分較高的標簽(0或1)。 flat_predictions = np.argmax(flat_predictions, axis=1).flatten()# 將每個批次的正確標簽組合成一個單獨的列表。 flat_true_labels = np.concatenate(true_labels, axis=0)# Calculate the MCC mcc = matthews_corrcoef(flat_true_labels, flat_predictions)print('Total MCC: %.3f' % mcc)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在大約半個小時的時間里,我們沒有做任何超參數(shù)的調(diào)整(learning rate, epochs, batch size, ADAM properties屬性等),我們就獲得了一個很好的分數(shù)。

    為了使分數(shù)最大化,我們應該刪除“驗證集”(我們用來幫助確定要訓練多少個紀元),并在整個訓練集上訓練。

    庫將基準測試此處的預期精度文檔為“49.23”。

    官方排行?here.

    請注意(由于數(shù)據(jù)集的大小較小?)在不同的運行中,精度可能會有很大的變化。

    總結

    這篇文章演示了使用預先訓練好的BERT模型,不管你感興趣的是什么特定的NLP任務,你都可以使用pytorch接口,用最少的努力和訓練時間,快速有效地創(chuàng)建一個高質(zhì)量的模型。

    附錄

    A1. Saving & Loading Fine-Tuned Model

    (取自’ run_glue。py 'here)將模型和標記器寫入磁盤。

    import os# 保存best-practices:如果您使用模型的默認名稱,您可以使用from_pretraining()重新加載它 # Saving best-practices: if you use defaults names for the model, you can reload it using from_pretrained()output_dir = './model_save/'# 如果需要,創(chuàng)建輸出目錄 if not os.path.exists(output_dir):os.makedirs(output_dir)print("Saving model to %s" % output_dir)# 使用`save_pretrained()`保存訓練過的模型、配置和標記器。 # 用`from_pretrained()`重新加載模型。 model_to_save = model.module if hasattr(model, 'module') else model # 注意distributed/parallel training model_to_save.save_pretrained(output_dir) tokenizer.save_pretrained(output_dir)# Good practice: 保存訓練好的模型于模型參數(shù) # torch.save(args, os.path.join(output_dir, 'training_args.bin'))
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    Revision History

    Version 3?-?Mar 18th, 2020?- (current)

    • Simplified the tokenization and input formatting (for both training and test) by leveraging the?tokenizer.encode_plus?function.
      encode_plus?handles padding?and?creates the attention masks for us.
    • Improved explanation of attention masks.
    • Switched to using?torch.utils.data.random_split?for creating the training-validation split.
    • Added a summary table of the training statistics (validation loss, time per epoch, etc.).
    • Added validation loss to the learning curve plot, so we can see if we’re overfitting.
      • Thank you to?Stas Bekman?for contributing this!
    • Displayed the per-batch MCC as a bar plot.

    Version 2?-?Dec 20th, 2019?-?link

    • huggingface renamed their library to?transformers.
    • Updated the notebook to use the?transformers?library.

    Version 1?-?July 22nd, 2019

    • Initial version.

    總結

    以上是生活随笔為你收集整理的深入Bert实战(Pytorch)----fine-Tuning 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    婷香五月 | 97电影在线 | 狠狠狠色丁香综合久久天下网 | 91高清在线看 | 久久久久久久久久电影 | 麻豆国产精品永久免费视频 | 久久艹久久 | 天天射天天射天天射 | 欧美精品在线一区 | av天天干 | 国偷自产中文字幕亚洲手机在线 | 99欧美 | 国产婷婷视频在线 | 青青啪 | 日韩激情在线视频 | www.久久免费 | 欧美精品一区二区在线播放 | 欧美激情另类 | 蜜臀av夜夜澡人人爽人人 | 一区二区中文字幕在线观看 | 在线观看中文字幕2021 | 91成人小视频 | 国产一区二三区好的 | 亚洲精品视频在线观看免费 | 日本不卡一区二区三区在线观看 | 毛片视频电影 | 在线播放国产一区二区三区 | 1024手机在线看 | 日日摸日日添夜夜爽97 | 五月婷婷婷婷婷 | 中文av免费 | 激情综合一区 | 国产夫妻av在线 | 九九免费在线观看视频 | 91麻豆国产| 黄色小网站免费看 | 色悠悠久久综合 | 日韩一区二区三区高清免费看看 | 天天爱天天射天天干天天 | 国产精品激情偷乱一区二区∴ | 草久视频在线 | 国产婷婷色 | 黄色一级免费电影 | 天天射网| 特片网久久 | 中文字幕999 | 一区二区三区手机在线观看 | 国产高清视频网 | 国产小视频免费在线网址 | 亚洲精品字幕在线观看 | 国产精品第52页 | 91禁在线看 | 天天操狠狠操网站 | 欧美成人xxxxxxxx | 久久久激情视频 | 91av视频免费观看 | 97视频免费观看2区 亚洲视屏 | 99久久日韩精品视频免费在线观看 | 免费看片日韩 | 久久婷婷一区二区三区 | 91最新在线视频 | 一本一本久久a久久精品综合小说 | 国产午夜视频在线观看 | 亚洲最新av在线网址 | 狠狠色丁香久久综合网 | 国产精品免费在线播放 | 四虎成人精品在永久免费 | 91天堂在线观看 | 天天摸天天弄 | 日韩二级毛片 | 久久精品欧美日韩精品 | 精品视频免费播放 | 亚洲视频久久久久 | 久久国产精品久久久久 | 精品亚洲国产视频 | 日韩电影黄色 | 中文字幕亚洲字幕 | 国产成人一区三区 | 欧美在线久久 | 黄色在线免费观看网址 | 久久短视频 | 免费观看性生交 | 亚洲影音先锋 | 狠狠操.com| 最新超碰 | 黄色亚洲大片免费在线观看 | 久久精品艹 | 日韩欧美精品一区 | 国产成人在线播放 | 五月婷香蕉久色在线看 | 玖玖爱免费视频 | 97在线视频免费播放 | 美国人与动物xxxx | 91专区在线观看 | 国产又粗又猛又爽又黄的视频先 | 国产专区在线播放 | 中文字幕 国产 一区 | 久草com | 成片免费观看视频999 | 免费v片| 国产精品人成电影在线观看 | 亚洲视频在线视频 | 免费网站在线观看成人 | 国产精品不卡视频 | 久久艹艹 | 婷婷在线免费 | 手机在线日韩视频 | 色在线观看网站 | 久久激情综合网 | 美女网站黄免费 | 国产精品一区在线观看 | 亚洲理论电影网 | 成年人免费在线 | 日日日视频 | 蜜臀一区二区三区精品免费视频 | 四虎影视av| 国产精品成人自产拍在线观看 | 国产在线观看二区 | 久久精品一 | 国产午夜在线观看视频 | 久久视频二区 | 国产色女人 | 国产69精品久久久久99尤 | 人人干免费 | 伊人天天综合 | 日韩中文字幕网站 | 久久有精品 | 美女黄色网在线播放 | 奇米网网址| 911香蕉| 在线三级中文 | 久草 | 国产色秀视频 | 国产一区高清在线 | www久久久| 亚洲自拍偷拍色图 | 成人片在线播放 | 夜夜夜影院 | 国产一区 在线播放 | 免费看黄色91 | 91亚洲精品国偷拍自产在线观看 | 人人射人人爱 | 9999激情| 麻豆av一区二区三区在线观看 | av片免费播放 | 婷婷网在线 | 久久成人国产精品入口 | 麻豆视传媒官网免费观看 | 激情黄色一级片 | 狠狠色丁香婷婷综合视频 | 网站免费黄色 | 欧美国产日韩一区二区三区 | 777视频在线观看 | 国产精品99久久久久久有的能看 | 欧美成人999| 日韩在线电影一区二区 | 伊人久久一区 | 中文字幕欧美日韩va免费视频 | 日韩在线观看视频中文字幕 | 国产精品久久久av | 国产日产av| 亚洲精品影院在线观看 | 成人a级黄色片 | 国产精品久久久久久久久毛片 | 黄色毛片在线看 | www.天天操 | 毛片视频电影 | 国产精品美女免费 | 欧美黄色高清 | 久久久久成人精品免费播放动漫 | 国产在线一区二区三区播放 | 欧美日韩精品影院 | 久久国产午夜精品理论片最新版本 | 狠狠色香婷婷久久亚洲精品 | 在线观看日韩专区 | 亚洲成成品网站 | 国产91亚洲 | 国产精品亚| 亚洲免费观看在线视频 | 亚洲精品大全 | 久久色视频 | 五月天色婷婷丁香 | 91精品久久久久久久久久入口 | 久久日本视频 | 欧美精品久久人人躁人人爽 | 日韩在线观看第一页 | 99热超碰 | 国产中文 | 在线观看黄 | 人人澡人摸人人添学生av | 91免费视频网站在线观看 | 亚洲最大成人免费网站 | 最近中文字幕第一页 | 偷拍福利视频一区二区三区 | 免费合欢视频成人app | 国产在线观看污片 | 国产中文字幕免费 | 欧美a级在线 | 五月婷婷国产 | 黄色毛片视频免费 | 在线观看免费黄视频 | 四虎影视成人永久免费观看视频 | 亚洲 欧洲 国产 日本 综合 | 一级片在线 | 久久好看免费视频 | 韩日av在线 | 国产美腿白丝袜足在线av | 在线小视频你懂得 | 在线观看视频中文字幕 | 五月婷婷爱 | 久久艹欧美| 久久精品亚洲综合专区 | 国产午夜视频在线观看 | 在线免费观看一区二区三区 | 香蕉网站在线观看 | 精品影院一区二区久久久 | 美女网站视频免费黄 | 五月天中文字幕 | 国产 一区二区三区 在线 | 美女黄色网在线播放 | 日韩欧美在线免费观看 | www.99av| 91成人看片 | 精品 一区 在线 | 日韩成人在线一区二区 | 亚洲天堂在线观看完整版 | 亚洲精品99久久久久久 | 久久黄色精品视频 | 超碰公开在线观看 | 成人在线视频免费观看 | 综合网五月天 | 日p在线观看 | 最近中文字幕免费 | 一级片视频在线 | 日韩综合一区二区 | 国产成人av电影在线 | 国产亚洲精品久久久久久无几年桃 | 色婷婷在线观看视频 | 91麻豆精品一区二区三区 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 97影视| 亚洲成人午夜av | 婷婷丁香色 | 色婷婷av一区 | 亚洲精品国产精品国自 | 欧美特一级片 | 欧美日韩国产一区二 | 精品视频资源站 | 一区二区三区在线观看免费视频 | 成人av电影在线观看 | 国产精品第一视频 | 久久精品国产久精国产 | 99精品区| 国产免费一区二区三区最新6 | 黄色免费视频在线观看 | 久久69精品久久久久久久电影好 | 国产亚洲精品久久 | 婷婷精品国产一区二区三区日韩 | 色五月激情五月 | 日本成址在线观看 | 91成人免费观看视频 | 伊人国产在线播放 | 日韩国产欧美在线播放 | 麻豆视频国产 | 国产成人av在线影院 | 亚洲欧洲成人精品av97 | 欧美日韩后 | 午夜久操 | 在线小视频你懂的 | 免费网址在线播放 | 久久 国产一区 | 日韩欧美一区二区在线 | 福利一区二区三区四区 | 五月激情久久 | 国产精品午夜久久 | 免费一级片在线 | 久久综合精品国产一区二区三区 | 久久伦理 | 在线黄网站 | 久久亚洲成人网 | 草久久久久久 | 久久综合九色九九 | 免费精品国产va自在自线 | av电影中文字幕在线观看 | 国产视频日韩视频欧美视频 | 99视频久 | 波多野结衣久久资源 | 国产黄在线 | 国产精品亚洲人在线观看 | 免费观看成人网 | 91福利区一区二区三区 | 日本精品在线视频 | 久久久香蕉视频 | 国产精品中文在线 | 午夜久久福利影院 | 亚洲国产操 | 精品免费在线视频 | 在线观看国产成人av片 | 久久视频在线看 | 日韩 在线观看 | 人人爱夜夜操 | av大片免费在线观看 | 99久久这里只有精品 | 日本久久不卡视频 | 久久精品观看 | 美女视频免费一区二区 | 亚洲黄色在线免费观看 | av观看久久久 | 999久久久久久| av在线免费在线 | 青青草久草在线 | 亚洲精品美女久久久 | 五月婷婷综合在线 | 国产精品久久久 | 久久久网站 | 黄色在线免费观看网站 | 国产三级久久久 | 亚洲精品麻豆视频 | 黄色国产高清 | 婷婷六月色 | 麻豆视频国产在线观看 | 亚洲好视频 | 精品在线视频播放 | 日韩高清成人在线 | 91大神免费在线观看 | 欧美婷婷综合 | 久久夜夜夜 | 欧美与欧洲交xxxx免费观看 | 色爽网站 | 午夜免费在线观看 | 丝袜av一区 | 有码一区二区三区 | 欧美日韩免费在线视频 | av免费看在线 | 亚洲精品久久久久58 | 久热精品国产 | 欧美激情va永久在线播放 | 久久精品网 | 在线观看亚洲精品视频 | 国产精品自产拍在线观看网站 | 亚洲精品看片 | av中文字幕剧情 | 久久久久免费网 | 欧美色图30p | 99re视频在线观看 | 91色国产在线 | 婷婷丁香六月天 | 97视频在线观看播放 | 亚洲国产成人精品电影在线观看 | 欧美成人一二区 | 在线直播av | 久久综合狠狠综合久久激情 | 色丁香综合 | 美女黄网站视频免费 | 国产粉嫩在线观看 | 91久久精品一区二区三区 | 丁香花在线视频观看免费 | 中文在线免费一区三区 | 中文字幕在线中文 | 欧美国产一区在线 | 国产三级午夜理伦三级 | 国产一区二区免费看 | 操久久网| 人人干人人草 | 日本公妇在线观看 | 黄色免费av| 天天插日日射 | 在线视频麻豆 | 国产精品成人免费精品自在线观看 | 国产不卡精品 | 99精品乱码国产在线观看 | 精品国产一区二区三区男人吃奶 | 久久新视频 | 亚洲一级黄色大片 | 久久这里只有精品23 | 国产在线p | 久久综合婷婷国产二区高清 | 久久精品视频观看 | 在线亚洲午夜片av大片 | 四虎影视成人永久免费观看亚洲欧美 | 国产不卡免费视频 | 亚洲性xxxx| 亚洲精品免费播放 | 久久久久久网址 | 毛片播放网站 | 精品在线亚洲视频 | 亚洲精品福利视频 | 欧美怡红院 | 日韩不卡高清 | 97av免费视频 | 亚州av一区| 精品久久久久久综合日本 | 亚洲精品国产精品国自产 | 日韩黄色大片在线观看 | 成人黄性视频 | 亚洲精品视频在线观看网站 | 天天操天天干天天玩 | 色婷在线| 日韩理论 | 日韩va在线观看 | 国产一二区免费视频 | 日韩有码中文字幕在线 | 天堂va在线观看 | 亚洲精品国产品国语在线 | h动漫中文字幕 | 奇米影视777影音先锋 | a色视频 | 天天干天天做天天操 | 国产一区二区三精品久久久无广告 | 婷婷在线资源 | 91九色porn在线资源 | 伊人日日干| 久久九九视频 | 免费a v在线| 久久久久久久久艹 | 一区二区三区在线观看免费视频 | 久久亚洲福利视频 | 免费网站污| 亚洲精品视频偷拍 | 国产精品人成电影在线观看 | 中文字幕在线播放av | 亚洲一区日韩 | 欧美日韩一区三区 | 免费观看不卡av | 国产精品一区一区三区 | 亚洲人成人在线 | 丝袜美女视频网站 | 久久草草热国产精品直播 | 久久成人午夜视频 | 黄色小网站免费看 | 欧美激情第一区 | 日本久久久久久久久 | 2023年中文无字幕文字 | 国产日韩欧美在线影视 | 婷婷久操 | 九九久久久久久久久激情 | 美女精品 | 在线视频福利 | 色激情五月 | 国产精品久久嫩一区二区免费 | bbbb操bbbb| 91视频成人免费 | 国产精品乱码久久久久 | 中文字幕国语官网在线视频 | 欧美极品在线播放 | 99视频在线精品国自产拍免费观看 | 狠狠网亚洲精品 | 国产精华国产精品 | 黄色精品国产 | 97超碰影视 | 国产精品videossex国产高清 | 国产精品久久久久久久久久久久久 | 人人玩人人添人人 | 亚洲人片在线观看 | se视频网址 | 久久精品国产一区 | 亚洲视频一 | 日韩专区一区二区 | 日韩av女优视频 | av电影中文字幕 | 国产在线不卡视频 | 最近中文字幕高清字幕在线视频 | 日韩三级.com| 99久久精品无码一区二区毛片 | av在线一| 一区二区三区在线免费观看视频 | 黄网在线免费观看 | 亚洲成人av在线播放 | 日日操日日插 | 色综合色综合久久综合频道88 | 美女一二三区 | 人人爱天天操 | 中文字幕日韩伦理 | 精品在线播放视频 | 99久热在线精品视频观看 | 亚洲精品av在线 | 免费看v片网站 | 午夜在线看片 | 国产精品网红直播 | 国产精品一区二区在线播放 | 五月天婷婷视频 | 黄色在线观看污 | 日日爱夜夜爱 | 色偷偷88888欧美精品久久 | 国产黄色片久久久 | 探花视频免费观看高清视频 | 国产香蕉97碰碰久久人人 | 亚洲一级黄色大片 | 丁香六月久久综合狠狠色 | 国产一级免费在线观看 | 免费看的黄色 | 激情五月在线视频 | 日韩一区二区三区免费电影 | 综合久久一本 | 成人免费在线观看av | 婷婷狠狠操 | 午夜国产一区 | 天天天天综合 | 成人黄在线观看 | 天天综合人人 | 四虎在线免费观看视频 | 日韩高清在线看 | 91av色| 国产欧美最新羞羞视频在线观看 | 亚洲成av片人久久久 | 日韩在线视频国产 | 欧美在线视频一区二区 | 在线看岛国av | 天堂va在线观看 | 亚洲欧洲在线视频 | 日韩特黄一级欧美毛片特黄 | 久久成人在线视频 | 99久久99久久 | 久热av| 免费观看日韩 | 久久国产精品色婷婷 | 在线观看视频你懂的 | 国产99久 | 狂野欧美激情性xxxx | 成人一区二区三区在线 | 欧美国产不卡 | 亚洲精品美女久久久 | 亚洲电影一级黄 | 99精品99| 99视频一区 | 天堂视频中文在线 | 在线观看视频国产 | 夜色.com | 久久久久久久久久久电影 | 五月天六月丁香 | 精品在线播放视频 | 国产精品对白一区二区三区 | 精品96久久久久久中文字幕无 | 午夜av免费看 | 国产理论在线 | 久久久免费视频播放 | 精品国产三级 | 婷婷5月色 | 国产三级精品三级在线观看 | av.com在线 | 国产一级在线观看 | 在线中文字母电影观看 | 日女人免费视频 | 国产精品一区二区三区免费看 | 国产成人精品不卡 | 成人久久视频 | 天天爱天天色 | 久久成人综合 | 久草久草在线观看 | 欧美污污网站 | 97品白浆高清久久久久久 | 91久久精品一区二区二区 | 亚洲精品播放 | 欧美少妇影院 | 最新av电影网址 | 久草网在线 | 国产黄色片免费观看 | 在线免费观看黄 | 久久久久国产一区二区三区四区 | 久久国产一二区 | 亚洲一级特黄 | 91精品免费视频 | 亚洲另类视频在线观看 | 最近免费在线观看 | 久久久久区 | 综合中文字幕 | 成年人视频在线观看免费 | 国产黄色大全 | 中文字幕精品三区 | 日韩大片在线观看 | 天天干天天操天天操 | 成人在线观看影院 | 国产一二区在线观看 | 亚洲午夜精品一区二区三区电影院 | 亚洲综合激情网 | 国产手机在线观看视频 | 成年人在线视频观看 | 日本免费久久高清视频 | 999久久久久久久久久久 | 四虎欧美| 综合天天色| 手机在线永久免费观看av片 | 欧美在线a视频 | 色综合天天狠天天透天天伊人 | av在线播放观看 | 韩国三级一区 | 国内精品免费 | 五月激情综合婷婷 | 久草在线视频免费资源观看 | 久久国产精品影片 | 国产精品久久一卡二卡 | 91香蕉视频在线下载 | 日本资源中文字幕在线 | 国产高清绿奴videos | 日韩免费电影一区二区 | 婷婷丁香自拍 | 中文字幕在线乱 | 久久理论影院 | 久久夜色精品国产欧美一区麻豆 | 天天干天天操天天爱 | 四虎成人精品永久免费av | 亚洲欧美乱综合图片区小说区 | 黄色福利视频网站 | 91麻豆精品国产91久久久使用方法 | 有码一区二区三区 | 久久久久久久久久网站 | 久久国产综合视频 | 日韩午夜一级片 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 久久免费国产视频 | 成人中文字幕+乱码+中文字幕 | 成人久久亚洲 | 日本女人在线观看 | 日韩欧美一区视频 | 精品日韩在线 | 国产免费成人av | 久久在草| 亚洲午夜大片 | 久艹在线免费观看 | 在线看毛片网站 | 国产精品原创av片国产免费 | 在线免费观看的av | 精品久操| 国产 亚洲 欧美 在线 | 亚洲欧美精品一区 | 97成人超碰 | 成人91免费视频 | 国产精品99精品 | 日韩在线免费观看视频 | 国产精品久久久久久99 | 91大神电影 | 午夜一级免费电影 | 在线亚洲人成电影网站色www | 日韩久久一区二区 | 麻豆视频成人 | 久久久片| 激情视频一区 | 九九影视理伦片 | 久久99精品久久久久久 | 中文字幕在线观看国产 | 97精品久久人人爽人人爽 | 在线黄网站 | 奇米网8888| 91黄视频在线 | bayu135国产精品视频 | 日韩一级电影在线观看 | 色综合久久天天 | 日韩精品免费在线观看视频 | 国产裸体无遮挡 | 在线视频精品播放 | 96亚洲精品久久 | 亚洲美女免费精品视频在线观看 | av电影中文字幕在线观看 | 亚洲永久国产精品 | 天天干天天碰 | www.狠狠插.com | 日韩精品一区二区三区免费观看 | 久久久免费av | 欧美大片mv免费 | 亚洲成 人精品 | 日韩欧美在线不卡 | 久久久久免费网 | 久久免费视频8 | 久久成人免费电影 | 久久这里只有精品9 | 草免费视频 | 99热免费在线 | 成人一区二区三区在线 | 国产精品一区二区免费视频 | a在线观看免费视频 | 婷婷伊人网 | 黄色a大片| 日韩美女黄色片 | 亚洲日本激情 | 久久精品美女 | 99视频国产精品免费观看 | 婷婷色综合色 | 日韩欧美有码在线 | 成人午夜在线电影 | 国产精品一区二区三区在线 | 精品国产乱码久久久久久天美 | 成人午夜电影网 | 最新精品视频在线 | 国产a国产a国产a | 国产不卡视频在线 | 国产在线自 | 免费高清男女打扑克视频 | 国产精品99久久久久久宅男 | 国产xvideos免费视频播放 | 久久国产精品小视频 | 天天摸天天操天天舔 | www色,com| 久色婷婷| 三级黄色欧美 | 黄色免费网站 | 激情五月婷婷综合 | 2021国产精品视频 | 国产小视频在线 | 999热线在线观看 | 麻豆视屏 | 中文字幕在线乱 | 五月天色综合 | 亚洲男女精品 | 黄色大全免费观看 | 色吊丝在线永久观看最新版本 | 中文在线免费看视频 | 天天干人人干 | 久久久性 | 丁香六月欧美 | 色婷婷激情电影 | 亚洲欧美激情插 | 一区二区三区免费 | 激情综合网五月 | 国产九色91 | 国产精品涩涩屋www在线观看 | 国产精品视频999 | 看黄色91| 国产一区影院 | 国产青草视频在线观看 | 在线免费观看黄色av | 欧美成人精品三级在线观看播放 | 91av精品 | 在线影视 一区 二区 三区 | 国产午夜精品理论片在线 | 亚洲一区欧美激情 | 午夜aaaa| 亚洲做受高潮欧美裸体 | 黄色片免费在线 | 日韩一区正在播放 | 在线精品视频免费观看 | 久久久久久久久久免费视频 | 五月花婷婷 | 日韩资源在线播放 | 亚洲精品婷婷 | 久久国产精品久久精品国产演员表 | 国产伦精品一区二区三区在线 | 免费在线观看黄色网 | 色吧久久 | 99精品欧美一区二区 | 国产视频综合在线 | 天天色影院 | 久久99亚洲精品久久 | 精品久久久久久久久久 | 婷婷www | 成人动漫视频在线 | 五月天婷婷在线观看视频 | 亚洲精品91天天久久人人 | 美腿丝袜av | 玖玖在线视频观看 | 在线免费色视频 | 日韩成人xxxx| 国产美女主播精品一区二区三区 | 最新91在线视频 | 欧美视频在线观看免费网址 | 一区二区三区精品在线视频 | 日韩精品中文字幕av | 综合激情网 | 9992tv成人免费看片 | 日韩特黄av | av在线等 | 91视频在线免费看 | 亚洲精品久久久久中文字幕二区 | 欧美91在线 | 91在线小视频 | 成人一区二区在线 | 91福利视频免费 | 国产在线永久 | 亚洲精品在线视频网站 | 在线看小早川怜子av | 欧美日韩二区在线 | 色资源中文字幕 | 免费看的毛片 | 欧美一级日韩三级 | 久久伊人八月婷婷综合激情 | 亚洲精品乱码久久久久久写真 | 久久精品永久免费 | av在线播放免费 | 久久人人爽人人爽人人片av软件 | 高清在线一区 | 九九在线视频 | 在线观看免费版高清版 | 最新日韩视频在线观看 | 亚洲精品黄色 | 国产黄色成人av | 日韩综合色| 美女视频黄免费 | 在线播放你懂 | 婷婷日日| 天堂va在线高清一区 | 欧美另类69 | 中文字幕第一页在线vr | 国产视频一区在线 | 欧美午夜精品久久久久久浪潮 | 久久伊99综合婷婷久久伊 | 中文字幕一区二区三区四区久久 | 玖玖在线观看视频 | 久久国内精品视频 | 丁香六月国产 | 99久久精品免费看国产免费软件 | 综合色在线观看 | 日韩av在线影视 | 国产夫妻性生活自拍 | 免费色黄 | 成人av在线电影 | 免费视频97 | 免费97视频| 亚洲最大av网站 | 久久96国产精品久久99软件 | 免费黄av| 欧美激情综合网 | 国产色婷婷精品综合在线手机播放 | 成人高清在线观看 | 丁香婷婷色月天 | 三级黄色网络 | 久草在线| 深夜免费福利网站 | 国产成人久久av免费高清密臂 | 黄色成人免费电影 | 久草视频在线播放 | 99精品国产一区二区三区不卡 | 三上悠亚在线免费 | 视频一区二区国产 | 狠狠干综合 | av成人免费观看 | 亚洲一区二区视频在线播放 | 日韩影片在线观看 | 操操操操网 | 在线日韩中文字幕 | 亚洲高清在线视频 | 免费下载高清毛片 | 在线黄色国产 | 国产精品第十页 | 日本在线观看一区 | 97成人精品视频在线播放 | 久久久一本精品99久久精品66 | 久久66热这里只有精品 | 欧美成人按摩 | 日韩v在线91成人自拍 | 国产小视频在线免费观看 | 一区二区三区在线不卡 | 男女啪啪免费网站 | 久久精品艹 | 人人干人人艹 | 欧美日韩伦理一区 | 香蕉久草| 国产成人在线免费观看 | 最近中文国产在线视频 | 免费久久精品视频 | 天天干夜夜操视频 | 激情综合网天天干 | 午夜精品一区二区三区四区 | 中文av在线天堂 | 精品少妇一区二区三区在线 | 精品99在线视频 | 狠狠操91| 欧美国产日韩激情 | 韩国精品视频在线观看 | 国产免费区 | 国产一区在线观看视频 | 夜夜高潮夜夜爽国产伦精品 | 国产高清在线精品 | 最新极品jizzhd欧美 | 久久精品国产免费看久久精品 | 久久久精品亚洲 | 国产不卡高清 | 久久久久久久久久久福利 | 精品国产免费一区二区三区五区 | 这里只有精彩视频 | 免费黄色av.| 国产九九精品 | 成人av片在线观看 | 99久久久久久久久久 | 国内精品久久久精品电影院 | 不卡日韩av| 色综合欧洲 | 欧美一级在线观看视频 | 中文字幕在线观看视频一区二区三区 | 欧洲精品二区 | 911av视频 | 中文字幕在线播放日韩 | 国产精品久久久久久久久久三级 | 日本一区二区免费在线观看 | 国产精品大全 | 黄色av免费 | 国产电影黄色av | 欧美极品少妇xxxx | av电影免费在线看 | 日产乱码一二三区别免费 | 久久久久久久久久影院 | 国产精品一区二区白浆 | 国产精品久久久 | 色狠狠一区二区 | 精品国产一区二区三区四区在线观看 | 久久99亚洲热视 | 亚洲成a人片在线观看网站口工 | 日日婷婷夜日日天干 | 最新一区二区三区 | av永久网址| 热久久免费视频 | 免费看黄色小说的网站 | 婷婷丁香花 | 亚洲精品久久久久久国 | 97超碰精品 | 五月天久久精品 | 久久字幕精品一区 | 999ZYZ玖玖资源站永久 | 99久久精品国 | 国产精品久久久久一区 | 国产69精品久久久久久久久久 | 日韩国产欧美在线视频 | 免费看成人片 | 超碰在线观看97 | 天堂视频一区 | 欧美福利视频一区 | 91精品国产99久久久久久红楼 | 国产探花在线看 | 免费的国产精品 | 欧美日韩国产精品一区二区 | 久久精品一| 一区在线观看视频 | 日韩精品一卡 | 国产精品成人免费精品自在线观看 | 国产综合视频在线观看 | 午夜精品一区二区三区可下载 | 久久久久久久久久电影 | 91在线www | 国产激情小视频在线观看 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 一区二区激情 | 九九九九精品 | 国产探花视频在线播放 | 97免费视频在线 | 欧美激情综合五月色丁香小说 | 精品一二三四五区 | 超碰在线91 | av黄色免费在线观看 | 国产成人一区二区三区免费看 | 国产成人精品一区二区三区免费 | 婷婷久操 | 亚洲综合视频在线播放 | 久久国产视频网站 | 国内精品久久久久影院一蜜桃 | 欧美日韩国产一二三区 | 免费观看国产视频 | 亚洲精品xx| 性色va| 免费成人黄色片 | 91成年视频| 欧美在线观看视频 | 2023亚洲精品国偷拍自产在线 | 日韩免费视频播放 | 激情丁香综合五月 | 中文字幕资源在线观看 | 91福利在线观看 | 日韩av在线一区二区 | 久久国产网站 | 美女在线观看av | 国产精品久久久影视 | 国产一区二区成人 | 欧美大片大全 | 亚洲在线日韩 | 国产福利一区在线观看 | 狠狠狠干 | www亚洲视频| 亚洲国产精品久久久久婷婷884 | 91视频在线观看大全 | 国产成人久久久久 | 国产精品大片在线观看 | 丁香激情网 | 免费高清看电视网站 | 又黄又爽的视频在线观看网站 | 国产精品字幕 | 毛片网在线播放 | 在线观看午夜av | 欧美有色 | 91av网站在线观看 | 国产精品国产三级国产 | 免费视频三区 | 美女网站视频免费黄 | 一区二区三区在线播放 | 国产一卡久久电影永久 | 亚洲精品国产欧美在线观看 | 99热.com| 日韩中文字幕免费看 | 亚洲女人av| 天天综合婷婷 | 日女人电影 | 狠狠夜夜 | 久久国产精品二国产精品中国洋人 | 日日操操操 | 肉色欧美久久久久久久免费看 | 亚洲免费国产视频 | 国产精品美女久久久久久 | 国产精品一区二区三区久久 | 99精品免费久久久久久久久日本 | 看av免费| 天天躁天天躁天天躁婷 | 久久久久蜜桃 |