成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > beam search及pytorch的實現(xiàn)方式

beam search及pytorch的實現(xiàn)方式

熱門標(biāo)簽:騰訊外呼線路 公司電話機器人 白銀外呼系統(tǒng) 唐山智能外呼系統(tǒng)一般多少錢 哈爾濱ai外呼系統(tǒng)定制 廣告地圖標(biāo)注app 激戰(zhàn)2地圖標(biāo)注 陜西金融外呼系統(tǒng) 海南400電話如何申請

主要記錄兩種不同的beam search版本

版本一

使用類似層次遍歷的方式進(jìn)行搜索,用隊列進(jìn)行維護(hù),每次循環(huán)對當(dāng)前層的所有節(jié)點進(jìn)行搜索,這些節(jié)點每個分別對應(yīng)topk個節(jié)點作為下一層候選節(jié)點,取所有候選節(jié)點的前tok個作為下一層節(jié)點加入隊列

bfs with width constraint. 啟發(fā)式搜索的一種. 屬于貪心算法. 如果k -> inf,那么等價于bfs.

從根節(jié)點開始(),選取所有可能(大概幾萬個)里面概率最大的k個,拓展為下一層節(jié)點.

然后在這k個節(jié)點里面,其可能拓展的所有節(jié)點中(一般是k * 幾萬個),再選取概率最大的k個(注意這里的概率是累乘,即從根節(jié)點到該節(jié)點的概率乘積)拓展. 這里拓展的k個子節(jié)點,其父節(jié)點可以是上一層的k個,也可以只是其中一部分,甚至全部出自其中一個節(jié)點. 以此類推.

這樣形成的是一棵每層都是k個節(jié)點樹(除了根節(jié)點、末尾,和候選者不足k個的情況).

一般概率取log,避免值過小.

舉個例子:k=2

sos> 選取概率最大的三個, “i”: 0.6, “he”: 0.4. 其他單詞忽略不計

拓展一共有4個 (1)“i"后面接,假設(shè)概率最大的是"love”: 0.7, “l(fā)ike”: 0.3 其他單詞忽略不計(2)“he"后面接:假設(shè)概率最大的是"hates”: 0.9, “l(fā)oves”: 0.1 其他單詞忽略不計; 這樣4種可能中,到這里 "i love"概率是0.6 * 0.7 = 0.42, "i like"概率是0.6 * 0.3 = 0.18, "he hates"概率是0.4 * 0.9 = 0.36, "he loves"概率是0.4 * 0.1 = 0.04; 選取概率最大的兩個,“i love"和"he hates”.

下一層拓展仍為4個 (1) "i love"后面接 ,假設(shè)概率最大是 “you”:0.9, 其他單詞加起來0.1;(2)“he hates"后面接,假設(shè)概率最大的是"her”:0.8, “himself”:0.1, 其他單詞加起來0.1; 那么"i love you"概率為 0.42 * 0.9 = 0.378; "he hates her"概率為0.36*0.8 = 0.228,其他不用算了都小于這個值. 最后也選取2個概率最大的: "i love you"和 “he hates her”

下一層拓展, “i love you"應(yīng)該拓展兩個子節(jié)點,發(fā)現(xiàn)”"概率0.99,其他單詞加起來0.01;“he hates her"應(yīng)該拓展兩個子節(jié)點,發(fā)現(xiàn)”"概率0.99,其他單詞加起來0.01;所以概率最大的是"i love you "和"he hates you ". 因兩個分支均遇到,均結(jié)束搜索.

最后在兩個當(dāng)中選擇概率最大的 "i love you ". 結(jié)束

代碼是從一個項目中截取的,只選取了關(guān)鍵內(nèi)容,pytorch實現(xiàn):

class Node(object):
    def __init__(self, hidden, previous_node, decoder_input, attn, log_prob, length):
        self.hidden = hidden
        self.previous_node = previous_node
        self.decoder_input = decoder_input
        self.attn = attn
        self.log_prob = log_prob
        self.length = length        
