日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ray.tune可视化调整超参数Tensorflow 2.0

發布時間:2025/3/11 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ray.tune可视化调整超参数Tensorflow 2.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


Ray.tune官方文檔

調整超參數通常是機器學習工作流程中最昂貴的部分。 Tune專為解決此問題而設計,展示了針對此痛點的有效且可擴展的解決方案。 請注意,此示例取決于Tensorflow 2.0。
Code: ray/python/ray/tune at master · ray-project/ray · GitHub

Examples: https://github.com/ray-project/ray/tree/master/python/ray/tune/examples)

Documentation: Tune: Scalable Hyperparameter Tuning — Ray v1.6.0

Mailing List: https://groups.google.com/forum/#!forum/ray-dev

## If you are running on Google Colab, uncomment below to install the necessary dependencies ## before beginning the exercise.# print("Setting up colab environment") # !pip uninstall -y -q pyarrow # !pip install -q https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray-0.8.0.dev5-cp36-cp36m-manylinux1_x86_64.whl # !pip install -q ray[debug]# # A hack to force the runtime to restart, needed to include the above dependencies. # print("Done installing! Restarting via forced crash (this is not an issue).") # import os # os._exit(0) ## If you are running on Google Colab, please install TensorFlow 2.0 by uncommenting below..# try: # # %tensorflow_version only exists in Colab. # %tensorflow_version 2.x # except Exception: # pass

