校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > TensorFlow2.0使用keras訓練模型的實現

TensorFlow2.0使用keras訓練模型的實現

熱門標簽:鎮江人工外呼系統供應商 千呼ai電話機器人免費 高德地圖標注字母 深圳網絡外呼系統代理商 400電話辦理費用收費 外呼系統前面有錄音播放嗎 柳州正規電銷機器人收費 申請辦個400電話號碼 騰訊地圖標注有什么版本

1.一般的模型構造、訓練、測試流程

# 模型構造
inputs = keras.Input(shape=(784,), name='mnist_input')
h1 = layers.Dense(64, activation='relu')(inputs)
h1 = layers.Dense(64, activation='relu')(h1)
outputs = layers.Dense(10, activation='softmax')(h1)
model = keras.Model(inputs, outputs)
# keras.utils.plot_model(model, 'net001.png', show_shapes=True)

model.compile(optimizer=keras.optimizers.RMSprop(),
    loss=keras.losses.SparseCategoricalCrossentropy(),
    metrics=[keras.metrics.SparseCategoricalAccuracy()])

# 載入數據
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(60000, 784).astype('float32') /255
x_test = x_test.reshape(10000, 784).astype('float32') /255

x_val = x_train[-10000:]
y_val = y_train[-10000:]

x_train = x_train[:-10000]
y_train = y_train[:-10000]

# 訓練模型
history = model.fit(x_train, y_train, batch_size=64, epochs=3,
   validation_data=(x_val, y_val))
print('history:')
print(history.history)

result = model.evaluate(x_test, y_test, batch_size=128)
print('evaluate:')
print(result)
pred = model.predict(x_test[:2])
print('predict:')
print(pred)

2.自定義損失和指標

自定義指標只需繼承Metric類, 并重寫一下函數

_init_(self),初始化。

update_state(self,y_true,y_pred,sample_weight = None),它使用目標y_true和模型預測y_pred來更新狀態變量。

result(self),它使用狀態變量來計算最終結果。

reset_states(self),重新初始化度量的狀態。

# 這是一個簡單的示例,顯示如何實現CatgoricalTruePositives指標,該指標計算正確分類為屬于給定類的樣本數量

class CatgoricalTruePostives(keras.metrics.Metric):
 def __init__(self, name='binary_true_postives', **kwargs):
  super(CatgoricalTruePostives, self).__init__(name=name, **kwargs)
  self.true_postives = self.add_weight(name='tp', initializer='zeros')
  
 def update_state(self, y_true, y_pred, sample_weight=None):
  y_pred = tf.argmax(y_pred)
  y_true = tf.equal(tf.cast(y_pred, tf.int32), tf.cast(y_true, tf.int32))
  
  y_true = tf.cast(y_true, tf.float32)
  
  if sample_weight is not None:
   sample_weight = tf.cast(sample_weight, tf.float32)
   y_true = tf.multiply(sample_weight, y_true)
   
  return self.true_postives.assign_add(tf.reduce_sum(y_true))
 
 def result(self):
  return tf.identity(self.true_postives)
 
 def reset_states(self):
  self.true_postives.assign(0.)
  

model.compile(optimizer=keras.optimizers.RMSprop(1e-3),
    loss=keras.losses.SparseCategoricalCrossentropy(),
    metrics=[CatgoricalTruePostives()])

model.fit(x_train, y_train,
   batch_size=64, epochs=3)
# 以定義網絡層的方式添加網絡loss
class ActivityRegularizationLayer(layers.Layer):
 def call(self, inputs):
  self.add_loss(tf.reduce_sum(inputs) * 0.1)
  return inputs

inputs = keras.Input(shape=(784,), name='mnist_input')
h1 = layers.Dense(64, activation='relu')(inputs)
h1 = ActivityRegularizationLayer()(h1)
h1 = layers.Dense(64, activation='relu')(h1)
outputs = layers.Dense(10, activation='softmax')(h1)
model = keras.Model(inputs, outputs)
# keras.utils.plot_model(model, 'net001.png', show_shapes=True)

model.compile(optimizer=keras.optimizers.RMSprop(),
    loss=keras.losses.SparseCategoricalCrossentropy(),
    metrics=[keras.metrics.SparseCategoricalAccuracy()])
model.fit(x_train, y_train, batch_size=32, epochs=1)
# 也可以以定義網絡層的方式添加要統計的metric
class MetricLoggingLayer(layers.Layer):
 def call(self, inputs):
  self.add_metric(keras.backend.std(inputs),
      name='std_of_activation',
      aggregation='mean')
  
  return inputs