def beam_search(beam_width):
    ...
    root = Node(hidden, None, decoder_input, None, 0, 1)
    q = Queue()
    q.put(root)
    
    end_nodes = [] #最終節(jié)點的位置,用于回溯
    while not q.empty():
        candidates = []  #每一層的可能被拓展的節(jié)點,只需選取每個父節(jié)點的兒子節(jié)點中概率最大的k個即可
    
        for _ in range(q.qsize()):
            node = q.get()
            decoder_input = node.decoder_input
            hidden = node.hidden
            
            # 搜索終止條件
            if decoder_input.item() == EOS or node.length >= 50:
                end_nodes.append(node)
                continue
              
            log_prob, hidden, attn = decoder(
                 decoder_input, hidden, encoder_input
             )
             
             log_prob, indices = log_prob.topk(beam_width) #選取某個父節(jié)點的兒子節(jié)點概率最大的k個
             
             for k in range(beam_width):
                  index = indices[k].unsqueeze(0)
                  log_p = log_prob[k].item()
                  child = Node(hidden, node, index, attn, node.log_prob + log_p, node.length + 1)
                  candidates.append((node.log_prob + log_p, child))  #建立候選兒子節(jié)點,注意這里概率需要累計
           
         candidates = sorted(candidates, key=lambda x:x[0], reverse=True) #候選節(jié)點排序
         length = min(len(candidates), beam_width)  #取前k個,如果不足k個,則全部入選
         for i in range(length):
             q.put(candidates[i][1])  
    # 后面是回溯, 省略
    ...

版本二

不進(jìn)行層次遍歷,而是每次從整個隊列中拿出概率最大的節(jié)點出隊(優(yōu)先隊列)進(jìn)行搜索,將該節(jié)點的topk加入優(yōu)先隊列,循環(huán)終止的條件是節(jié)點所在位置對應(yīng)長度達(dá)到限制或隊列節(jié)點個數(shù)超過限制

import operator
import torch
import torch.nn as nn
import torch.nn.functional as F
from queue import PriorityQueue
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
SOS_token = 0
EOS_token = 1
MAX_LENGTH = 50
class DecoderRNN(nn.Module):
    def __init__(self, embedding_size, hidden_size, output_size, cell_type, dropout=0.1):
        '''
        Illustrative decoder
        '''
        super(DecoderRNN, self).__init__()
        self.hidden_size = hidden_size
        self.cell_type = cell_type
        self.embedding = nn.Embedding(num_embeddings=output_size,
                                      embedding_dim=embedding_size,
                                      )
        self.rnn = nn.GRU(embedding_size, hidden_size, bidirectional=True, dropout=dropout, batch_first=False)
        self.dropout_rate = dropout
        self.out = nn.Linear(hidden_size, output_size)
    def forward(self, input, hidden, not_used):
        embedded = self.embedding(input).transpose(0, 1)  # [B,1] -> [ 1, B, D]
        embedded = F.dropout(embedded, self.dropout_rate)
        output = embedded
        # batch_first=False, output維度為 (seq_len, batch_size, num_directions * hidden_size) = [1, batch_size, 2*hidden_size]
        output, hidden = self.rnn(output, hidden)
        out = self.out(output.squeeze(0))
        # output維度為 [batch_size, vocab_size]
        # hidden維度為 [num_layers * num_directions, batch_size, hidden_size]
        output = F.log_softmax(out, dim=1)
        return output, hidden
class BeamSearchNode(object):
    def __init__(self, hiddenstate, previousNode, wordId, logProb, length):
        '''
        :param hiddenstate:
        :param previousNode:
        :param wordId:
        :param logProb:
        :param length:
        '''
        self.h = hiddenstate
        self.prevNode = previousNode
        self.wordid = wordId
        self.logp = logProb
        self.leng = length
    def eval(self, alpha=1.0):
        reward = 0
        # Add here a function for shaping a reward
        return self.logp / float(self.leng - 1 + 1e-6) + alpha * reward
