午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 基于Keras的擴(kuò)展性使用

基于Keras的擴(kuò)展性使用

熱門標(biāo)簽:富錦商家地圖標(biāo)注 沈陽人工外呼系統(tǒng)價格 如何申請400電話費用 武漢外呼系統(tǒng)平臺 江西省地圖標(biāo)注 沈陽外呼系統(tǒng)呼叫系統(tǒng) 沈陽防封電銷卡品牌 外呼系統(tǒng)哪些好辦 池州外呼調(diào)研線路

Keras是一個用于在python上搭神經(jīng)網(wǎng)絡(luò)模型的框架,語法和torch比較相似。我個人認(rèn)為Keras最大的特點是包裝很好,一些在訓(xùn)練過程中要輸出的方法和常用的優(yōu)化函數(shù)、目標(biāo)函數(shù)都已經(jīng)內(nèi)置了,非常適合用來寫大作業(yè)。Keras和python的哲學(xué)有些相似,那就是盡量不自己造輪子。

但是最近逛知乎,看到有答案說,Keras只能用來搭一些世面上已經(jīng)普及的網(wǎng)絡(luò),和其它框架相比比較小白。換句話說,就是Keras的擴(kuò)展性不好。作為一個試用過theano、tensorflow、torch、caffe等框架,最后定居在Keras的人,我對此不太同意。事實上,Keras擁有不錯的擴(kuò)展性,這一方面是因為設(shè)計時就留好的接口,另一方面是因為清晰的代碼結(jié)構(gòu),讓你可以有很多自定義的空間。所以下面用幾個例子介紹在Keras中如何自定義層和各種方法。

0、backend

如果想在Keras中自定義各種層和函數(shù),一定會用到的就是backend。一般導(dǎo)入的方法是

from keras import backend as K

這是因為Keras可以有兩種后臺,即theano和tensorflow,所以一些操作張量的函數(shù)可能是隨后臺的不同而不同的,

通過引入這個backend,就可以讓Keras來處理兼容性。

比如求x的平均,就是K.mean(x)。backend文件本身在keras/backend文件夾下,可以通過閱讀代碼來了解backend都支持哪些操作。backend里面函數(shù)很多,一般都夠用了。

1、Lambda 層

如果你只是想對流經(jīng)該層的數(shù)據(jù)做個變換,而這個變換本身沒有什么需要學(xué)習(xí)的參數(shù),那么直接用Lambda Layer是最合適的了。

導(dǎo)入的方法是

from keras.layers.core import Lambda

Lambda函數(shù)接受兩個參數(shù),第一個是輸入張量對輸出張量的映射函數(shù),第二個是輸入的shape對輸出的shape的映射函數(shù)。比如想構(gòu)建這樣一個層,流經(jīng)該層的數(shù)據(jù)會被減去平均值,那么可以這樣定義:

def sub_mean(x):
    x -= K.mean(x,axis=1,keepdims=True)
    return x
model.add( Lambda(sub_mean,output_shape=lambda input_shape:input_shape ))

因為輸出的shape和輸入的shape是一樣的,第二個參數(shù)就直接用了恒等映射。

把模型完整地建立出來:

def get_submean_model():
    model = Sequential()
    model.add(Dense(5,input_dim=7))
    def sub_mean(x):
        x -= K.mean(x,axis=1,keepdims=True)
        return x
    model.add( Lambda(sub_mean,output_shape=lambda input_shape:input_shape))
    model.compile(optimizer='rmsprop',loss='mse')
    return model
model = get_submean_model()
res=model.predict(np.random.random((3,7)))

得到地res的平均值是[ 5.96046448e-08 -5.96046448e-08 0.00000000e+00],可見確實實現(xiàn)了減去均值的作用。

2、自定義非遞歸層

如果自己想定義的層中有需要學(xué)習(xí)的變量,那么就不能用lambda層了,需要自己寫一個出來。