inputs = keras.Input(shape=(784,), name='mnist_input')
h1 = layers.Dense(64, activation='relu')(inputs)
h1 = MetricLoggingLayer()(h1)
h1 = layers.Dense(64, activation='relu')(h1)
outputs = layers.Dense(10, activation='softmax')(h1)
model = keras.Model(inputs, outputs)
# keras.utils.plot_model(model, 'net001.png', show_shapes=True)

model.compile(optimizer=keras.optimizers.RMSprop(),
    loss=keras.losses.SparseCategoricalCrossentropy(),
    metrics=[keras.metrics.SparseCategoricalAccuracy()])
model.fit(x_train, y_train, batch_size=32, epochs=1)

# 也可以直接在model上面加
# 也可以以定義網絡層的方式添加要統計的metric
class MetricLoggingLayer(layers.Layer):
 def call(self, inputs):
  self.add_metric(keras.backend.std(inputs),
      name='std_of_activation',
      aggregation='mean')
  
  return inputs

inputs = keras.Input(shape=(784,), name='mnist_input')
h1 = layers.Dense(64, activation='relu')(inputs)
h2 = layers.Dense(64, activation='relu')(h1)
outputs = layers.Dense(10, activation='softmax')(h2)
model = keras.Model(inputs, outputs)

model.add_metric(keras.backend.std(inputs),
      name='std_of_activation',
      aggregation='mean')
model.add_loss(tf.reduce_sum(h1)*0.1)

# keras.utils.plot_model(model, 'net001.png', show_shapes=True)

model.compile(optimizer=keras.optimizers.RMSprop(),
    loss=keras.losses.SparseCategoricalCrossentropy(),
    metrics=[keras.metrics.SparseCategoricalAccuracy()])
model.fit(x_train, y_train, batch_size=32, epochs=1)

處理使用validation_data傳入測試數據,還可以使用validation_split劃分驗證數據

ps:validation_split只能在用numpy數據訓練的情況下使用

model.fit(x_train, y_train, batch_size=32, epochs=1, validation_split=0.2)

3.使用tf.data構造數據

def get_compiled_model():
 inputs = keras.Input(shape=(784,), name='mnist_input')
 h1 = layers.Dense(64, activation='relu')(inputs)
 h2 = layers.Dense(64, activation='relu')(h1)
 outputs = layers.Dense(10, activation='softmax')(h2)
 model = keras.Model(inputs, outputs)
 model.compile(optimizer=keras.optimizers.RMSprop(),
     loss=keras.losses.SparseCategoricalCrossentropy(),
     metrics=[keras.metrics.SparseCategoricalAccuracy()])
 return model
model = get_compiled_model()
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(64)

val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val))
val_dataset = val_dataset.batch(64)

# model.fit(train_dataset, epochs=3)
# steps_per_epoch 每個epoch只訓練幾步
# validation_steps 每次驗證,驗證幾步
model.fit(train_dataset, epochs=3, steps_per_epoch=100,
   validation_data=val_dataset, validation_steps=3)

4.樣本權重和類權重

“樣本權重”數組是一個數字數組,用于指定批處理中每個樣本在計算總損失時應具有多少權重。 它通常用于不平衡的分類問題(這個想法是為了給予很少見的類更多的權重)。 當使用的權重是1和0時,該數組可以用作損失函數的掩碼(完全丟棄某些樣本對總損失的貢獻)。

“類權重”dict是同一概念的更具體的實例:它將類索引映射到應該用于屬于該類的樣本的樣本權重。 例如,如果類“0”比數據中的類“1”少兩倍,則可以使用class_weight = {0:1.,1:0.5}。

# 增加第5類的權重
import numpy as np
# 樣本權重
model = get_compiled_model()
class_weight = {i:1.0 for i in range(10)}
class_weight[5] = 2.0
print(class_weight)
model.fit(x_train, y_train,
   class_weight=class_weight,
   batch_size=64,
   epochs=4)
# 類權重
model = get_compiled_model()
sample_weight = np.ones(shape=(len(y_train),))
sample_weight[y_train == 5] = 2.0
model.fit(x_train, y_train,
   sample_weight=sample_weight,
   batch_size=64,
   epochs=4)
# tf.data數據
model = get_compiled_model()