decoder = DecoderRNN()
def beam_decode(target_tensor, decoder_hiddens, encoder_outputs=None):
    '''
    :param target_tensor: target indexes tensor of shape [B, T] where B is the batch size and T is the maximum length of the output sentence
    :param decoder_hidden: input tensor of shape [1, B, H] for start of the decoding
    :param encoder_outputs: if you are using attention mechanism you can pass encoder outputs, [T, B, H] where T is the maximum length of input sentence
    :return: decoded_batch
    '''
    beam_width = 10
    topk = 1  # how many sentence do you want to generate
    decoded_batch = []
    # decoding goes sentence by sentence
    for idx in range(target_tensor.size(0)):
        if isinstance(decoder_hiddens, tuple):  # LSTM case
            decoder_hidden = (decoder_hiddens[0][:,idx, :].unsqueeze(0),decoder_hiddens[1][:,idx, :].unsqueeze(0))
        else:
            decoder_hidden = decoder_hiddens[:, idx, :].unsqueeze(0)
        encoder_output = encoder_outputs[:,idx, :].unsqueeze(1)
        # Start with the start of the sentence token
        decoder_input = torch.LongTensor([[SOS_token]], device=device)
        # Number of sentence to generate
        endnodes = []
        number_required = min((topk + 1), topk - len(endnodes))
        # starting node -  hidden vector, previous node, word id, logp, length
        node = BeamSearchNode(decoder_hidden, None, decoder_input, 0, 1)
        nodes = PriorityQueue()
        # start the queue
        nodes.put((-node.eval(), node))
        qsize = 1
        # start beam search
        while True:
            # give up when decoding takes too long
            if qsize > 2000: break
            # fetch the best node
            score, n = nodes.get()
            decoder_input = n.wordid
            decoder_hidden = n.h
            if n.wordid.item() == EOS_token and n.prevNode != None:
                endnodes.append((score, n))
                # if we reached maximum # of sentences required
                if len(endnodes) >= number_required:
                    break
                else:
                    continue
            # output維度為 [batch_size, vocab_size]
            # hidden維度為 [num_layers * num_directions, batch_size, hidden_size]
            # decode for one step using decoder
            decoder_output, decoder_hidden = decoder(decoder_input, decoder_hidden, encoder_output)
            # PUT HERE REAL BEAM SEARCH OF TOP
            # log_prov, indexes維度為 [batch_size, beam_width] = [1, beam_width]
            log_prob, indexes = torch.topk(decoder_output, beam_width, dim=1)
            nextnodes = []
            for new_k in range(beam_width):
                # decoded_t: [1,1],通過view(1,-1)將數(shù)字tensor變?yōu)榫S度為[1,1]的tensor
                decoded_t = indexes[0][new_k].view(1, -1)
                # log_p, int
                log_p = log_prob[0][new_k].item() # item()將tensor數(shù)字變?yōu)閕nt
                node = BeamSearchNode(decoder_hidden, n, decoded_t, n.logp + log_p, n.leng + 1)
                score = -node.eval()
                nextnodes.append((score, node))
            # put them into queue
            for i in range(len(nextnodes)):
                score, nn = nextnodes[i]
                nodes.put((score, nn))
                # increase qsize
            qsize += len(nextnodes) - 1
        # choose nbest paths, back trace them
        if len(endnodes) == 0:
            endnodes = [nodes.get() for _ in range(topk)]
        utterances = []
        for score, n in sorted(endnodes, key=operator.itemgetter(0)):
            utterance = []
            utterance.append(n.wordid)
            # back trace
            while n.prevNode != None:
                n = n.prevNode
                utterance.append(n.wordid)
            utterance = utterance[::-1]
            utterances.append(utterance)
        decoded_batch.append(utterances)
    return decoded_batch
def greedy_decode(decoder_hidden, encoder_outputs, target_tensor):
    '''
    :param target_tensor: target indexes tensor of shape [B, T] where B is the batch size and T is the maximum length of the output sentence
    :param decoder_hidden: input tensor of shape [1, B, H] for start of the decoding
    :param encoder_outputs: if you are using attention mechanism you can pass encoder outputs, [T, B, H] where T is the maximum length of input sentence
    :return: decoded_batch
    '''
    batch_size, seq_len = target_tensor.size()
    decoded_batch = torch.zeros((batch_size, MAX_LENGTH))
    decoder_input = torch.LongTensor([[SOS_token] for _ in range(batch_size)], device=device)
    for t in range(MAX_LENGTH):
        decoder_output, decoder_hidden = decoder(decoder_input, decoder_hidden, encoder_outputs)
        topv, topi = decoder_output.data.topk(1)  # get candidates
        topi = topi.view(-1)
        decoded_batch[:, t] = topi
        decoder_input = topi.detach().view(-1, 1)
    return decoded_batch

補充:beam search 簡單例子實現(xiàn)及講解

看代碼吧~

from math import log
from numpy import array
from numpy import argmax
# beam search
def beam_search_decoder(data, k):
    sequences = [[list(), 1.0]]
    # walk over each step in sequence
    for row in data:
        all_candidates = list()
        # expand each current candidate
        for i in range(len(sequences)):
            seq, score = sequences[i]
            for j in range(len(row)):
                candidate = [seq + [j], score * -log(row[j])]
                all_candidates.append(candidate)
        # order all candidates by score
        ordered = sorted(all_candidates, key=lambda tup :tup[1])
        # select k best
        sequences = ordered[:k]
    return sequences