比如說我想定義一個層,它的效果是對張量乘一個正對角陣(換句話說,輸入向量與一個要學(xué)習(xí)的向量逐元素相乘),那么可以這樣寫:

首先要導(dǎo)入基類

from keras.engine.topology import Layer

然后對MyLaber定義如下:

class MyLayer(Layer):
    def __init__(self,output_dim,**kw):
        self.output_dim = output_dim
        super(MyLayer,self).__init__(**kw)
    def build(self,input_shape):
        input_dim = input_shape[1]
        assert(input_dim == self.output_dim)
        inital_SCALER = np.ones((input_dim,))*1000
        self.SCALER = K.variable(inital_SCALER)
        self.trainable_weights = [self.SCALER]
        super(MyLayer,self).build(input_shape)
    def call(self,x,mask=None):
        #return x - K.mean(x,axis=1,keepdims=True)
        x *= self.SCALER
        return x
    def get_output_shape_for(self,input_shape):
        return input_shape

主要參照Keras內(nèi)置的層的寫法,比如Dense在keras/layers/core.py中,要把能學(xué)習(xí)的參數(shù)放在self.trainable_weights中。這里把初始值設(shè)成了1000是為了讓該層的效果更顯著。然后把模型寫全來測試一下

def get_mylayer_model():
    model = Sequential()
    model.add(Dense(5,input_dim=7))
    model.add(MyLayer(5))
    model.compile(optimizer='rmsprop',loss='mse')
    return model
model = get_mylayer_model()
res=model.predict(np.random.random((3,7)))
print res

res如下:

[[ 271.2746582 -1053.31506348 147.17185974 -1120.33740234 609.54876709]

[ -263.69671631 -390.41921997 291.17721558 -594.58721924 615.97369385]

[ -46.58752823 -733.11328125 -21.9815979 -570.79351807 649.44158936]]

都是很大的數(shù),而不加MyLayer時每個值一般也不超過+-2,這個層確實起了作用。

在fit之前調(diào)用model.get_weights(),看到該層的權(quán)重都是1000,隨便隨機出來個測試集,fit幾千個epoch只后,loss變得很小,MyLayer的權(quán)重變成了997左右,而前面一層Dense的權(quán)重都成10^-4量級,說明MyLayer中的參數(shù)也確實是可學(xué)習(xí)的。

3、自定義損失函數(shù)

Keras內(nèi)置的損失函數(shù)都在keras/objectives.py中,比如mse的定義是:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

按照相同的格式,可以定義自己的損失函數(shù)。比如我們想要差值的4次方的平均作為損失函數(shù):

def my_object(y_true,y_pred):
    return K.mean(K.square(K.square(y_pred-y_true)),axis=-1)

把模型寫全:

def get_myobj_model():
    model = Sequential()
    model.add(Dense(5,input_dim=7))
    model.add(Dense(3))
    def my_object(y_true,y_pred):
        return K.mean(K.square(K.square(y_pred-y_true)),axis=-1)
    model.compile(optimizer='sgd',loss=my_object)
    return model
model = get_myobj_model()

能自定義損失函數(shù)是非常重要一環(huán),它極大的擴(kuò)展了網(wǎng)絡(luò)的應(yīng)用。例如希望用cnn訓(xùn)練出來一個前后景分割的濾波器,它的輸出的像素在對應(yīng)前景的位置是1,在對應(yīng)后景的位置是0。不但希望網(wǎng)絡(luò)輸出的值的mse小,而且希望0和1分別都連在一起,不要出來雪花狀的輸出。那么自定義損失函數(shù)就能做到了,實際是把兩個損失函數(shù)放到了一個損失函數(shù)中。

另外一些很有用的損失函數(shù)如warp-ctc,就可以在這里集成進(jìn)模型。

4、自定義遞歸層

遞歸層的定義方法和非遞歸層不太一樣。根據(jù)Keras內(nèi)LSTM的寫法,它還有一個reset_states函數(shù)和step函數(shù),這是由遞歸的性質(zhì)決定的。例子都在keras/layers/recurrent.py中。