sample_weight = np.ones(shape=(len(y_train),))
sample_weight[y_train == 5] = 2.0

train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train,
             sample_weight))
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(64)

val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val))
val_dataset = val_dataset.batch(64)

model.fit(train_dataset, epochs=3, )

5.多輸入多輸出模型

image_input = keras.Input(shape=(32, 32, 3), name='img_input')
timeseries_input = keras.Input(shape=(None, 10), name='ts_input')

x1 = layers.Conv2D(3, 3)(image_input)
x1 = layers.GlobalMaxPooling2D()(x1)

x2 = layers.Conv1D(3, 3)(timeseries_input)
x2 = layers.GlobalMaxPooling1D()(x2)

x = layers.concatenate([x1, x2])

score_output = layers.Dense(1, name='score_output')(x)
class_output = layers.Dense(5, activation='softmax', name='class_output')(x)

model = keras.Model(inputs=[image_input, timeseries_input],
     outputs=[score_output, class_output])
keras.utils.plot_model(model, 'multi_input_output_model.png'
      , show_shapes=True)

# 可以為模型指定不同的loss和metrics
model.compile(
 optimizer=keras.optimizers.RMSprop(1e-3),
 loss=[keras.losses.MeanSquaredError(),
   keras.losses.CategoricalCrossentropy()])

# 還可以指定loss的權重
model.compile(
 optimizer=keras.optimizers.RMSprop(1e-3),
 loss={'score_output': keras.losses.MeanSquaredError(),
   'class_output': keras.losses.CategoricalCrossentropy()},
 metrics={'score_output': [keras.metrics.MeanAbsolutePercentageError(),
        keras.metrics.MeanAbsoluteError()],
    'class_output': [keras.metrics.CategoricalAccuracy()]},
 loss_weight={'score_output': 2., 'class_output': 1.})

# 可以把不需要傳播的loss置0
model.compile(
 optimizer=keras.optimizers.RMSprop(1e-3),
 loss=[None, keras.losses.CategoricalCrossentropy()])

# Or dict loss version
model.compile(
 optimizer=keras.optimizers.RMSprop(1e-3),
 loss={'class_output': keras.losses.CategoricalCrossentropy()})

6.使用回 調

Keras中的回調是在訓練期間(在epoch開始時,batch結束時,epoch結束時等)在不同點調用的對象,可用于實現以下行為:

  • 在培訓期間的不同時間點進行驗證(超出內置的每個時期驗證)
  • 定期檢查模型或超過某個精度閾值
  • 在訓練似乎平穩時改變模型的學習率
  • 在訓練似乎平穩時對頂層進行微調
  • 在培訓結束或超出某個性能閾值時發送電子郵件或即時消息通知等等。

可使用的內置回調有

  • ModelCheckpoint:定期保存模型。
  • EarlyStopping:當訓練不再改進驗證指標時停止培訓。
  • TensorBoard:定期編寫可在TensorBoard中顯示的模型日志(更多細節見“可視化”)。
  • CSVLogger:將丟失和指標數據流式傳輸到CSV文件。
  • 等等

6.1回調使用

model = get_compiled_model()

callbacks = [
 keras.callbacks.EarlyStopping(
  # Stop training when `val_loss` is no longer improving
  monitor='val_loss',
  # "no longer improving" being defined as "no better than 1e-2 less"
  min_delta=1e-2,
  # "no longer improving" being further defined as "for at least 2 epochs"
  patience=2,
  verbose=1)
]
model.fit(x_train, y_train,
   epochs=20,
   batch_size=64,
   callbacks=callbacks,
   validation_split=0.2)

# checkpoint模型回調
model = get_compiled_model()
check_callback = keras.callbacks.ModelCheckpoint(
 filepath='mymodel_{epoch}.h5',
 save_best_only=True,
 monitor='val_loss',
 verbose=1
)

model.fit(x_train, y_train,
   epochs=3,
   batch_size=64,
   callbacks=[check_callback],
   validation_split=0.2)

# 動態調整學習率
initial_learning_rate = 0.1
lr_schedule = keras.optimizers.schedules.ExponentialDecay(
 initial_learning_rate,
 decay_steps=10000,
 decay_rate=0.96,
 staircase=True
)
optimizer = keras.optimizers.RMSprop(learning_rate=lr_schedule)
# 使用tensorboard
tensorboard_cbk = keras.callbacks.TensorBoard(log_dir='./full_path_to_your_logs')
model.fit(x_train, y_train,
   epochs=5,
   batch_size=64,
   callbacks=[tensorboard_cbk],
   validation_split=0.2)