def greedy_decoder(data):
    # index for largest probability each row
    return [argmax(s) for s in data]
# define a sequence of 10 words over a vocab of 5 words
data = [[0.1, 0.2, 0.3, 0.4, 0.5],
        [0.5, 0.4, 0.3, 0.2, 0.1],
        [0.1, 0.2, 0.3, 0.4, 0.5],
        [0.5, 0.4, 0.3, 0.2, 0.1],
        [0.1, 0.2, 0.3, 0.4, 0.5],
        [0.5, 0.4, 0.3, 0.2, 0.1],
        [0.1, 0.2, 0.3, 0.4, 0.5],
        [0.5, 0.4, 0.3, 0.2, 0.1],
        [0.1, 0.2, 0.3, 0.4, 0.5],
        [0.5, 0.4, 0.3, 0.2, 0.1]]
data = array(data)
# decode sequence
result = beam_search_decoder(data, 3)
# print result
for seq in result:
    print(seq)

每次循環(huán)sequences的值

[[[4], 0.6931471805599453], [[3], 0.916290731874155], [[2], 1.2039728043259361]]

[[[4, 0], 0.4804530139182014], [[4, 1], 0.6351243373717793], [[3, 0], 0.6351243373717793]]

[[[4, 0, 4], 0.33302465198892944], [[4, 0, 3], 0.4402346437542523], [[4, 1, 4], 0.4402346437542523]]

最終print的結(jié)果

[[4, 0, 4, 0, 4, 0, 4, 0, 4, 0], 0.025600863289563108]

[[4, 0, 4, 0, 4, 0, 4, 0, 4, 1], 0.03384250043584397]

[[4, 0, 4, 0, 4, 0, 4, 0, 3, 0], 0.03384250043584397]

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

您可能感興趣的文章:
  • pytorch實現(xiàn)textCNN的具體操作
  • 安裝pytorch時報sslerror錯誤的解決方案
  • Pytorch 如何實現(xiàn)LSTM時間序列預(yù)測
  • pytorch實現(xiàn)ResNet結(jié)構(gòu)的實例代碼
  • pytorch常用數(shù)據(jù)類型所占字節(jié)數(shù)對照表一覽
  • Pytorch 實現(xiàn)變量類型轉(zhuǎn)換
  • Linux環(huán)境下GPU版本的pytorch安裝