之前看學(xué)長用lasagne寫的LSTM的變體,看得我想哭,還不如在Keras中把LSTM得代碼復(fù)制過來修修改改。不過LSTM也不能直接復(fù)制過來,還需要import幾個依賴:

rom keras.layers.recurrent import LSTM,Recurrent,time_distributed_dense
from keras import initializations,regularizers,activations
from keras.engine import InputSpec

5、自定義優(yōu)化函數(shù)

Keras的代碼確實好,耦合度很低。Keras內(nèi)置的優(yōu)化函數(shù)在keras/optimizers.py中,基類Optimizer也在這個文件里。例如把它內(nèi)置的SGD算法拷貝到自己的文件中,只要先from keras.optimizers import Optimizer就能編譯通過。

有時候要得到state-of-the-art的結(jié)果,需要用sgd加動量法充分收斂。比如學(xué)習(xí)率0.01學(xué)習(xí)上100epoch,再把學(xué)習(xí)率減半,再學(xué)100epoch,依次類推。如果不自定義優(yōu)化函數(shù)的話,就要分階段調(diào)用fit函數(shù),修改學(xué)習(xí)率,可能還要重新compile。這就不是很優(yōu)美了。其它一些奇葩的學(xué)習(xí)策略,也可以通過自定義優(yōu)化函數(shù)來得到。

6、后記

Keras確實非常強大,不但能用來寫大作業(yè),做一些研究也夠用了。Yeah

補充:keras的擴(kuò)展性:自定義keras

1. 自定義keras

keras是一種深度學(xué)習(xí)的API,能夠快速實現(xiàn)你的實驗。keras也集成了很多預(yù)訓(xùn)練的模型,可以實現(xiàn)很多常規(guī)的任務(wù),如圖像分類。TensorFlow 2.0之后tensorflow本身也變的很keras化。

另一方面,keras表現(xiàn)出高度的模塊化和封裝性,所以有的人會覺得keras不易于擴(kuò)展, 比如實現(xiàn)一種新的Loss,新的網(wǎng)絡(luò)層結(jié)構(gòu);其實可以通過keras的基礎(chǔ)模塊進(jìn)行快速的擴(kuò)展,實現(xiàn)更新的算法。

本文就keras的擴(kuò)展性,總結(jié)了對layer,model和loss的自定義。

2. 自定義keras layers

layers是keras中重要的組成部分,網(wǎng)絡(luò)結(jié)構(gòu)中每一個組成都要以layers來表現(xiàn)。keras提供了很多常規(guī)的layer,如Convolution layers,pooling layers, activation layers, dense layers等, 我們可以通過繼承基礎(chǔ)layers來擴(kuò)展自定義的layers。

2.1 base layer

layer實了輸入tensor和輸出tensor的操作類,以下為base layer的5個方法,自定義layer只要重寫這些方法就可以了。

init(): 定義自定義layer的一些屬性

build(self, input_shape):定義layer需要的權(quán)重weights

call(self, *args, **kwargs):layer具體的操作,會在調(diào)用自定義layer自動執(zhí)行

get_config(self):layer初始化的配置,是一個字典dictionary。

compute_output_shape(self,input_shape):計算輸出tensor的shape

2.2 例子

# 標(biāo)準(zhǔn)化層
class InstanceNormalize(Layer):
    def __init__(self, **kwargs):
        super(InstanceNormalize, self).__init__(**kwargs)
        self.epsilon = 1e-3
            
    def call(self, x, mask=None):
        mean, var = tf.nn.moments(x, [1, 2], keep_dims=True)
        return tf.div(tf.subtract(x, mean), tf.sqrt(tf.add(var, self.epsilon)))
                                                 
    def compute_output_shape(self,input_shape):
        return input_shape