6.2創建自己的回調方法

class LossHistory(keras.callbacks.Callback):
 def on_train_begin(self, logs):
  self.losses = []
 def on_epoch_end(self, batch, logs):
  self.losses.append(logs.get('loss'))
  print('\nloss:',self.losses[-1])
  
model = get_compiled_model()

callbacks = [
 LossHistory()
]
model.fit(x_train, y_train,
   epochs=3,
   batch_size=64,
   callbacks=callbacks,
   validation_split=0.2)

7.自己構造訓練和驗證循環

# Get the model.
inputs = keras.Input(shape=(784,), name='digits')
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
x = layers.Dense(64, activation='relu', name='dense_2')(x)
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)
model = keras.Model(inputs=inputs, outputs=outputs)

# Instantiate an optimizer.
optimizer = keras.optimizers.SGD(learning_rate=1e-3)
# Instantiate a loss function.
loss_fn = keras.losses.SparseCategoricalCrossentropy()

# Prepare the training dataset.
batch_size = 64
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(batch_size)

# 自己構造循環
for epoch in range(3):
 print('epoch: ', epoch)
 for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
  # 開一個gradient tape, 計算梯度
  with tf.GradientTape() as tape:
   logits = model(x_batch_train)
   
   loss_value = loss_fn(y_batch_train, logits)
   grads = tape.gradient(loss_value, model.trainable_variables)
   optimizer.apply_gradients(zip(grads, model.trainable_variables))
   
  if step % 200 == 0:
   print('Training loss (for one batch) at step %s: %s' % (step, float(loss_value)))
   print('Seen so far: %s samples' % ((step + 1) * 64))
# 訓練并驗證
# Get model
inputs = keras.Input(shape=(784,), name='digits')
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
x = layers.Dense(64, activation='relu', name='dense_2')(x)
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)
model = keras.Model(inputs=inputs, outputs=outputs)

# Instantiate an optimizer to train the model.
optimizer = keras.optimizers.SGD(learning_rate=1e-3)
# Instantiate a loss function.
loss_fn = keras.losses.SparseCategoricalCrossentropy()

# Prepare the metrics.
train_acc_metric = keras.metrics.SparseCategoricalAccuracy() 
val_acc_metric = keras.metrics.SparseCategoricalAccuracy()

# Prepare the training dataset.
batch_size = 64
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(batch_size)

# Prepare the validation dataset.
val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val))
val_dataset = val_dataset.batch(64)


# Iterate over epochs.
for epoch in range(3):
 print('Start of epoch %d' % (epoch,))
 
 # Iterate over the batches of the dataset.
 for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
 with tf.GradientTape() as tape:
  logits = model(x_batch_train)
  loss_value = loss_fn(y_batch_train, logits)
 grads = tape.gradient(loss_value, model.trainable_variables)
 optimizer.apply_gradients(zip(grads, model.trainable_variables))
  
 # Update training metric.
 train_acc_metric(y_batch_train, logits)

 # Log every 200 batches.
 if step % 200 == 0:
  print('Training loss (for one batch) at step %s: %s' % (step, float(loss_value)))
  print('Seen so far: %s samples' % ((step + 1) * 64))

 # Display metrics at the end of each epoch.
 train_acc = train_acc_metric.result()
 print('Training acc over epoch: %s' % (float(train_acc),))
 # Reset training metrics at the end of each epoch
 train_acc_metric.reset_states()

 # Run a validation loop at the end of each epoch.
 for x_batch_val, y_batch_val in val_dataset:
 val_logits = model(x_batch_val)
 # Update val metrics
 val_acc_metric(y_batch_val, val_logits)
 val_acc = val_acc_metric.result()
 val_acc_metric.reset_states()
 print('Validation acc: %s' % (float(val_acc),))
## 添加自己構造的loss, 每次只能看到最新一次訓練增加的loss
class ActivityRegularizationLayer(layers.Layer):
 
 def call(self, inputs):
 self.add_loss(1e-2 * tf.reduce_sum(inputs))
 return inputs
 
inputs = keras.Input(shape=(784,), name='digits')
x = layers.Dense(64, activation='relu', name='dense_1')(inputs)
# Insert activity regularization as a layer
x = ActivityRegularizationLayer()(x)
x = layers.Dense(64, activation='relu', name='dense_2')(x)
outputs = layers.Dense(10, activation='softmax', name='predictions')(x)