本教程將逐步介紹使用Tune進行超參數調整的幾個關鍵步驟。

  • 可視化數據。
  • 創建模型訓練過程(使用Keras)。
  • 通過調整上述模型訓練過程以使用Tune來調整模型。
  • 分析Tune創建的模型。
  • 請注意,這使用了Tune的基于函數的API。 這主要是用于原型制作。 后面的教程將介紹Tune更加強大的基于類的可訓練 API。

    import numpy as np np.random.seed(0)import tensorflow as tf try:tf.get_logger().setLevel('INFO') except Exception as exc:print(exc) import warnings warnings.simplefilter("ignore")from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Densefrom tensorflow.keras.optimizers import SGD, Adam from tensorflow.keras.callbacks import ModelCheckpointimport ray from ray import tune from ray.tune.examples.utils import get_iris_dataimport inspect import pandas as pd import matplotlib.pyplot as plt plt.style.use('ggplot') %matplotlib inline


    Visualize your data

    首先讓我們看一下數據集的分布。

    鳶尾花數據集由3種不同類型的鳶尾花(Setosa,Versicolour和Virginica)的花瓣和萼片長度組成,存儲在150x4 numpy中。

    行為樣本,列為:隔片長度,隔片寬度,花瓣長度和花瓣寬度。


    本教程的目標是提供一個模型,該模型可以準確地預測給定的萼片長度,萼片寬度,花瓣長度和花瓣寬度4元組的真實標簽。

    from sklearn.datasets import load_irisiris = load_iris() true_data = iris['data'] true_label = iris['target'] names = iris['target_names'] feature_names = iris['feature_names']def plot_data(X, y):# Visualize the data setsplt.figure(figsize=(16, 6))plt.subplot(1, 2, 1)for target, target_name in enumerate(names):X_plot = X[y == target]plt.plot(X_plot[:, 0], X_plot[:, 1], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[0])plt.ylabel(feature_names[1])plt.axis('equal')plt.legend();plt.subplot(1, 2, 2)for target, target_name in enumerate(names):X_plot = X[y == target]plt.plot(X_plot[:, 2], X_plot[:, 3], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[2])plt.ylabel(feature_names[3])plt.axis('equal')plt.legend();plot_data(true_data, true_label)


    創建模型訓練過程(使用Keras)

    現在,讓我們定義一個函數,該函數將包含一些超參數并返回一個可用于訓練的模型。

    def create_model(learning_rate, dense_1, dense_2):assert learning_rate > 0 and dense_1 > 0 and dense_2 > 0, "Did you set the right configuration?"model = Sequential()model.add(Dense(int(dense_1), input_shape=(4,), activation='relu', name='fc1'))model.add(Dense(int(dense_2), activation='relu', name='fc2'))model.add(Dense(3, activation='softmax', name='output'))optimizer = SGD(lr=learning_rate)model.compile(optimizer, loss='categorical_crossentropy', metrics=['accuracy'])return model

    下面是一個使用create_model函數訓練模型并返回訓練后的模型的函數。

    def train_on_iris():train_x, train_y, test_x, test_y = get_iris_data()model = create_model(learning_rate=0.1, dense_1=2, dense_2=2)# This saves the top model. `accuracy` is only available in TF2.0.checkpoint_callback = ModelCheckpoint("model.h5", monitor='accuracy', save_best_only=True, save_freq=2)# Train the modelmodel.fit(train_x, train_y, validation_data=(test_x, test_y),verbose=0, batch_size=10, epochs=20, callbacks=[checkpoint_callback])return model

    讓我們在數據集中快速訓練模型。 準確性應該很低。

    original_model = train_on_iris() # This trains the model and returns it. train_x, train_y, test_x, test_y = get_iris_data() original_loss, original_accuracy = original_model.evaluate(test_x, test_y, verbose=0) print("Loss is {:0.4f}".format(original_loss)) print("Accuracy is {:0.4f}".format(original_accuracy))


    與tune整合

    現在,讓我們使用Tune優化學習鳶尾花分類的模型。 這將分為兩個部分-修改訓練功能以支持Tune,然后配置Tune。

    讓我們首先定義一個回調函數,以將中間訓練進度報告回Tune。

    import tensorflow.keras as keras from ray.tune import trackclass TuneReporterCallback(keras.callbacks.Callback):"""Tune Callback for Keras.The callback is invoked every epoch."""def __init__(self, logs={}):self.iteration = 0super(TuneReporterCallback, self).__init__()def on_epoch_end(self, batch, logs={}):self.iteration += 1track.log(keras_info=logs, mean_accuracy=logs.get("accuracy"), mean_loss=logs.get("loss"))


    整合第1部分:修改訓練功能

    說明按照接下來的2個步驟來修改train_iris函數以支持Tune。

  • 更改函數的簽名以接收超參數字典。 該函數將在Ray上調用。
    def tune_iris(config)
  • 將配置值傳遞到create_model中:
    model = create_model(learning_rate=config["lr"], dense_1=config["dense_1"], dense_2=config["dense_2"])
  • def tune_iris(): # TODO: Change me.train_x, train_y, test_x, test_y = get_iris_data()model = create_model(learning_rate=0, dense_1=0, dense_2=0) # TODO: Change me.checkpoint_callback = ModelCheckpoint("model.h5", monitor='loss', save_best_only=True, save_freq=2)# Enable Tune to make intermediate decisions by using a Tune Callback hook. This is Keras specific.callbacks = [checkpoint_callback, TuneReporterCallback()]# Train the modelmodel.fit(train_x, train_y, validation_data=(test_x, test_y),verbose=0, batch_size=10, epochs=20, callbacks=callbacks)assert len(inspect.getargspec(tune_iris).args) == 1, "The `tune_iris` function needs to take in the arg `config`."print("Test-running to make sure this function will run correctly.") tune.track.init() # For testing purposes only. tune_iris({"lr": 0.1, "dense_1": 4, "dense_2": 4}) print("Success!")


    第2部分:配置Tune以調整超參數。

    說明按照接下來的2個步驟來配置Tune,以識別頂部的超參數。

  • 指定超參數空間。
    hyperparameter_space = { "lr": tune.loguniform(0.001, 0.1), "dense_1": tune.uniform(2, 128), "dense_2": tune.uniform(2, 128), }
  • 增加樣品數量。 我們評估的試驗越多,選擇好的模型的機會就越大。
    num_samples = 20

  • 常見問題:并行在Tune中如何工作?

    設置num_samples將總共運行20個試驗(超參數配置示例)。 但是,并非所有這些都可以一次運行。 最大訓練并發性是您正在運行的計算機上的CPU內核數。 對于2核機器,將同時訓練2個模型。 完成后,新的訓練過程將從新的超參數配置示例開始。

    每個試用版都將在新的Python進程上運行。 試用結束后,python進程將被殺死。


    常見問題解答:如何調試Tune中的內容?

    錯誤文件列將顯示在輸出中。 運行下面帶有錯誤文件路徑路徑的單元格以診斷您的問題。
    ! cat /home/ubuntu/tune_iris/tune_iris_c66e1100_2019-10-09_17-13-24x_swb9xs/error_2019-10-09_17-13-29.txt


    啟動Tune超參數搜索

    # This seeds the hyperparameter sampling. import numpy as np; np.random.seed(5) hyperparameter_space = {} # TODO: Fill me out. num_samples = 1 # TODO: Fill me out.#################################################################################################### ################ This is just a validation function for tutorial purposes only. #################### HP_KEYS = ["lr", "dense_1", "dense_2"] assert all(key in hyperparameter_space for key in HP_KEYS), ("The hyperparameter space is not fully designated. It must include all of {}".format(HP_KEYS)) ######################################################################################################ray.shutdown() # Restart Ray defensively in case the ray connection is lost. ray.init(log_to_driver=False) # We clean out the logs before running for a clean visualization later. ! rm -rf ~/ray_results/tune_irisanalysis = tune.run(tune_iris, verbose=1, config=hyperparameter_space,num_samples=num_samples)assert len(analysis.trials) == 20, "Did you set the correct number of samples?"


    分析最佳調整的模型

    讓我們將真實標簽與分類標簽進行比較。

    _, _, test_data, test_labels = get_iris_data() plot_data(test_data, test_labels.argmax(1)) # Obtain the directory where the best model is saved. print("You can use any of the following columns to get the best model: \n{}.".format([k for k in analysis.dataframe() if k.startswith("keras_info")])) print("=" * 10) logdir = analysis.get_best_logdir("keras_info/val_loss", mode="min") # We saved the model as `model.h5` in the logdir of the trial. from tensorflow.keras.models import load_model tuned_model = load_model(logdir + "/model.h5")tuned_loss, tuned_accuracy = tuned_model.evaluate(test_data, test_labels, verbose=0) print("Loss is {:0.4f}".format(tuned_loss)) print("Tuned accuracy is {:0.4f}".format(tuned_accuracy)) print("The original un-tuned model had an accuracy of {:0.4f}".format(original_accuracy)) predicted_label = tuned_model.predict(test_data) plot_data(test_data, predicted_label.argmax(1))

    我們可以通過可視化與基本事實相比較的預測來比較最佳模型的性能。

    def plot_comparison(X, y):# Visualize the data setsplt.figure(figsize=(16, 6))plt.subplot(1, 2, 1)for target, target_name in enumerate(["Incorrect", "Correct"]):X_plot = X[y == target]plt.plot(X_plot[:, 0], X_plot[:, 1], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[0])plt.ylabel(feature_names[1])plt.axis('equal')plt.legend();plt.subplot(1, 2, 2)for target, target_name in enumerate(["Incorrect", "Correct"]):X_plot = X[y == target]plt.plot(X_plot[:, 2], X_plot[:, 3], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[2])plt.ylabel(feature_names[3])plt.axis('equal')plt.legend();plot_comparison(test_data, test_labels.argmax(1) == predicted_label.argmax(1))


    額外-使用Tensorboard獲得結果

    您可以使用TensorBoard查看試用表演。 如果未加載圖形,請單擊“切換所有運行”。

    %load_ext tensorboard %load_ext tensorboard


    Ray.tune官方文檔

    調整超參數通常是機器學習工作流程中最昂貴的部分。 Tune專為解決此問題而設計,展示了針對此痛點的有效且可擴展的解決方案。 請注意,此示例取決于Tensorflow 2.0。
    Code: ray/python/ray/tune at master · ray-project/ray · GitHub

    Examples: https://github.com/ray-project/ray/tree/master/python/ray/tune/examples)

    Documentation: Tune: Scalable Hyperparameter Tuning — Ray v1.6.0

    Mailing List: https://groups.google.com/forum/#!forum/ray-dev

    ## If you are running on Google Colab, uncomment below to install the necessary dependencies ## before beginning the exercise.# print("Setting up colab environment") # !pip uninstall -y -q pyarrow # !pip install -q https://s3-us-west-2.amazonaws.com/ray-wheels/latest/ray-0.8.0.dev5-cp36-cp36m-manylinux1_x86_64.whl # !pip install -q ray[debug]# # A hack to force the runtime to restart, needed to include the above dependencies. # print("Done installing! Restarting via forced crash (this is not an issue).") # import os # os._exit(0) ## If you are running on Google Colab, please install TensorFlow 2.0 by uncommenting below..# try: # # %tensorflow_version only exists in Colab. # %tensorflow_version 2.x # except Exception: # pass

    本教程將逐步介紹使用Tune進行超參數調整的幾個關鍵步驟。

  • 可視化數據。
  • 創建模型訓練過程(使用Keras)。
  • 通過調整上述模型訓練過程以使用Tune來調整模型。
  • 分析Tune創建的模型。
  • 請注意,這使用了Tune的基于函數的API。 這主要是用于原型制作。 后面的教程將介紹Tune更加強大的基于類的可訓練 API。

    import numpy as np np.random.seed(0)import tensorflow as tf try:tf.get_logger().setLevel('INFO') except Exception as exc:print(exc) import warnings warnings.simplefilter("ignore")from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Densefrom tensorflow.keras.optimizers import SGD, Adam from tensorflow.keras.callbacks import ModelCheckpointimport ray from ray import tune from ray.tune.examples.utils import get_iris_dataimport inspect import pandas as pd import matplotlib.pyplot as plt plt.style.use('ggplot') %matplotlib inline


    Visualize your data

    首先讓我們看一下數據集的分布。

    鳶尾花數據集由3種不同類型的鳶尾花(Setosa,Versicolour和Virginica)的花瓣和萼片長度組成,存儲在150x4 numpy中。

    行為樣本,列為:隔片長度,隔片寬度,花瓣長度和花瓣寬度。

    本教程的目標是提供一個模型,該模型可以準確地預測給定的萼片長度,萼片寬度,花瓣長度和花瓣寬度4元組的真實標簽。

    from sklearn.datasets import load_irisiris = load_iris() true_data = iris['data'] true_label = iris['target'] names = iris['target_names'] feature_names = iris['feature_names']def plot_data(X, y):# Visualize the data setsplt.figure(figsize=(16, 6))plt.subplot(1, 2, 1)for target, target_name in enumerate(names):X_plot = X[y == target]plt.plot(X_plot[:, 0], X_plot[:, 1], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[0])plt.ylabel(feature_names[1])plt.axis('equal')plt.legend();plt.subplot(1, 2, 2)for target, target_name in enumerate(names):X_plot = X[y == target]plt.plot(X_plot[:, 2], X_plot[:, 3], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[2])plt.ylabel(feature_names[3])plt.axis('equal')plt.legend();plot_data(true_data, true_label)
    • 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


    創建模型訓練過程(使用Keras)

    現在,讓我們定義一個函數,該函數將包含一些超參數并返回一個可用于訓練的模型。

    def create_model(learning_rate, dense_1, dense_2):assert learning_rate > 0 and dense_1 > 0 and dense_2 > 0, "Did you set the right configuration?"model = Sequential()model.add(Dense(int(dense_1), input_shape=(4,), activation='relu', name='fc1'))model.add(Dense(int(dense_2), activation='relu', name='fc2'))model.add(Dense(3, activation='softmax', name='output'))optimizer = SGD(lr=learning_rate)model.compile(optimizer, loss='categorical_crossentropy', metrics=['accuracy'])return model
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    下面是一個使用create_model函數訓練模型并返回訓練后的模型的函數。

    def train_on_iris():train_x, train_y, test_x, test_y = get_iris_data()model = create_model(learning_rate=0.1, dense_1=2, dense_2=2)# This saves the top model. `accuracy` is only available in TF2.0.checkpoint_callback = ModelCheckpoint("model.h5", monitor='accuracy', save_best_only=True, save_freq=2)# Train the modelmodel.fit(train_x, train_y, validation_data=(test_x, test_y),verbose=0, batch_size=10, epochs=20, callbacks=[checkpoint_callback])return model

    讓我們在數據集中快速訓練模型。 準確性應該很低。

    original_model = train_on_iris() # This trains the model and returns it. train_x, train_y, test_x, test_y = get_iris_data() original_loss, original_accuracy = original_model.evaluate(test_x, test_y, verbose=0) print("Loss is {:0.4f}".format(original_loss)) print("Accuracy is {:0.4f}".format(original_accuracy))
    • 1
    • 2
    • 3
    • 4
    • 5


    與tune整合

    現在,讓我們使用Tune優化學習鳶尾花分類的模型。 這將分為兩個部分-修改訓練功能以支持Tune,然后配置Tune。

    讓我們首先定義一個回調函數,以將中間訓練進度報告回Tune。

    import tensorflow.keras as keras from ray.tune import trackclass TuneReporterCallback(keras.callbacks.Callback):"""Tune Callback for Keras.The callback is invoked every epoch."""def __init__(self, logs={}):self.iteration = 0super(TuneReporterCallback, self).__init__()def on_epoch_end(self, batch, logs={}):self.iteration += 1track.log(keras_info=logs, mean_accuracy=logs.get("accuracy"), mean_loss=logs.get("loss"))

    整合第1部分:修改訓練功能

    說明按照接下來的2個步驟來修改train_iris函數以支持Tune。

  • 更改函數的簽名以接收超參數字典。 該函數將在Ray上調用。
    def tune_iris(config)
  • 將配置值傳遞到create_model中:
    model = create_model(learning_rate=config["lr"], dense_1=config["dense_1"], dense_2=config["dense_2"])
  • def tune_iris(): # TODO: Change me.train_x, train_y, test_x, test_y = get_iris_data()model = create_model(learning_rate=0, dense_1=0, dense_2=0) # TODO: Change me.checkpoint_callback = ModelCheckpoint("model.h5", monitor='loss', save_best_only=True, save_freq=2)# Enable Tune to make intermediate decisions by using a Tune Callback hook. This is Keras specific.callbacks = [checkpoint_callback, TuneReporterCallback()]# Train the modelmodel.fit(train_x, train_y, validation_data=(test_x, test_y),verbose=0, batch_size=10, epochs=20, callbacks=callbacks)assert len(inspect.getargspec(tune_iris).args) == 1, "The `tune_iris` function needs to take in the arg `config`."print("Test-running to make sure this function will run correctly.") tune.track.init() # For testing purposes only. tune_iris({"lr": 0.1, "dense_1": 4, "dense_2": 4}) print("Success!")

    第2部分:配置Tune以調整超參數。

    說明按照接下來的2個步驟來配置Tune,以識別頂部的超參數。

  • 指定超參數空間。
    hyperparameter_space = { "lr": tune.loguniform(0.001, 0.1), "dense_1": tune.uniform(2, 128), "dense_2": tune.uniform(2, 128), }
  • 增加樣品數量。 我們評估的試驗越多,選擇好的模型的機會就越大。
    num_samples = 20
  • 常見問題:并行在Tune中如何工作?

    設置num_samples將總共運行20個試驗(超參數配置示例)。 但是,并非所有這些都可以一次運行。 最大訓練并發性是您正在運行的計算機上的CPU內核數。 對于2核機器,將同時訓練2個模型。 完成后,新的訓練過程將從新的超參數配置示例開始。

    每個試用版都將在新的Python進程上運行。 試用結束后,python進程將被殺死。

    常見問題解答:如何調試Tune中的內容?

    錯誤文件列將顯示在輸出中。 運行下面帶有錯誤文件路徑路徑的單元格以診斷您的問題。
    ! cat /home/ubuntu/tune_iris/tune_iris_c66e1100_2019-10-09_17-13-24x_swb9xs/error_2019-10-09_17-13-29.txt


    啟動Tune超參數搜索

    # This seeds the hyperparameter sampling. import numpy as np; np.random.seed(5) hyperparameter_space = {} # TODO: Fill me out. num_samples = 1 # TODO: Fill me out.#################################################################################################### ################ This is just a validation function for tutorial purposes only. #################### HP_KEYS = ["lr", "dense_1", "dense_2"] assert all(key in hyperparameter_space for key in HP_KEYS), ("The hyperparameter space is not fully designated. It must include all of {}".format(HP_KEYS)) ######################################################################################################ray.shutdown() # Restart Ray defensively in case the ray connection is lost. ray.init(log_to_driver=False) # We clean out the logs before running for a clean visualization later. ! rm -rf ~/ray_results/tune_irisanalysis = tune.run(tune_iris, verbose=1, config=hyperparameter_space,num_samples=num_samples)assert len(analysis.trials) == 20, "Did you set the correct number of samples?"


    分析最佳調整的模型

    讓我們將真實標簽與分類標簽進行比較。

    _, _, test_data, test_labels = get_iris_data() plot_data(test_data, test_labels.argmax(1)) # Obtain the directory where the best model is saved. print("You can use any of the following columns to get the best model: \n{}.".format([k for k in analysis.dataframe() if k.startswith("keras_info")])) print("=" * 10) logdir = analysis.get_best_logdir("keras_info/val_loss", mode="min") # We saved the model as `model.h5` in the logdir of the trial. from tensorflow.keras.models import load_model tuned_model = load_model(logdir + "/model.h5")tuned_loss, tuned_accuracy = tuned_model.evaluate(test_data, test_labels, verbose=0) print("Loss is {:0.4f}".format(tuned_loss)) print("Tuned accuracy is {:0.4f}".format(tuned_accuracy)) print("The original un-tuned model had an accuracy of {:0.4f}".format(original_accuracy)) predicted_label = tuned_model.predict(test_data) plot_data(test_data, predicted_label.argmax(1))

    我們可以通過可視化與基本事實相比較的預測來比較最佳模型的性能。

    def plot_comparison(X, y):# Visualize the data setsplt.figure(figsize=(16, 6))plt.subplot(1, 2, 1)for target, target_name in enumerate(["Incorrect", "Correct"]):X_plot = X[y == target]plt.plot(X_plot[:, 0], X_plot[:, 1], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[0])plt.ylabel(feature_names[1])plt.axis('equal')plt.legend();plt.subplot(1, 2, 2)for target, target_name in enumerate(["Incorrect", "Correct"]):X_plot = X[y == target]plt.plot(X_plot[:, 2], X_plot[:, 3], linestyle='none', marker='o', label=target_name)plt.xlabel(feature_names[2])plt.ylabel(feature_names[3])plt.axis('equal')plt.legend();plot_comparison(test_data, test_labels.argmax(1) == predicted_label.argmax(1))

    額外-使用Tensorboard獲得結果

    如上述博客有任何錯誤或者疑問,請加VX:1755337994,及時告知!萬分感激!?

    您可以使用TensorBoard查看試用表演。

    總結

    以上是生活随笔為你收集整理的Ray.tune可视化调整超参数Tensorflow 2.0的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91av短视频| 亚洲91网站 | 99re在线视频免费观看 | 黄色免费在线播放 | 欧洲女女同videos | 国产美女喷水视频 | 日韩欧美大片在线观看 | 成 年 人 黄 色 大 片大 全 | av手机在线免费观看 | 三浦惠理子aⅴ一二三区 | 欧美射射 | 久操视频在线观看 | 日韩电影中文字幕在线观看 | 人妻夜夜爽天天爽三区麻豆av网站 | 久久亚洲无码视频 | 国产午夜啪啪 | 美女网站黄频 | 色先锋影院| 日韩有码第一页 | 国产又猛又粗 | 久久都是精品 | 少妇一区二区三区四区 | 99成人在线 | 黄色日韩网站 | 黄色网址多少 | 韩日午夜在线资源一区二区 | 婷婷射| 亚洲精品无amm毛片 国内一区二区三区 | 色欲av无码一区二区三区 | 插插插色综合 | 天堂一区在线观看 | 中文字幕一区二区三区乱码人妻 | 中文在线а√天堂 | 亚洲天天操 | a级片在线 | 特黄大片又粗又大又暴 | 黄色一级带 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 国产女上位 | 香蕉国产精品视频 | 亚洲第一二三四区 | www.桃色| 国产丝袜视频在线 | 少妇一级淫片免费播放 | 成人99| 另类激情亚洲 | 激情综合丁香五月 | 激情图片在线观看 | 一本大道伊人av久久综合 | 97精品人妻一区二区三区蜜桃 | 日本 片 成人 在线 九色麻豆 | 一级特黄特色的免费大片视频 | 贝利弗山的秘密1985版免费观看 | 国产精品久久久久91 | 黄色小视频免费 | 女同动漫免费观看高清完整版在线观看 | 久久精品国产网红主播 | 三级在线免费 | 四虎国产精品永久免费观看视频 | 777久久久精品一区二区三区 | 少妇中文字幕 | 激情五月色播五月 | 国产精品无码成人网站视频 | 欧美性猛交xxxx黑人 | 精品久久久久久久久久岛国gif | 国产午夜视频 | 另类图片亚洲色图 | 国产女上位| 国产精品丝袜在线 | 少妇熟女高潮流白浆 | 国产成人无码久久久精品天美传媒 | 又大又粗又爽18禁免费看 | 在线视频区 | 日韩欧美精品一区 | av免费入口| 青青草原国产在线 | 欧美成人一区在线观看 | 人人艹在线观看 | 性xxxfllreexxx少妇| 奇米四色777 | 亚洲无吗一区二区三区 | 午夜精品99 | 日本国产中文字幕 | 国产精品porn | free性护士vidos猛交 | 亚洲欧洲精品在线 | 97xxxxx| 91一区二区视频 | 9i看片成人免费高清 | 一级a性色生活片久久无 | 成人黄色网址在线观看 | 日本亚洲欧美在线 | 欧美激情区 | 日韩欧美小视频 | 中国在线观看视频高清免费 | 色偷偷中文字幕 | 国产色爽 | 无码国产精品高潮久久99 | 精品欧美日韩 |