標(biāo)簽:四川 黔西 鷹潭 惠州 黑龍江 常德 上海 益陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《beam search及pytorch的實現(xiàn)方式》,本文關(guān)鍵詞  beam,search,及,pytorch,的,實現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《beam search及pytorch的實現(xiàn)方式》相關(guān)的同類信息!
  • 本頁收集關(guān)于beam search及pytorch的實現(xiàn)方式的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产91亚洲精品一区二区三区| 亚洲一区二区伦理| 中文一区二区三区四区| 99精品久久免费看蜜臀剧情介绍| 国产欧美久久久精品免费| 欧美日韩国产中文| 2020国内自拍视频| 92看片淫黄大片欧美看国产片| 亚洲精品美女在线| 日本少妇性高潮| av网站免费播放| 在线观看日韩片| www.色综合| 国偷自产视频一区二区久| 日韩高清a**址| 蜜桃传媒一区二区| 久久www成人_看片免费不卡| 日本夜爽爽一二区| 亚洲永久精品在线观看| 欧美日韩国产麻豆| 亚洲日本va中文字幕久久| 国产日韩欧美视频在线观看| 国产乱子伦视频一区二区三区| 久久蜜桃av一区二区天堂| a免费在线观看| 欧美福利视频一区| www.五月色.com| 久久66热re国产| 91xxx在线观看| 日韩一区二区在线观看视频播放| 欧美日韩一区二区三区免费看| 欧美 日韩 国产 成人 在线 91| 欧美成人精品二区三区99精品| 2017亚洲天堂| 成人综合国产精品| 久久91麻豆精品一区| 国产ts人妖调教重口男| 亚洲va久久久噜噜噜| 一级黄色免费| 亚洲精品免费观看| 精品视频在线观看日韩| 国产精品www色诱视频| 久草成人在线| 91精品国产自产拍在线观看蜜| 午夜视频在线| 一个人看免费www视频有多爽| 国产永久免费高清在线观看| 丰满少妇在线观看| 久久天天狠狠| 日韩欧美精品免费| 正在播放久久| 久久久久久久一区| 国产精品性做久久久久久| 国产又黄又猛视频| 伊人久久大香伊蕉在人线观看热v| 精品综合久久久久久97| 日韩美女啊v在线免费观看| а√天堂www在线а√天堂视频| 99久久精品久久亚洲精品| av电影免费看| 一二三四区在线| 免费欧美激情| 久久亚洲二区三区| 综合伊思人在钱三区| 99视频免费观看| 这里只有精品视频在线| 无人区在线高清完整免费版 一区二| 精品麻豆一区二区三区| 中文字幕国内自拍| 91年精品国产| 欧美丰满老妇熟乱xxxxyyy| 欧美不卡激情三级在线观看| 日本成人在线播放| 欧美日产国产精品| 亚洲视频在线观看一区二区| 久久在线中文字幕| 夜夜添无码一区二区三区| 中文字幕资源站| 极品粉嫩国产18尤物| 国产精品一区二区日韩| 日韩av在线播| 久久亚洲精精品中文字幕早川悠里| 欧美巨乳在线| 91色porny在线视频| 久久久久久日产精品| 欧美日韩国产在线观看| 中文字幕免费不卡| 国产尤物av一区二区三区| 国产精品玖玖玖| 欧美成人午夜电影| 激情视频免费观看在线| 欧美xoxoxo| 日韩一区二区三区免费播放| 欧美做暖暖视频| 偷拍25位美女撒尿视频在线观看| 日批视频免费播放| 黑森林精品导航| 97香蕉碰碰人妻国产欧美| 日本wwwwww| 久久久久国色av免费看影院| www.51色.com| 日韩爱爱小视频| 亚洲美洲欧洲综合国产一区| 成人日韩精品| 波多野结衣一区二区在线| 日韩成人dvd| 日韩欧美的一区二区| 国产成人精品一区二区免费视频| 在线观看三级视频欧美| 久久精品女人的天堂av| 一区二区三区美女| 精品欧美一区二区久久久久| 精品在线播放| 欧美日韩中文在线视频| 亚洲国产日韩一级| 国产欧美精品在线观看| 午夜激情福利电影| 亚洲色图五月天| 中文字幕国内自拍| silk一区二区三区精品视频| 日本a级不卡| 久久久久久免费观看| 青青草精品视频在线| 成人国产二区| 蜜臀av性久久久久av蜜臀妖精| 精品丝袜久久| 人妻无码久久一区二区三区免费| 国内视频一区二区| 精品国产99久久久久久| 中文字幕永久在线观看| 女人黄色免费在线观看| 亚洲a∨精品一区二区三区导航| av在线加勒比| 亚洲AV午夜精品| 亚洲有码转帖| 老司机福利在线观看| 精品国产aⅴ麻豆| 国产视频欧美视频| 免费视频91| 久久精品久久久| 精品露脸国产偷人在视频| 国产美女直播视频一区| 欧美日韩午夜| 免费a漫导航| 成人亚洲免费视频| 亚洲色图狂野欧美| 国产白丝袜美女久久久久| 欧美亚洲国产一区二区三区va| 先锋影音日韩| 国产又粗又大又爽视频| 欧美一区二区美女| 成人高清网站| 羞羞视频在线观看欧美| 在线精品国产欧美| 国产麻豆精品高清在线播放| 天天综合入口| 最新日韩免费视频| 国产精品国产精品国产专区不片| 一级黄色录像毛片| 日韩一区二区免费电影| 欧美日韩国产丝袜另类| 好男人中文字幕官网| 香蕉久久夜色精品国产使用方法| 日本少妇高潮喷水视频| 91porn在线观看| 成人免费av网站| 精品国产伦一区二区三区观看体验| 国产精品二区一区二区aⅴ污介绍| 欧美日本韩国一区| 色综合天天综合网天天看片| 欧美日韩国产丝袜另类| 欧美激情xxxx性bbbb| 国产免费黄网站| 作爱视频免费观看视频在线播放激情网| 国产理论在线| 国产成人a v| 国产精品久久久久av福利动漫| 亚洲精品自拍视频在线观看| 天堂av手机在线| 永久免费毛片在线播放| 欧美日韩一级在线观看| 亚洲一级在线观看| 精品免费国产二区三区| 深夜福利影院在线观看| 久久先锋影音av鲁色资源网| 亚洲三级电影在线观看| 国产精品主播| 欧美黄色免费网站| 日韩成人一区| 色播五月综合网| 亚洲AV成人无码网站天堂久久| 国产成人av网站| 婷婷久久青草热一区二区| 欧美电影h版| 海角国产乱辈乱精品视频| 日韩精品一区二区三区高清免费| www.日日夜夜| 青青青草视频在线| 免费一级毛片在线观看| 亚洲国产成人va在线观看麻豆| 9191国产视频| 亚洲一二三四区不卡| 久久精品国产在热久久| 91精品国产乱码久久久久久| 麻豆91免费| 美国黄色小视频| 欧美中文字幕视频在线观看| 国内精品伊人久久| 婷婷六月综合亚洲| 视频一区国产视频| 在线观看私人影院w| 欧美另类网站| 国产麻豆永久视频| 成人欧美一区二区三区黑人孕妇| 国产精品久久久久久五月尺| 在线免费av网| 国产精品不卡一区二区三区| 亚洲国产第一页| 欧美成人久久电影香蕉| 精品人妻一区二区三区四区在线| 777永久免费网站国产| 蜜桃久久精品一区二区| 久草资源在线视频| 国产精品一区二区视频| 97人妻精品视频一区| 任你操视频在线观看| av电影网站在线观看| 欧美精选一区二区三区| 久草精品视频在线观看| 亚洲女同志freevdieo| 欧美精品三级| 精品亚洲乱码一区二区| 亚洲自拍偷拍二区| 蜜桃av.网站在线观看| 亚洲bbw性色大片| 亚洲激情女人| 亚洲成人av观看| 红桃视频一区二区三区免费| 欧美猛男男男激情videos| 国产成人精品久久二区二区| 黄色成人精品网站| 国产乱淫a∨片免费视频| 一级全黄裸体片| se视频在线观看| 精品999日本久久久影院| 婷婷电影在线观看| 中文字幕日产av一二三区| 国产一区亚洲二区| 99热只有这里有精品| 9.1成人看片免费版| 91美女在线免费观看| 国产乱码一区二区三区四区| 久热视线观看免费视频| 久久国产加勒比精品无码| 毛片基地黄久久久久久天堂| 国产麻豆免费观看| 欧美 日韩 国产 成人 在线 91| 白嫩白嫩国产精品| 亚洲熟女一区二区三区| 久久综合狠狠综合久久综合88| 成人三级视频| 99久久精品国产网站| 黄色片在线看| 国产在线观看中文字幕| 波多野结衣av在线观看| 香蕉在线观看视频| 综合久久久久久久| 超碰97在线资源站| 日韩人妻精品中文字幕| 精品久久一区二区三区| 国产av无码专区亚洲a∨毛片| 亚洲天堂av综合网| 国产永久免费高清在线观看视频| 国产一级片大全| 国产一区二区不卡视频| 欧美xxxxxxxxx| 色一情一乱一伦一区二区三区| 一个人看的视频www| 精品大片一区二区| 黄色网址在线免费看| 69堂成人精品免费视频| 毛片a片免费观看| 日本不卡的三区四区五区| 亚洲午夜剧场| 99re66热这里只有精品3直播| 久久久久久久久久久久久女过产乱| 国产精品极品| 欧美日韩中文不卡| 成人欧美一区二区三区黑人麻豆| jizz在线免费观看| 欧美日韩亚洲综合| 欧美又粗又大又爽| 亚洲一区二区激情| 国产伦精品一区二区三区视频免费| 精品福利一二区| 欧美人成在线观看网站高清| 同产精品九九九| 国产成人无吗| 在线观看免费黄色网址| 亚洲高清资源在线观看| 日韩欧美综合在线视频| 老司机精品福利在线观看| 国产精品扒开做爽爽爽的视频| 国产一区二区三区视频在线播放| 成人黄色大片网站| 黄色在线视频观看网站| 川上优av中文字幕一区二区| 丝袜美女写真福利视频| 亚洲电影av| 97人人澡人人爽人人模亚洲| 亚洲午夜女主播在线直播| 精品久久成人| 综合久久一区二区三区| 91网在线看| 国产精品中文字幕日韩精品| 亚洲同性gay激情无套| 95精品视频| 羞羞在线视频| 精品无码三级在线观看视频| 国产精品实拍| 在线观看涩涩| 国产精品无码久久久久成人app| 二区在线视频| 麻豆中文字幕在线观看| 国内露脸中年夫妇交换精品| 动漫精品一区一码二码三码四码| 天堂在线视频中文网| 2023国产精华国产精品|