model = keras.Model(inputs=inputs, outputs=outputs)
logits = model(x_train[:64])
print(model.losses)
logits = model(x_train[:64])
logits = model(x_train[64: 128])
logits = model(x_train[128: 192])
print(model.losses)
# 將loss添加進求導中
optimizer = keras.optimizers.SGD(learning_rate=1e-3)

for epoch in range(3):
 print('Start of epoch %d' % (epoch,))

 for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
 with tf.GradientTape() as tape:
  logits = model(x_batch_train)
  loss_value = loss_fn(y_batch_train, logits)

  # Add extra losses created during this forward pass:
  loss_value += sum(model.losses)
  
 grads = tape.gradient(loss_value, model.trainable_variables)
 optimizer.apply_gradients(zip(grads, model.trainable_variables))

 # Log every 200 batches.
 if step % 200 == 0:
  print('Training loss (for one batch) at step %s: %s' % (step, float(loss_value)))
  print('Seen so far: %s samples' % ((step + 1) * 64))

到此這篇關于TensorFlow2.0使用keras訓練模型的實現的文章就介紹到這了,更多相關TensorFlow2.0 keras訓練模型內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 入門tensorflow教程之TensorBoard可視化模型訓練
  • TensorFlow2.X使用圖片制作簡單的數據集訓練模型
  • 如何將tensorflow訓練好的模型移植到Android (MNIST手寫數字識別)
  • 一小時學會TensorFlow2之大幅提高模型準確率

標簽:平頂山 烏蘭察布 郴州 海南 烏蘭察布 合肥 大慶 哈爾濱