# 調(diào)用
inputs = keras.Input(shape=(None, None, 3))
x = InstanceNormalize()(inputs)
# 可以通過add_weight() 創(chuàng)建權(quán)重
class SimpleDense(Layer):
  def __init__(self, units=32):
      super(SimpleDense, self).__init__()
      self.units = units
  def build(self, input_shape):
      self.w = self.add_weight(shape=(input_shape[-1], self.units),
                               initializer='random_normal',
                               trainable=True)
      self.b = self.add_weight(shape=(self.units,),
                               initializer='random_normal',
                               trainable=True)
  def call(self, inputs):
      return tf.matmul(inputs, self.w) + self.b
# 調(diào)用
inputs = keras.Input(shape=(None, None, 3))
x = SimpleDense(units=64)(inputs)

3. 自定義keras model

我們在定義完網(wǎng)絡(luò)結(jié)構(gòu)時,會把整個工作流放在 keras.Model, 進(jìn)行 compile(), 然后通過 fit() 進(jìn)行訓(xùn)練過程。執(zhí)行 fit() 的時候,執(zhí)行每個 batch size data 的時候,都會調(diào)用 Model 中train_step(self, data)

from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential()
model.add(Dense(units=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32)

當(dāng)你需要自己控制訓(xùn)練過程的時候,可以重寫Model的train_step(self, data)方法

class CustomModel(keras.Model):
    def train_step(self, data):
        # Unpack the data. Its structure depends on your model and
        # on what you pass to `fit()`.
        x, y = data
        with tf.GradientTape() as tape:
            y_pred = self(x, training=True)  # Forward pass
            # Compute the loss value
            # (the loss function is configured in `compile()`)
            loss = self.compiled_loss(y, y_pred, regularization_losses=self.losses)
        # Compute gradients
        trainable_vars = self.trainable_variables
        gradients = tape.gradient(loss, trainable_vars)
        # Update weights
        self.optimizer.apply_gradients(zip(gradients, trainable_vars))
        # Update metrics (includes the metric that tracks the loss)
        self.compiled_metrics.update_state(y, y_pred)
        # Return a dict mapping metric names to current value
        return {m.name: m.result() for m in self.metrics}
import numpy as np
# Construct and compile an instance of CustomModel
inputs = keras.Input(shape=(32,))
outputs = keras.layers.Dense(1)(inputs)
model = CustomModel(inputs, outputs)
model.compile(optimizer="adam", loss="mse", metrics=["mae"])
# Just use `fit` as usual
x = np.random.random((1000, 32))
y = np.random.random((1000, 1))
model.fit(x, y, epochs=3)

4. 自定義keras loss

keras實現(xiàn)了交叉熵等常見的loss,自定義loss對于使用keras來說是比較常見,實現(xiàn)各種魔改loss,如focal loss。

我們來看看keras源碼中對loss實現(xiàn)

def categorical_crossentropy(y_true, y_pred):
    return K.categorical_crossentropy(y_true, y_pred)
def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

可以看出輸入是groud true y_true和預(yù)測值y_pred, 返回為計算loss的函數(shù)。自定義loss可以參照如此模式即可。

def focal_loss(weights=None, alpha=0.25, gamma=2):
    r"""Compute focal loss for predictions.
        Multi-labels Focal loss formula:
            FL = -alpha * (z-p)^gamma * log(p) -(1-alpha) * p^gamma * log(1-p)
                 ,which alpha = 0.25, gamma = 2, p = sigmoid(x), z = target_tensor.
    # https://github.com/ailias/Focal-Loss-implement-on-Tensorflow/blob/master/focal_loss.py
    Args:
     prediction_tensor: A float tensor of shape [batch_size, num_anchors,
        num_classes] representing the predicted logits for each class
     target_tensor: A float tensor of shape [batch_size, num_anchors,
        num_classes] representing one-hot encoded classification targets
     weights: A float tensor of shape [batch_size, num_anchors]
     alpha: A scalar tensor for focal loss alpha hyper-parameter
     gamma: A scalar tensor for focal loss gamma hyper-parameter
    Returns:
        loss: A (scalar) tensor representing the value of the loss function
    """
    def _custom_loss(y_true, y_pred):
        sigmoid_p = tf.nn.sigmoid(y_pred)
        zeros = array_ops.zeros_like(sigmoid_p, dtype=sigmoid_p.dtype)
        # For poitive prediction, only need consider front part loss, back part is 0;
        # target_tensor > zeros => z=1, so poitive coefficient = z - p.
        pos_p_sub = array_ops.where(y_true > zeros, y_true - sigmoid_p, zeros)
        # For negative prediction, only need consider back part loss, front part is 0;
        # target_tensor > zeros => z=1, so negative coefficient = 0.
        neg_p_sub = array_ops.where(y_true > zeros, zeros, sigmoid_p)
        per_entry_cross_ent = - alpha * (pos_p_sub ** gamma) * tf.log(tf.clip_by_value(sigmoid_p, 1e-8, 1.0)) \

                              - (1 - alpha) * (neg_p_sub ** gamma) * tf.log(
            tf.clip_by_value(1.0 - sigmoid_p, 1e-8, 1.0))
        return tf.reduce_sum(per_entry_cross_ent)
    return _custom_loss

5. 總結(jié)

本文分享了keras的擴(kuò)展功能,擴(kuò)展功能其實也是實現(xiàn)Keras模塊化的一種繼承實現(xiàn)。

總結(jié)如下:

繼承Layer實現(xiàn)自定義layer, 記住bulid() call()

繼續(xù)Model實現(xiàn)train_step定義訓(xùn)練過程,記住梯度計算tape.gradient(loss, trainable_vars) ,權(quán)重更新optimizer.apply_gradients, 計算evaluate compiled_metrics.update_state(y, y_pred)

魔改loss,記住groud true y_true和預(yù)測值y_pred輸入,返回loss function

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • keras修改backend的簡單方法
  • keras的get_value運行越來越慢的解決方案
  • 基于keras中訓(xùn)練數(shù)據(jù)的幾種方式對比(fit和fit_generator)
  • 淺談Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑
  • Keras保存模型并載入模型繼續(xù)訓(xùn)練的實現(xiàn)
  • TensorFlow2.0使用keras訓(xùn)練模型的實現(xiàn)
  • tensorflow2.0教程之Keras快速入門
  • 淺析關(guān)于Keras的安裝(pycharm)和初步理解

標(biāo)簽:黑龍江 銅川 通遼 阿里 潛江 呂梁 株洲 常德

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于Keras的擴(kuò)展性使用》,本文關(guān)鍵詞  基于,Keras,的,擴(kuò)展性,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于Keras的擴(kuò)展性使用》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于Keras的擴(kuò)展性使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    99视频在线免费| 国产在线观看精品| 亚洲国产va精品久久久不卡综合| 国产综合色在线视频区| 国产孕妇孕交大片孕| 久久久无码人妻精品一区| 久久精品国产sm调教网站演员| 国产美女精品免费电影| 日韩在线中文字幕| 欧美一区二区人人喊爽| 亚洲女同一区二区| 成人不卡免费av| 久久久久久穴| 天天天天天天天干| 黄色录像免费观看| 日本一卡二卡在线| 久久黄色免费看| 日本在线视频www色| 91免费电影网站| 久久久久免费视频| 亚洲人午夜精品| 日韩欧美国产wwwww| 色94色欧美sute亚洲13| 亚洲老司机在线| 91影院在线免费观看| 麻豆成人综合网| 亚洲成人一二三区| 中文字幕一区二区三区免费看| 五月天婷婷色综合| 91成年人网站| 香蕉视频免费网站| 欧美美女一级片| 欧美日韩精品在线一区二区 | 日本精品入口免费视频| 男女性高潮免费网站| theav精尽人亡av| 超碰人人cao| av视屏在线播放| 国产精品无码电影在线观看 | 久久久久久亚洲av无码专区| 欧美人妻精品一区二区免费看| 男人天堂av电影| 极品粉嫩美女露脸啪啪| 视频一区二区三区免费观看| 丰满人妻一区二区三区四区53 | 葵司免费一区二区三区四区五区| 国产精品第108页| 中文天堂资源在线| 精品黑人一区二区三区观看时间| 亚洲av无日韩毛片久久| 九九热免费精品视频| 黄色动漫网站入口| 久久久久久久久久网| 一本久久a久久精品vr综合| 麻豆蜜桃91| 国产亚洲第一区| 一级精品视频在线观看宜春院| 欧美极品少妇xxxxⅹ裸体艺术| 蜜桃视频一区二区在线观看| 亚洲丝袜在线视频| 国产午夜精品理论片a级探花| 日韩欧美国产综合在线一区二区三区| 欧美三区在线观看| 欧美午夜精品久久久| 午夜视频在线观看一区二区三区| 一区二区三区波多野结衣在线观看| 五月婷婷综合在线观看| 91麻豆国产自产在线观看| 97人妻精品视频一区| 亚洲 欧美 视频| 日本少妇久久久| 五月天综合在线| 久久久久性色av无码一区二区| 在线观看亚洲大片短视频| 亚洲精品国产精品国自| 天天鲁一鲁摸一摸爽一爽| 北条麻妃在线观看视频| 乱h高h女3p含苞待放| 欧美日韩精品一区二区三区视频播放 | 成人午夜福利视频| 日韩欧美高清dvd碟片| 亚洲一区中文字幕| 亚洲精品97久久中文字幕无码| 亚洲人精品午夜| 日本久久久久久久久久久| 香蕉视频免费网站| 亚洲精品中文字幕成人片| 欧美色xxxx| 91精品国产777在线观看| 美女黄色片视频| 亚洲成人久久电影| 91精品久久久久久久91蜜桃| 91精品一区二区三区在线观看| 制服丝袜亚洲播放| 精品人在线二区三区| 亚洲精品电影网在线观看| 日韩极品精品视频免费观看| 亚洲欧美在线第一页| 国产亚洲精品久久| 欧美大奶子在线| 91av在线免费观看| 92裸体在线视频网站| 91精品视频免费| 精品国产乱码久久久久久88av| 日本免费高清一区| 亚洲av综合色区| 成人久久久久久久久| www一区二区www免费| 九九九九九国产| 中文字幕狠狠干| 永久久久久久久| 免费av中文字幕| 好吊视频一二三区| 久久99热99| 国产一区二区不卡老阿姨| 99国产欧美另类久久久精品| 18欧美亚洲精品| 亚洲国产欧美日韩另类综合| 欧美午夜视频网站| 欧美一级一区二区| 伊人亚洲福利一区二区三区| 久久久久久中文| 91久久久在线| 亚洲第一导航| 国产福利视频在线播放| 精品无码av一区二区三区| 特黄一区二区三区| 免费看污视频的网站| 亚洲女人18毛片水真多| 国产精品正在播放| 国产精品久久久久9999吃药| 亚洲综合色丁香婷婷六月图片| 欧美色综合天天久久综合精品| 日韩av一区在线观看| 欧美国产精品va在线观看| 91精品国产综合久久男男 | 成人小视频在线观看免费| 亚洲精品一二三四五区| 真人bbbbbbbbb毛片| 国产在线观看免费av| 欧美日韩国产免费一区二区三区 | 色综合久久久久网| 色狠狠桃花综合| 日韩精品高清在线观看| 欧美激情视频一区二区三区不卡| 国产精品一香蕉国产线看观看| 欧美一区二区三区电影在线观看| 免费日韩视频在线观看| xxxx黄色片| 制服.丝袜.亚洲.中文.综合懂色| 国产成人三级在线观看视频| 成人动漫一区二区在线| 精品高清一区二区三区| 亚洲成色777777在线观看影院| 蜜桃精品视频在线| 国产专区欧美专区| 网站黄在线观看| 国产人妻精品午夜福利免费| 国产极品视频在线观看| 国产极品粉嫩福利姬萌白酱| 国产精品国产自产拍高清av| 热久久免费视频| 免费的av网站| 7777精品伊人久久久大香线蕉经典版下载 | 国产尤物99| 亚洲图片都市激情| 国产偷人视频免费| 亚洲制服中文字幕| av黄色在线免费观看| 销魂美女一区二区| 日韩黄色片在线观看| 中文字幕欧美国产| 欧美一级黄色大片| 性亚洲最疯狂xxxx高清| 欧美裸体网站| 搡女人真爽免费午夜网站| 美女av免费看| 一级片aaaa| 成人av在线影院| 色素色在线综合| 日韩国产精品亚洲а∨天堂免| 国内精品中文字幕| 国产久一道中文一区| 久久综合久久色| 在线免费观看亚洲视频| 99在线精品视频免费观看20| 国产成人av电影在线观看| 亚洲已满18点击进入久久| 亚洲男人的天堂在线| 2019亚洲男人天堂| 亚洲一区二区精品在线观看| 国内精品免费视频| 高潮无码精品色欲av午夜福利| 国产不卡免费视频| 欧美性xxxxx极品少妇| 欧美精品电影在线| 92国产精品视频| 欧美精品成人网| 精品少妇久久久久久888优播| 麻豆国产精品视频| 色综合久久中文综合久久97| 美女福利精品视频| 国产美女精品在线观看| 日韩精品视频在线观看视频| 91社区视频在线观看| 亚洲av成人无码久久精品老人 | 国产精品久久精品日日| 亚洲第一区第一页| 91免费观看网站| 91淫黄看大片| 日韩在线视频免费播放| 成人午夜又粗又硬又大| 91精品国产色综合久久久蜜香臀| 国产精品va在线播放| 国产 日韩 亚洲 欧美| 欧美成人免费看| 国产精品一二三四五| 欧美日韩美少妇| 国产成人欧美在线观看| www在线观看免费| 天堂网中文在线观看| 日韩国产成人精品| 日韩欧美中文字幕在线播放| 91黑丝高跟在线| 国产免费黄色小视频| 欧美精品一级片| 粉嫩欧美一区二区三区高清影视| 欧美久久久久久久久| 国产美女久久精品| 欧美这里只有精品| 久草视频在线资源站| 国产精品99久久不卡二区| 337p亚洲精品色噜噜狠狠| 国产精品入口免费视| 男女啪啪网站视频| 国产精品无码粉嫩小泬| 国产精品美女视频| 中文字幕亚洲一区二区三区五十路 | 欧美性猛交xxxx黑人| 国产91精品久久久| 妺妺窝人体色www在线小说| 极品国产91在线网站| 欧美激情在线一区二区| 中文日韩在线观看| 精品卡一卡二| 巨胸大乳www视频免费观看| 五月天丁香视频| 日本久久电影网| 国产精品亚洲一区二区三区| 羞羞的视频在线| 99在线小视频| 欧美性少妇18aaaa视频| 国产精品久久999| 宅男噜噜噜66国产免费观看| 午夜影院免费在线观看| 中文字幕中文字幕中文字幕亚洲无线 | 性活交片大全免费看| 神马久久久久久久久久| 欧美偷拍一区二区| 91人人爽人人爽人人精88v| 免费黄色a级片| 久久综合导航| 欧美福利一区二区| 国产综合香蕉五月婷在线| 蜜臀aⅴ国产精品久久久国产老师 性活交片大全免费看 | 日韩在线观看免费网站 | 欧美夫妻性生活| 国产日本欧美一区二区三区在线| 婷婷激情综合五月天| 天堂国产一区二区三区| 欧美系列日韩一区| 亚洲影院高清在线| 在线观看国产网站| 国产一区日韩二区欧美三区| 亚洲精品一区二区三区福利| 欧美一进一出视频| 激情视频在线播放| 91色视频在线| 不卡伊人av在线播放| 国产精品va无码一区二区| 亚洲av无码不卡| 亚洲福利一二三区| 九九热精品视频国产| 日韩一级免费观看| 国产成人综合亚洲91猫咪| 欧美一级淫片免费视频黄| 国产主播在线看| 亚洲国产成人精品激情在线| 中文字幕免费一区| 国色天香2019中文字幕在线观看| 我要看一级黄色大片| 午夜影院免费体验区| 欧美一级午夜免费电影| 日韩精品大片| 国产无遮挡aaa片爽爽| 亚洲色图欧美在线| 国产精品电影一区| 女~淫辱の触手3d动漫| 成人免费精品视频| 久久久999国产| 黄色永久免费网站| 日本最新不卡在线| 日韩精品在线观| 精品无码国模私拍视频| 一区二区国产欧美| 欧美日韩综合在线免费观看| 99re视频在线观看| 99热99这里只有精品| 99re免费视频精品全部| 久久久久久av| 超碰人人cao| 高清国产一区二区三区| 久久国产加勒比精品无码| 99999精品视频| 首页亚洲欧美制服丝腿| 精品一区二区三区四区在线| 欧美极品欧美精品欧美| 免费看国产片在线观看| 亚洲福利小视频| 超碰成人免费在线| 国产91麻豆视频| 亚洲精品456在线播放狼人| 国产原创中文在线观看| 懂色av成人一区二区三区| 欧美日韩亚洲综合在线 | www日韩视频| 日本中文在线一区| 亚洲欧美精品伊人久久| 国产一区亚洲二区三区| 免费一级片91| www.久久久久| 狠狠热免费视频| 黄网站免费久久| 欧美大片免费看| 北岛玲一区二区| 国产欧美1区2区3区| 国产精品日韩在线播放| 成人无码av片在线观看| 国产精品对白交换视频| 97在线视频精品| www在线观看免费视频| 中文在线一区二区| 亚洲r级在线观看| 精品91久久久| 精品视频一区三区九区| 黄黄视频在线观看| 午夜福利一区二区三区| 丝袜美腿精品国产二区| 亚洲成人激情小说| 2020日本不卡一区二区视频| 国产精品视频网站| 免费中文字幕视频| 色94色欧美sute亚洲13| 久久免费视频2| 人妻与黑人一区二区三区| 在线播放日韩专区| 亚洲女人在线观看| 久久久久久夜精品精品免费| 91在线播放国产| 4438国产精品一区二区| 日韩午夜电影在线观看| 国产高清精品在线观看| 黑人精品一区二区| 中文字幕日韩欧美在线| 国产成年人视频网站| 福利视频网站一区二区三区| 久久全球大尺度高清视频| 51调教丨国产调教视频| 国产日韩欧美激情| 国产精品日韩高清| 日韩 国产 欧美| 欧美猛男gaygay网站| 精品一二三四五区| 香港一级纯黄大片| 日韩中文在线观看| 蜜臀aⅴ国产精品久久久国产老师| 99精品久久免费看蜜臀剧情介绍| 国产精品丝袜久久久久久不卡| 加勒比婷婷色综合久久| 欧美性猛交一区二区三区精品| 国产 欧美 日韩 一区| 麻豆国产91在线播放| 国产大片精品免费永久看nba| 国产无遮挡又黄又爽| 欧美精品1区2区3区| 国产精品国产亚洲精品看不卡| 日韩一区二区三区在线观看视频| 久久国产精品电影| av免费播放网站| 在线这里只有精品| 免费人成自慰网站| 美女视频免费一区| 久久久久久com| 美国黄色小视频| 欧美一区永久视频免费观看| 久久婷婷综合色| 国产精品蜜臀av| 亚洲午夜久久久影院伊人| 免费观看在线综合色| 国产精品国产亚洲伊人久久| 亚洲欧美另类在线视频| 亚洲区一区二区| 国产人妻一区二区| 精品久久久久久久久中文字幕 | 国产精品视频一| 日本久久综合网| 日韩成人在线电影网| 玖草视频在线观看| 色呦呦国产精品| 国产精品涩涩涩视频网站|