巨人網絡通訊聲明:本文標題《TensorFlow2.0使用keras訓練模型的實現》,本文關鍵詞  TensorFlow2.0,使用,keras,訓練,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《TensorFlow2.0使用keras訓練模型的實現》相關的同類信息!
  • 本頁收集關于TensorFlow2.0使用keras訓練模型的實現的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲精品免费在线| 视频一区二区中文字幕| 亚洲国产精品嫩草影院| 精品在线免费观看| 欧美视频三区在线播放| 国产精品欧美一区喷水| 精品一区二区在线视频| 欧美日韩一区二区三区在线| 中文字幕一区二区不卡| 国产乱理伦片在线观看夜一区| 欧美午夜理伦三级在线观看| 国产精品久久久久久久久免费丝袜 | 日韩欧美专区在线| 亚洲免费资源在线播放| 丁香网亚洲国际| 精品国产乱码久久久久久久 | 久久在线免费观看| 日韩av一区二区在线影视| 色综合久久久久综合体| 国产精品毛片久久久久久久| 国产综合色视频| 精品88久久久久88久久久| 日韩专区在线视频| 欧美高清视频一二三区| 亚洲成人一区二区| 精品视频免费在线| 亚洲大片免费看| 欧美日韩亚洲综合一区| 亚洲一区二区av在线| 91久久一区二区| 亚洲成人激情综合网| 欧美区在线观看| 蜜桃av一区二区三区电影| 欧美欧美午夜aⅴ在线观看| 亚洲午夜激情av| 欧美日韩一区二区在线观看视频| 亚洲午夜久久久久久久久久久| 欧美午夜电影在线播放| 亚洲成人黄色小说| 日韩欧美www| 国产麻豆精品95视频| 国产精品系列在线| 91麻豆精品秘密| 天天综合天天做天天综合| 色国产综合视频| 视频一区国产视频| 欧美电影免费观看高清完整版在线观看 | 国产亚洲欧美中文| av福利精品导航| 天天综合天天做天天综合| 日韩午夜在线观看| 国产白丝精品91爽爽久久| 国产精品的网站| 欧美日韩精品系列| 美女免费视频一区二区| 国产精品视频看| 欧美日本在线看| 国产在线精品一区二区不卡了| 国产精品久久久久久亚洲毛片 | 亚洲欧美日韩在线不卡| 欧洲精品一区二区| 老司机午夜精品| 中文字幕av一区二区三区| 日本乱人伦一区| 久久疯狂做爰流白浆xx| 国产精品国产精品国产专区不蜜| 欧美三区免费完整视频在线观看| 久久国产精品露脸对白| 亚洲美女视频在线| 欧美videos中文字幕| 91麻豆免费看片| 国产原创一区二区三区| 亚洲综合一二三区| 久久综合九色综合欧美就去吻| 91麻豆精品一区二区三区| 另类小说图片综合网| 亚洲女性喷水在线观看一区| 91精品国产综合久久久蜜臀粉嫩 | 蜜桃视频一区二区三区在线观看| 精品国产99国产精品| 欧美日韩一卡二卡| 99视频热这里只有精品免费| 久久精品999| 亚洲成人免费电影| 亚洲欧洲精品一区二区三区 | 国产精品情趣视频| 精品粉嫩超白一线天av| 在线精品视频免费观看| 国产suv一区二区三区88区| 青青青爽久久午夜综合久久午夜| 亚洲美女少妇撒尿| ...av二区三区久久精品| 久久婷婷国产综合国色天香| 欧美精品粉嫩高潮一区二区| 91蜜桃在线免费视频| 懂色av一区二区三区免费观看| 蜜桃精品视频在线| 热久久一区二区| 日本不卡视频在线观看| 亚洲综合色丁香婷婷六月图片| 中文字幕乱码亚洲精品一区| 337p日本欧洲亚洲大胆色噜噜| 欧美人伦禁忌dvd放荡欲情| 在线影视一区二区三区| 91麻豆成人久久精品二区三区| 从欧美一区二区三区| 国产福利一区二区三区视频在线| 麻豆精品一区二区三区| 日韩高清不卡一区| 免费人成黄页网站在线一区二区| 亚洲午夜精品久久久久久久久| 亚洲综合成人网| 亚洲国产美女搞黄色| 亚洲国产综合人成综合网站| 亚洲综合自拍偷拍| 亚洲成在人线免费| 日韩高清不卡一区| 美腿丝袜一区二区三区| 麻豆91精品视频| 韩国av一区二区| 国产一区91精品张津瑜| 国产成人自拍在线| 91女厕偷拍女厕偷拍高清| 91蜜桃网址入口| 欧美系列亚洲系列| 欧美一区二区成人6969| 7777精品伊人久久久大香线蕉经典版下载 | 日韩不卡一二三区| 美洲天堂一区二卡三卡四卡视频| 六月婷婷色综合| 国产suv精品一区二区883| 成人激情图片网| 一本一本大道香蕉久在线精品| 欧美在线免费播放| 91精品国产综合久久精品麻豆 | 国内一区二区视频| 成人aaaa免费全部观看| 色婷婷综合久久久中文字幕| 欧美欧美午夜aⅴ在线观看| 欧美r级在线观看| 国产精品久久久久影院老司| 亚洲情趣在线观看| 日韩中文字幕区一区有砖一区| 开心九九激情九九欧美日韩精美视频电影 | 91浏览器在线视频| 欧美日韩一区二区三区四区五区| 日韩免费在线观看| 亚洲免费观看视频| 韩国毛片一区二区三区| 色婷婷久久一区二区三区麻豆| 91精品国模一区二区三区| 欧美激情一区不卡| 亚洲电影在线播放| 国产精品18久久久久| 91麻豆免费看片| 久久色在线观看| 午夜电影网亚洲视频| 国产成人免费av在线| 制服丝袜av成人在线看| 日本一二三四高清不卡| 日韩精品成人一区二区在线| 成熟亚洲日本毛茸茸凸凹| 欧美一卡在线观看| 亚洲免费电影在线| 国产精品一二三在| 欧美日韩黄色一区二区| 综合电影一区二区三区| 国产露脸91国语对白| 51久久夜色精品国产麻豆| 中文字幕一区二区三区乱码在线| 激情综合网最新| 欧美一级高清片| 亚洲在线视频一区| 99精品视频在线免费观看| 久久久三级国产网站| 日韩电影在线观看一区| 91激情在线视频| 中文字幕制服丝袜成人av | 91久久精品网| 亚洲日本乱码在线观看| 国产黑丝在线一区二区三区| 日韩美女视频一区二区在线观看| 亚洲综合色自拍一区| 91一区二区三区在线播放| 国产亚洲欧美在线| 国产精品影音先锋| 精品国产99国产精品| 轻轻草成人在线| 欧美一区二区三区免费视频| 亚洲18女电影在线观看| 在线亚洲人成电影网站色www| 国产精品全国免费观看高清| 高清国产一区二区三区| 国产无一区二区| 成人午夜电影小说| 欧美极品aⅴ影院| caoporen国产精品视频| 亚洲人成网站精品片在线观看| 成人动漫视频在线| 国产精品丝袜黑色高跟|