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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

推荐系统(三):基于pytorch实现DCN

發(fā)布時間:2023/12/13 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 推荐系统(三):基于pytorch实现DCN 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、main.py

import torch
import tqdm
from sklearn.metrics import roc_auc_score
from torch.utils.data import DataLoader
import os
import numpy as np
from torchfm.dataset.criteo import CriteoDataset

from torchfm.model.dcn import DeepCrossNetworkModel

from torchfm.model.fnn import FactorizationSupportedNeuralNetworkModel

from torchfm.model.pnn import ProductNeuralNetworkModel



def get_dataset(path):
    return CriteoDataset(path)



def get_model(name, dataset):
    """
    Hyperparameters are empirically determined, not opitmized.
    """
    field_dims = dataset.field_dims
    if name == 'fnn':
        return FactorizationSupportedNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16, 16), dropout=0.2)
    elif name == 'ipnn':
        return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16,), method='inner', dropout=0.2)
    elif name == 'opnn':
        return ProductNeuralNetworkModel(field_dims, embed_dim=16, mlp_dims=(16,), method='outer', dropout=0.2)
    elif name == 'dcn':
        return DeepCrossNetworkModel(field_dims, embed_dim=16, num_layers=3, mlp_dims=(16, 16), dropout=0.2)

    else:
        raise ValueError('unknown model name: ' + name)


class EarlyStopper(object):

    def __init__(self, num_trials, save_path):
        self.num_trials = num_trials
        self.trial_counter = 0
        self.best_accuracy = 0
        self.best_loss = 100
        self.save_path = save_path

    def is_continuable(self, model, accuracy):
        if accuracy > self.best_accuracy:
            self.best_accuracy = accuracy
            self.trial_counter = 0
            torch.save(model, self.save_path)
            return True
        elif self.trial_counter + 1 < self.num_trials:
            self.trial_counter += 1
            return True
        else:
            return False

    def is_continue_loss(self, model, loss):
        if loss < self.best_loss:
            self.best_loss = loss
            self.trial_counter = 0
            torch.save(model, self.save_path)
            return True
        elif self.trial_counter + 1 < self.num_trials:
            self.trial_counter += 1
            return True
        else:
            return False


def train(model, optimizer, data_loader, criterion, device, log_interval=100):
    model.train()
    total_loss = 0
    tk0 = tqdm.tqdm(data_loader, smoothing=0, mininterval=1.0)
    for i, (fields, target) in enumerate(tk0):
        fields, target = fields.to(device), target.to(device)
        y = model(fields)
        loss = criterion(y, target.float())
        model.zero_grad()
        loss.backward()
        optimizer.step()
        total_loss += loss.item()
        if (i + 1) % log_interval == 0:
            tk0.set_postfix(loss=total_loss / log_interval)
            total_loss = 0


def my_test(model, data_loader, device, criterion):
    model.eval()
    targets, predicts = list(), list()
    with torch.no_grad():
        for fields, target in tqdm.tqdm(data_loader, smoothing=0, mininterval=1.0):
            fields, target = fields.to(device), target.to(device)
            y = model(fields)
            targets.extend(target.tolist())
            predicts.extend(y.tolist())
            loss = criterion(y, target.float())
    return loss, roc_auc_score(targets, predicts)



def main(dataset_path,
         model_name,
         epoch,
         learning_rate,
         batch_size,
         weight_decay,
         device,
         save_dir):
    device = torch.device(device)
    dataset = get_dataset(dataset_path)
    dims = dataset.field_dims
    npy_out = "field_dims.npy"
    if not os.path.exists(npy_out):
        np.save(npy_out, dims)

    train_length = int(len(dataset) * 0.8)
    valid_length = int(len(dataset) * 0.1)
    test_length = len(dataset) - train_length - valid_length
    train_dataset, valid_dataset, test_dataset = torch.utils.data.random_split(
        dataset, (train_length, valid_length, test_length))
    train_data_loader = DataLoader(train_dataset, batch_size=batch_size, num_workers=0)
    valid_data_loader = DataLoader(valid_dataset, batch_size=batch_size, num_workers=0)
    test_data_loader = DataLoader(test_dataset, batch_size=batch_size, num_workers=0)
    model = get_model(model_name, dataset).to(device)
    criterion = torch.nn.BCELoss()
    optimizer = torch.optim.Adam(params=model.parameters(), lr=learning_rate, weight_decay=weight_decay)
    early_stopper = EarlyStopper(num_trials=5, save_path=f'{save_dir}/{model_name}.pt')
    for epoch_i in range(epoch):
        train(model, optimizer, train_data_loader, criterion, device)
        loss, auc = my_test(model, valid_data_loader, device, criterion)
        print('epoch:', epoch_i, 'validation: auc:', auc, "loss:", loss)
        if not early_stopper.is_continuable(model, auc):
            print(f'validation: best auc: {early_stopper.best_accuracy}')
            break
    loss, auc = my_test(model, test_data_loader, device, criterion)
    print(f'test loss: {loss}, test auc: {auc}')


if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser()

    parser.add_argument('--dataset_path', default=r'E:ecommend_systemdata	rain.txt')
    parser.add_argument('--model_name', default='dcn')
    parser.add_argument('--epoch', type=int, default=100)
    parser.add_argument('--learning_rate', type=float, default=0.005)
    parser.add_argument('--batch_size', type=int, default=32)
    parser.add_argument('--weight_decay', type=float, default=1e-6)
    parser.add_argument('--device', default='cpu')
    parser.add_argument('--save_dir', default='E:/recommend_system/chkpt')
    args = parser.parse_args()
    main(args.dataset_path,
         args.model_name,
         args.epoch,
         args.learning_rate,
         args.batch_size,
         args.weight_decay,
         args.device,
         args.save_dir)

二、predicts.py

import numpy as np
from functools import lru_cache
import math
import torch

@lru_cache(maxsize=None)
def convert_numeric_feature(val: str):
    if val == '':
        return 'NULL'
    v = int(val)
    if v > 2:
        return str(int(math.log(v) ** 2))
    else:
        return str(v - 2)

class InferencePredict():
    def __init__(self):
        mapper_path = "mapper.npy"
        self.model_path = r"E:ecommend_systemchkptdcn.pt"
        """數(shù)值和類別總列數(shù)"""
        self.NUM_FEATS = 23
        """數(shù)值類別"""
        self.NUM_INT_FEATS = 7
        read_dictionary = np.load(mapper_path, allow_pickle=True).item()
        self.feat_mapper = read_dictionary["feat_mapper"]
        self.defaults = read_dictionary["defaults"]
        self.model = torch.load(self.model_path)
        self.model.eval()

    def get_data(self, dataline, feat_mapper,defaults):
        values = dataline.rstrip('
').split('	')
        np_array = np.zeros(self.NUM_FEATS + 1, dtype=np.uint32)
        np_array[0] = int(values[0])
        for i in range(1, self.NUM_INT_FEATS + 1):
            np_array[i] = feat_mapper[i].get(convert_numeric_feature(values[i]), defaults[i])
        for i in range(self.NUM_INT_FEATS + 1, self.NUM_FEATS + 1):
            np_array[i] = feat_mapper[i].get(values[i], defaults[i])
        return np_array

    def predict(self, dataline):

        np_array = self.get_data(dataline, self.feat_mapper,self.defaults).astype(dtype=np.long)
        x,y = np_array[1:], np_array[0]
        with torch.no_grad():
            output = self.model(torch.from_numpy(x))
            print(output)
            preds = int(torch.round(output).item())
        return preds, y

    def main(self):
        s1 = "1    450    18    47    619    153    12    0    male    daily    1    0    0    0    0    MD280612    BR803759    PV285968    CT470265    PF470265    10    0    2    0    W441,W19887,W45818,W63,W894,W38883,W135945,W1684,W72349,W15298,W858,W38883"
        s2 = "0    290    0    34    0    0    12    5    male    monthly    1    0    0    0    0    MD441850    BR803759    PV419710    CT378940    PF470265    0    0    3    0    W605,W396,W554,W6275,W6257,W651,W51,W32265,W682,W250,W97,W1748"
        s3 = "0    290    0    34    0    0    12    5    male    monthly    1    0    0    0    0    MD441850    BR803759    PV419710    CT378940    PF470265    0    0    3    0    W605,W396,W554,W6275,W6257,W651,W51,W32265,W682,W250,W97,W1748"
        self.predict(s1)
        self.predict(s2)
        self.predict(s3)



if __name__ == '__main__':
    InferencePredict().main()

三、critio.py

import math
import shutil
import struct
from collections import defaultdict
from functools import lru_cache
from pathlib import Path

import lmdb
import numpy as np
import torch.utils.data
from tqdm import tqdm
import os



class CriteoDataset(torch.utils.data.Dataset):
    """
    Criteo Display Advertising Challenge Dataset

    Data prepration:
        * Remove the infrequent features (appearing in less than threshold instances) and treat them as a single feature
        * Discretize numerical values by log2 transformation which is proposed by the winner of Criteo Competition

    :param dataset_path: criteo train.txt path.
    :param cache_path: lmdb cache path.
    :param rebuild_cache: If True, lmdb cache is refreshed.
    :param min_threshold: infrequent feature threshold.

    Reference:
        https://labs.criteo.com/2014/02/kaggle-display-advertising-challenge-dataset
        https://www.csie.ntu.edu.tw/~r01922136/kaggle-2014-criteo.pdf
    """

    def __init__(self, dataset_path=None, cache_path='.criteo', rebuild_cache=True, min_threshold=10):
        """數(shù)值和類別總列數(shù)"""
        self.NUM_FEATS = 23
        """數(shù)值類別"""
        self.NUM_INT_FEATS = 7
        self.min_threshold = min_threshold
        if rebuild_cache or not Path(cache_path).exists():
            shutil.rmtree(cache_path, ignore_errors=True)
            if dataset_path is None:
                raise ValueError('create cache: failed: dataset_path is None')
            self.__build_cache(dataset_path, cache_path)
        self.env = lmdb.open(cache_path, create=False, lock=False, readonly=True)
        with self.env.begin(write=False) as txn:
            self.length = txn.stat()['entries'] - 1
            self.field_dims = np.frombuffer(txn.get(b'field_dims'), dtype=np.uint32)

    def __getitem__(self, index):
        with self.env.begin(write=False) as txn:
            np_array = np.frombuffer(
                txn.get(struct.pack('>I', index)), dtype=np.uint32).astype(dtype=np.long)
        return np_array[1:], np_array[0]

    def __len__(self):
        return self.length

    def __build_cache(self, path, cache_path):
        feat_mapper, defaults = self.__get_feat_mapper(path)
        my_dict = {"feat_mapper":feat_mapper, "defaults": defaults}
        my_path = "mapper.npy"
        if not os.path.exists(my_path):
            np.save(my_path, my_dict)
        with lmdb.open(cache_path, map_size=int(1e11)) as env:
            field_dims = np.zeros(self.NUM_FEATS, dtype=np.uint32)
            for i, fm in feat_mapper.items():
                field_dims[i - 1] = len(fm) + 1
            with env.begin(write=True) as txn:
                txn.put(b'field_dims', field_dims.tobytes())
            for buffer in self.__yield_buffer(path, feat_mapper, defaults):
                with env.begin(write=True) as txn:
                    for key, value in buffer:
                        txn.put(key, value)

    def __get_feat_mapper(self, path):
        feat_cnts = defaultdict(lambda: defaultdict(int))
        with open(path) as f:
            pbar = tqdm(f, mininterval=1, smoothing=0.1)
            pbar.set_description('Create criteo dataset cache: counting features')
            for line in pbar:
                values = line.rstrip('
').split('	')
                for i in range(1, self.NUM_INT_FEATS + 1):
                    feat_cnts[i][convert_numeric_feature(values[i])] += 1
                for i in range(self.NUM_INT_FEATS + 1, self.NUM_FEATS + 1):
                    feat_cnts[i][values[i]] += 1
        feat_mapper = {i: {feat for feat, c in cnt.items() if c >= self.min_threshold} for i, cnt in feat_cnts.items()}
        feat_mapper = {i: {feat: idx for idx, feat in enumerate(cnt)} for i, cnt in feat_mapper.items()}
        defaults = {i: len(cnt) for i, cnt in feat_mapper.items()}
        return feat_mapper, defaults

    def __yield_buffer(self, path, feat_mapper, defaults, buffer_size=int(1e5)):
        item_idx = 0
        buffer = list()
        with open(path) as f:
            pbar = tqdm(f, mininterval=1, smoothing=0.1)
            pbar.set_description('Create criteo dataset cache: setup lmdb')
            for line in pbar:
                values = line.rstrip('
').split('	')
                np_array = np.zeros(self.NUM_FEATS + 1, dtype=np.uint32)
                np_array[0] = int(values[0])
                for i in range(1, self.NUM_INT_FEATS + 1):
                    np_array[i] = feat_mapper[i].get(convert_numeric_feature(values[i]), defaults[i])
                for i in range(self.NUM_INT_FEATS + 1, self.NUM_FEATS + 1):
                    np_array[i] = feat_mapper[i].get(values[i], defaults[i])

                buffer.append((struct.pack('>I', item_idx), np_array.tobytes()))
                item_idx += 1
                if item_idx % buffer_size == 0:
                    yield buffer
                    buffer.clear()
            yield buffer


@lru_cache(maxsize=None)
def convert_numeric_feature(val: str):
    if val == '':
        return 'NULL'
    v = int(val)
    if v > 2:
        return str(int(math.log(v) ** 2))
    else:
        return str(v - 2)

四、DCN.py

import torch

from torchfm.layer import FeaturesEmbedding, CrossNetwork, MultiLayerPerceptron


class DeepCrossNetworkModel(torch.nn.Module):
    """
    A pytorch implementation of Deep & Cross Network.

    Reference:
        R Wang, et al. Deep & Cross Network for Ad Click Predictions, 2017.
    """

    def __init__(self, field_dims, embed_dim, num_layers, mlp_dims, dropout):
        super().__init__()
        self.embedding = FeaturesEmbedding(field_dims, embed_dim)
        self.embed_output_dim = len(field_dims) * embed_dim
        self.cn = CrossNetwork(self.embed_output_dim, num_layers)
        self.mlp = MultiLayerPerceptron(self.embed_output_dim, mlp_dims, dropout, output_layer=False)
        self.linear = torch.nn.Linear(mlp_dims[-1] + self.embed_output_dim, 1)

    def forward(self, x):
        """
        :param x: Long tensor of size ``(batch_size, num_fields)``
        """
        embed_x = self.embedding(x).view(-1, self.embed_output_dim)
        x_l1 = self.cn(embed_x)
        h_l2 = self.mlp(embed_x)
        x_stack = torch.cat([x_l1, h_l2], dim=1)
        p = self.linear(x_stack)
        return torch.sigmoid(p.squeeze(1))

五、layer.py

import numpy as np
import torch
import torch.nn.functional as F


class FeaturesLinear(torch.nn.Module):

    def __init__(self, field_dims, output_dim=1):
        super().__init__()
        self.fc = torch.nn.Embedding(sum(field_dims), output_dim)
        self.bias = torch.nn.Parameter(torch.zeros((output_dim,)))
        self.offsets = np.array((0, *np.cumsum(field_dims)[:-1]), dtype=np.long)

    def forward(self, x):
        """
        :param x: Long tensor of size ``(batch_size, num_fields)``
        """
        x = x + x.new_tensor(self.offsets).unsqueeze(0)
        return torch.sum(self.fc(x), dim=1) + self.bias


class FeaturesEmbedding(torch.nn.Module):

    def __init__(self, field_dims, embed_dim):
        super().__init__()
        self.embedding = torch.nn.Embedding(sum(field_dims), embed_dim)
        self.offsets = np.array((0, *np.cumsum(field_dims)[:-1]), dtype=np.long)
        torch.nn.init.xavier_uniform_(self.embedding.weight.data)

    def forward(self, x):
        """
        :param x: Long tensor of size ``(batch_size, num_fields)``
        """
        x = x + x.new_tensor(self.offsets).unsqueeze(0)
        return self.embedding(x)


class FieldAwareFactorizationMachine(torch.nn.Module):

    def __init__(self, field_dims, embed_dim):
        super().__init__()
        self.num_fields = len(field_dims)
        self.embeddings = torch.nn.ModuleList([
            torch.nn.Embedding(sum(field_dims), embed_dim) for _ in range(self.num_fields)
        ])
        self.offsets = np.array((0, *np.cumsum(field_dims)[:-1]), dtype=np.long)
        for embedding in self.embeddings:
            torch.nn.init.xavier_uniform_(embedding.weight.data)

    def forward(self, x):
        """
        :param x: Long tensor of size ``(batch_size, num_fields)``
        """
        x = x + x.new_tensor(self.offsets).unsqueeze(0)
        xs = [self.embeddings[i](x) for i in range(self.num_fields)]
        ix = list()
        for i in range(self.num_fields - 1):
            for j in range(i + 1, self.num_fields):
                ix.append(xs[j][:, i] * xs[i][:, j])
        ix = torch.stack(ix, dim=1)
        return ix


class FactorizationMachine(torch.nn.Module):

    def __init__(self, reduce_sum=True):
        super().__init__()
        self.reduce_sum = reduce_sum

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        square_of_sum = torch.sum(x, dim=1) ** 2
        sum_of_square = torch.sum(x ** 2, dim=1)
        ix = square_of_sum - sum_of_square
        if self.reduce_sum:
            ix = torch.sum(ix, dim=1, keepdim=True)
        return 0.5 * ix


class MultiLayerPerceptron(torch.nn.Module):

    def __init__(self, input_dim, embed_dims, dropout, output_layer=True):
        super().__init__()
        layers = list()
        for embed_dim in embed_dims:
            layers.append(torch.nn.Linear(input_dim, embed_dim))
            layers.append(torch.nn.BatchNorm1d(embed_dim))
            layers.append(torch.nn.ReLU())
            layers.append(torch.nn.Dropout(p=dropout))
            input_dim = embed_dim
        if output_layer:
            layers.append(torch.nn.Linear(input_dim, 1))
        self.mlp = torch.nn.Sequential(*layers)

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, embed_dim)``
        """
        return self.mlp(x)


class InnerProductNetwork(torch.nn.Module):

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        num_fields = x.shape[1]
        row, col = list(), list()
        for i in range(num_fields - 1):
            for j in range(i + 1, num_fields):
                row.append(i), col.append(j)
        return torch.sum(x[:, row] * x[:, col], dim=2)


class OuterProductNetwork(torch.nn.Module):

    def __init__(self, num_fields, embed_dim, kernel_type='mat'):
        super().__init__()
        num_ix = num_fields * (num_fields - 1) // 2
        if kernel_type == 'mat':
            kernel_shape = embed_dim, num_ix, embed_dim
        elif kernel_type == 'vec':
            kernel_shape = num_ix, embed_dim
        elif kernel_type == 'num':
            kernel_shape = num_ix, 1
        else:
            raise ValueError('unknown kernel type: ' + kernel_type)
        self.kernel_type = kernel_type
        self.kernel = torch.nn.Parameter(torch.zeros(kernel_shape))
        torch.nn.init.xavier_uniform_(self.kernel.data)

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        num_fields = x.shape[1]
        row, col = list(), list()
        for i in range(num_fields - 1):
            for j in range(i + 1, num_fields):
                row.append(i), col.append(j)
        p, q = x[:, row], x[:, col]
        if self.kernel_type == 'mat':
            kp = torch.sum(p.unsqueeze(1) * self.kernel, dim=-1).permute(0, 2, 1)
            return torch.sum(kp * q, -1)
        else:
            return torch.sum(p * q * self.kernel.unsqueeze(0), -1)


class CrossNetwork(torch.nn.Module):

    def __init__(self, input_dim, num_layers):
        super().__init__()
        self.num_layers = num_layers
        self.w = torch.nn.ModuleList([
            torch.nn.Linear(input_dim, 1, bias=False) for _ in range(num_layers)
        ])
        self.b = torch.nn.ParameterList([
            torch.nn.Parameter(torch.zeros((input_dim,))) for _ in range(num_layers)
        ])

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        x0 = x
        for i in range(self.num_layers):
            xw = self.w[i](x)
            x = x0 * xw + self.b[i] + x
        return x


class AttentionalFactorizationMachine(torch.nn.Module):

    def __init__(self, embed_dim, attn_size, dropouts):
        super().__init__()
        self.attention = torch.nn.Linear(embed_dim, attn_size)
        self.projection = torch.nn.Linear(attn_size, 1)
        self.fc = torch.nn.Linear(embed_dim, 1)
        self.dropouts = dropouts

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        num_fields = x.shape[1]
        row, col = list(), list()
        for i in range(num_fields - 1):
            for j in range(i + 1, num_fields):
                row.append(i), col.append(j)
        p, q = x[:, row], x[:, col]
        inner_product = p * q
        attn_scores = F.relu(self.attention(inner_product))
        attn_scores = F.softmax(self.projection(attn_scores), dim=1)
        attn_scores = F.dropout(attn_scores, p=self.dropouts[0], training=self.training)
        attn_output = torch.sum(attn_scores * inner_product, dim=1)
        attn_output = F.dropout(attn_output, p=self.dropouts[1], training=self.training)
        return self.fc(attn_output)


class CompressedInteractionNetwork(torch.nn.Module):

    def __init__(self, input_dim, cross_layer_sizes, split_half=True):
        super().__init__()
        self.num_layers = len(cross_layer_sizes)
        self.split_half = split_half
        self.conv_layers = torch.nn.ModuleList()
        prev_dim, fc_input_dim = input_dim, 0
        for i in range(self.num_layers):
            cross_layer_size = cross_layer_sizes[i]
            self.conv_layers.append(torch.nn.Conv1d(input_dim * prev_dim, cross_layer_size, 1,
                                                    stride=1, dilation=1, bias=True))
            if self.split_half and i != self.num_layers - 1:
                cross_layer_size //= 2
            prev_dim = cross_layer_size
            fc_input_dim += prev_dim
        self.fc = torch.nn.Linear(fc_input_dim, 1)

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        xs = list()
        x0, h = x.unsqueeze(2), x
        for i in range(self.num_layers):
            x = x0 * h.unsqueeze(1)
            batch_size, f0_dim, fin_dim, embed_dim = x.shape
            x = x.view(batch_size, f0_dim * fin_dim, embed_dim)
            x = F.relu(self.conv_layers[i](x))
            if self.split_half and i != self.num_layers - 1:
                x, h = torch.split(x, x.shape[1] // 2, dim=1)
            else:
                h = x
            xs.append(x)
        return self.fc(torch.sum(torch.cat(xs, dim=1), 2))


class AnovaKernel(torch.nn.Module):

    def __init__(self, order, reduce_sum=True):
        super().__init__()
        self.order = order
        self.reduce_sum = reduce_sum

    def forward(self, x):
        """
        :param x: Float tensor of size ``(batch_size, num_fields, embed_dim)``
        """
        batch_size, num_fields, embed_dim = x.shape
        a_prev = torch.ones((batch_size, num_fields + 1, embed_dim), dtype=torch.float).to(x.device)
        for t in range(self.order):
            a = torch.zeros((batch_size, num_fields + 1, embed_dim), dtype=torch.float).to(x.device)
            a[:, t+1:, :] += x[:, t:, :] * a_prev[:, t:-1, :]
            a = torch.cumsum(a, dim=1)
            a_prev = a
        if self.reduce_sum:
            return torch.sum(a[:, -1, :], dim=-1, keepdim=True)
        else:
            return a[:, -1, :]

總結(jié)

以上是生活随笔為你收集整理的推荐系统(三):基于pytorch实现DCN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

久久草在线视频国产 | 人人爽人人干 | 午夜视频亚洲 | 日韩欧美在线观看一区二区三区 | 精品国产乱码久久久久久久 | 国产资源中文字幕 | 日本中文在线播放 | 日本99热 | 日日夜夜精品网站 | 久久久久久久久久久高潮一区二区 | 中文字幕免费国产精品 | 色婷婷成人 | 六月丁香在线视频 | 黄色a在线观看 | 国产伦精品一区二区三区四区视频 | www亚洲视频 | 夜夜躁天天躁很躁波 | 人人舔人人干 | 日韩一区二区三区高清免费看看 | 久久久久久久久久久久久影院 | 亚洲黄污| 中日韩免费视频 | 免费观看一级 | 天天艹天天干天天 | 午夜精品久久久久久99热明星 | 国产在线观看免费 | 国产在线观看地址 | 国产一区自拍视频 | wwwwww国产| www.亚洲精品在线 | 黄色电影网站在线观看 | 久久狠狠婷婷 | 97人人人人 | 日韩欧三级 | 国产热re99久久6国产精品 | 激情五月婷婷综合网 | 国产精品成人一区二区 | 超碰国产在线播放 | 天堂av免费观看 | 欧美日韩高清在线 | 国内精品久久久久影院优 | 一级片免费视频 | 一区二区三区四区在线 | 国产裸体永久免费视频网站 | 欧美有色| 91视频免费视频 | 久久这里只有精品1 | 91亚洲精品国产 | 成人av手机在线 | 亚洲综合小说 | 99精品视频在线播放观看 | 丝袜网站在线观看 | 婷婷色5月 | 欧美激情精品 | 在线观看mv的中文字幕网站 | 在线观看国产日韩 | 久久黄色网页 | 久插视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 色wwwww | 国产原厂视频在线观看 | 中文字幕a在线 | av电影在线免费观看 | 亚洲欧美综合 | 手机在线看a | 国产一级片免费视频 | 久久精品亚洲综合专区 | 在线国产一区二区三区 | 免费中文字幕视频 | 久草青青在线观看 | 国产99re| 亚洲成人中文在线 | 日韩黄色一区 | www.黄色网.com| 色狠狠婷婷 | 日韩免费大片 | 三上悠亚一区二区在线观看 | 亚洲欧洲精品视频 | 欧美日韩国产伦理 | 久草影视在线观看 | 日韩精品视频在线观看免费 | 久久国内免费视频 | 日本黄网站 | 国色天香av | 精品在线观看视频 | 18网站在线观看 | 国产一级黄色电影 | 亚洲精品福利在线观看 | 最新av网址在线 | 中文字幕永久 | 亚洲天堂网在线视频观看 | 最近最新最好看中文视频 | 久久久久久久久久久网 | 不卡中文字幕av | 在线a视频 | 国产精品嫩草影院99网站 | 精品欧美小视频在线观看 | 国产一性一爱一乱一交 | 亚洲mv大片欧洲mv大片免费 | 99精品在线观看 | 欧美孕交vivoestv另类 | 久草.com | 国产成人一区二区啪在线观看 | 中文字幕 国产精品 | www..com黄色片 | 久久综合婷婷 | 国产精品视频免费观看 | 韩国av免费看| 中文字幕亚洲在线观看 | 99精品视频中文字幕 | 欧美激情精品久久久久久免费 | 国产99久久久欧美黑人 | 久久爱www.| av在线一级 | 国产午夜精品一区 | 欧美韩日精品 | 天天操天天干天天干 | 国产91九色视频 | 国产精品一区二区吃奶在线观看 | 亚洲夜夜网 | 91视频一8mav| 久久国产网 | 天天射天天搞 | 日日夜夜骑 | 91网站观看 | 午夜久久 | 98久9在线 | 免费 | 99久e精品热线免费 99国产精品久久久久久久久久 | 国产96av| 日本精品久久久久 | 亚洲欧洲国产精品 | 国产99久久久国产精品成人免费 | 国产福利一区二区在线 | 97国产大学生情侣酒店的特点 | 亚洲免费精品一区二区 | 黄色大片中国 | 天天操操操操操 | 国产亚洲精品久久久网站好莱 | 亚洲无吗天堂 | 国产一二区免费视频 | 亚洲欧洲视频 | 亚洲精品国产精品国自产 | 成人网页在线免费观看 | 成年人app网址 | 久久精彩免费视频 | 国产69精品久久久久久久久久 | 国产视频 久久久 | 香蕉久草| 国产精品乱码久久久 | 午夜精品在线看 | 久久蜜臀一区二区三区av | 在线看片a | 久久精品国产精品 | 国产精品久久久久永久免费 | 久青草影院 | 久久黄色小说视频 | 国产一级免费播放 | 97电院网手机版 | www.五月天激情 | 九九热视频在线 | 99久久婷婷国产一区二区三区 | 欧美va天堂va视频va在线 | 亚洲精品中文在线 | 在线观看亚洲成人 | 精产嫩模国品一二三区 | 国产小视频在线播放 | 欧美精品久久久久久久久久 | 国产精品美女久久久久久2018 | 久久精品久久久久久久 | 国产视频精品免费 | 五月婷久久 | 久久韩国免费视频 | 成人9ⅰ免费影视网站 | 综合国产在线观看 | 国产美女在线免费观看 | 久久福利 | 黄色片视频在线观看 | 婷婷亚洲最大 | 蜜臀av网址| 日本精品va在线观看 | 波多野结衣综合网 | 国产精品区二区三区日本 | 国产一区二区三区免费观看视频 | 成人国产精品入口 | 亚洲 欧美 变态 国产 另类 | 午夜av在线电影 | 在线视频观看亚洲 | 九草视频在线观看 | 激情欧美丁香 | 最近日本中文字幕 | 在线观看视频一区二区三区 | 日韩在线字幕 | 黄色在线观看网站 | 国内精品免费久久影院 | 成年人视频免费在线播放 | 99在线精品视频 | 制服丝袜亚洲 | 日韩在线| 四虎国产 | 成人va视频 | 色婷婷色| 精品国产美女 | 国产亚洲精品久久久久久移动网络 | 国产色久 | 亚洲一级片在线观看 | 日韩在线激情 | 99色在线观看视频 | 国产美女主播精品一区二区三区 | 91视频 - 114av | 日韩av成人免费看 | 99久久久国产精品免费99 | 日本在线成人 | 中文字幕 国产视频 | 黄色三级免费看 | 日韩精品免费一区二区 | 中文字幕av一区二区三区四区 | 久久婷婷五月综合色丁香 | 成人97视频 | 99热在线观看免费 | 免费看av在线 | 精品国产_亚洲人成在线 | a视频在线观看免费 | 超碰在线天天 | 日韩草比 | 黄色影院在线免费观看 | 麻豆传媒一区二区 | 国产精品 中文在线 | 在线影院av | 天天色天天爱天天射综合 | 国产精品成人一区二区三区 | 人人爽人人乐 | 国产一级做a | 国产精品99久久久久久久久 | 国产永久免费 | 国产中文字幕第一页 | 日韩区在线观看 | 97操碰| 国产真实精品久久二三区 | 欧美另类v| 日韩特黄一级欧美毛片特黄 | 久久精品毛片基地 | 久久久久97国产 | bbbb操bbbb| 精品影院一区二区久久久 | 精品久久精品 | 中文字幕在 | av免费在线网站 | 九九精品视频在线观看 | 日日干综合 | 天天摸天天舔 | 在线观看免费黄视频 | 国产欧美中文字幕 | 国产精品毛片久久蜜 | 在线观看国产 | 国产亚洲精品久久久久久大师 | 欧美日韩视频精品 | 国产精品国内免费一区二区三区 | 在线视频1卡二卡三卡 | 久草www | 日韩高清激情 | 欧美日韩中字 | 日韩在线视频免费观看 | 久久免费视频这里只有精品 | 欧美日韩视频在线观看免费 | 免费在线电影网址大全 | 欧美精品久久久久久久免费 | 黄污网站在线观看 | 国产小视频免费在线观看 | 免费看av片网站 | 天天操狠狠操夜夜操 | 色先锋av资源中文字幕 | 激情五月婷婷 | 黄色毛片一级 | 成人羞羞视频在线观看免费 | 美女黄频在线观看 | 免费视频91 | 久久久久久久久久久网 | 夜夜操狠狠干 | 色综合色综合久久综合频道88 | 人人澡人人爽 | 91麻豆免费视频 | 色91在线 | 国产高清在线永久 | 日日操夜| 99re6热在线精品视频 | av免费播放 | 精品一区二区视频 | 免费中午字幕无吗 | 亚洲色五月 | 天天色视频 | 日韩av免费观看网站 | 亚洲欧美国内爽妇网 | 激情欧美丁香 | 久久这里只有精品久久 | 国产品久精国精产拍 | 97免费在线观看视频 | 日韩激情视频在线 | 在线观看亚洲成人 | 国产精品va在线观看入 | 在线观看精品黄av片免费 | 国产精品麻豆视频 | 精品av网站| 91麻豆网 | 黄色网址a | 久久精品中文字幕少妇 | 最近日本中文字幕a | 久久九九影视网 | 天天色棕合合合合合合 | 国产亚洲一级高清 | 狠狠色丁香婷婷综合视频 | 免费福利在线 | 手机在线看a | 成人午夜影院在线观看 | 在线观看免费成人av | 黄色.com| 免费电影一区二区三区 | 成人免费毛片aaaaaa片 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产乱码精品一区二区三区介绍 | 色综合久久88 | 精品麻豆| 成人a在线观看 | 国产成人亚洲在线观看 | 欧美天堂久久 | 国产精品 999| 日韩啪啪小视频 | 四虎在线免费观看 | av官网在线 | 夜夜操天天操 | 日本aaa在线观看 | 亚洲黄色片在线 | 999久久精品 | 免费看色视频 | 麻豆手机在线 | 91视频3p| 特黄特色特刺激视频免费播放 | 91看片在线看片 | 黄色av一级片| 亚洲精品一区二区三区在线观看 | 在线国产99 | 免费黄色av. | 成人久久亚洲 | www.av免费| 美女网站视频色 | 激情五月在线视频 | 亚州国产视频 | 99精品亚洲 | 国产精品视频不卡 | 国产精品av在线免费观看 | 日韩中文字幕免费视频 | 日韩免费一二三区 | 成人午夜在线电影 | 精品国产成人av在线免 | 91精选在线 | 91免费的视频在线播放 | 天天操夜夜操国产精品 | 人人澡超碰碰 | 特级xxxxx欧美| 免费观看的av | av电影一区 | 成av在线 | 伊人成人激情 | 欧美aaaxxxx做受视频 | 一本到视频在线观看 | 99精品99| 精品国产一区二区三区久久 | 欧美精品在线免费 | av在线8 | 波多野结衣一区二区三区中文字幕 | 久久影院一区 | 亚洲永久国产精品 | 亚洲欧美成人在线 | 黄色免费看片网站 | 久久成人视屏 | 人人搞人人搞 | 在线观看91av | 久久一精品 | 国产成人一区二区啪在线观看 | 亚洲成人资源网 | 免费看一级黄色 | 国产精品午夜免费福利视频 | 美女在线观看av | 欧美日韩一区二区三区在线观看视频 | 欧美激情视频免费看 | 国产无遮挡又黄又爽在线观看 | 五月天开心 | 日韩成人免费在线电影 | 久久永久视频 | 国产黄色免费看 | 精品一区久久 | 婷婷综合伊人 | 又爽又黄又刺激的视频 | 久久久久久久综合色一本 | 97**国产露脸精品国产 | 亚洲综合小说 | 在线观看视频日韩 | av中文字幕在线免费观看 | 国产精品99久久久 | 在线观看国产永久免费视频 | 亚洲精品国产精品国自 | 在线视频黄 | 久久久精品综合 | 欧美一级日韩三级 | 日韩二区三区 | 精品理论片 | 日韩中文字幕免费电影 | 91片网| 国产免费美女 | 欧美日韩国产精品爽爽 | 国产69熟 | 欧洲精品码一区二区三区免费看 | 欧美一区二区三区特黄 | 免费aa大片| 狠狠干天天操 | av中文国产 | 四虎国产永久在线精品 | 亚洲精品合集 | 国产亚洲精品久久 | 亚洲国产丝袜在线观看 | 国产精品专区在线 | 日韩欧美综合 | 亚洲第一中文网 | 日韩在线三区 | 亚洲综合狠狠干 | 亚洲第一成网站 | 91视视频在线直接观看在线看网页在线看 | 欧美日韩亚洲第一页 | 婷婷六月综合网 | www91在线观看 | 成人国产精品电影 | 天天夜夜狠狠操 | 日韩激情视频在线 | 欧美精品你懂的 | 亚洲人人射 | 日本99热| 欧美亚洲一区二区在线 | 五月天久久久 | 亚洲精品乱码久久久久v最新版 | 亚洲九九九在线观看 | 美女很黄免费网站 | www.超碰97.com| 久久综合福利 | 九九有精品 | 久久婷婷国产色一区二区三区 | 在线视频免费观看 | 中文字幕999 | 亚洲免费av一区二区 | 午夜精品99久久免费 | 99色在线| 在线观看黄av | 国产在线精品一区二区 | 伊人天堂久久 | 91专区在线观看 | 国产一级做a爱片久久毛片a | 亚洲精品国 | 一区在线播放 | 国产精品女同一区二区三区久久夜 | 玖草在线观看 | 99久久精品国 | 日韩高清在线看 | 久久久久久久久久久久亚洲 | 在线看的av网站 | 97天堂网 | 精品视频国产一区 | 综合久久久 | 69av久久| 国产精品乱码久久 | 黄视频色网站 | 日韩伦理一区二区三区av在线 | 激情黄色av| 日韩一级网站 | 天天超碰 | 91成人精品一区在线播放69 | 久久情网 | 中文字幕在线看人 | 日韩免费观看一区二区三区 | 中文字幕精 | 亚洲毛片在线观看. | 日日射av | 国产字幕在线观看 | 成人在线一区二区三区 | 狠狠干天天射 | 在线免费观看黄色小说 | 精品福利网站 | 国产偷在线 | 四虎在线免费观看视频 | 99精品视频播放 | 91最新网址| 成人片在线播放 | 亚洲综合最新在线 | 婷婷六月激情 | 亚洲综合激情 | 麻豆视频成人 | 午夜精品三区 | av解说在线观看 | 久久天天躁夜夜躁狠狠躁2022 | 麻豆免费视频 | 三级黄色在线观看 | 99久久婷婷国产一区二区三区 | 欧美国产不卡 | 中文字幕一区二区三区四区久久 | 欧美黑人性猛交 | 亚洲精品午夜久久久久久久久久久 | 激情综合一区 | 国产成人1区 | 在线观看亚洲国产 | 色国产精品一区在线观看 | 91手机电视 | 欧美激情精品久久久久久 | 日韩免费视频 | 中文字幕超清在线免费 | 日韩精品久久中文字幕 | 国产精品原创在线 | 深爱五月激情网 | 日本一区二区三区免费看 | 亚洲精品乱码久久久久久高潮 | 亚洲在线网址 | 99av国产精品欲麻豆 | 国产福利一区二区三区在线观看 | 在线免费中文字幕 | 亚洲专区免费观看 | 在线视频18在线视频4k | 亚洲精品视频国产 | 亚洲精品免费视频 | 91看片在线观看 | 国产亚洲精品久久久久久网站 | 中文字幕国产精品一区二区 | 国产性xxxx | 欧美一二三四在线 | 天天添夜夜操 | 不卡精品 | 又爽又黄又无遮挡网站动态图 | 亚洲视频电影在线 | 国产精品免费观看久久 | 欧洲成人av| 中文字幕在线国产精品 | 五月婷在线 | 亚洲男男gaygay无套 | 久久久久久久久久久久国产精品 | 五月婷婷久 | 日韩在线小视频 | 欧美色图视频一区 | 中文字幕一区在线观看视频 | 丁香影院在线 | 激情视频亚洲 | 在线免费视频你懂的 | 最近久乱中文字幕 | 91天堂影院 | 69久久久久久久 | 五月花激情 | 91传媒激情理伦片 | 国产不卡av在线播放 | 99r在线 | 麻豆一精品传二传媒短视频 | 色九九影院 | 天天插天天操天天干 | 国内精品久久久久久久久 | 超碰人人做 | 国产高清在线a视频大全 | 亚洲精品国产成人 | 免费看片在线观看 | 国产一区二区三区免费在线观看 | 日日夜夜操av | 亚洲年轻女教师毛茸茸 | 国产激情免费 | 国产一级免费观看 | 97国产精品一区二区 | 最近最新最好看中文视频 | 久久香蕉影视 | 久久综合九色综合97婷婷女人 | 99超碰在线观看 | 国产视频精品网 | 久久免费视频播放 | 激情网五月 | 欧美久久久久久久久久久久久 | 国产一区二区视频在线播放 | 欧美精品久久久久久久久久丰满 | 99久久婷婷国产一区二区三区 | 久草在线一免费新视频 | 亚洲精品国产精品国自产在线 | 亚洲 欧美 国产 va在线影院 | 亚洲精品自拍 | 国产午夜精品一区二区三区 | 色综合人人 | 久草在线精品观看 | 免费的国产精品 | 91精品婷婷国产综合久久蝌蚪 | 国产私拍在线 | 婷婷成人综合 | 日韩三级在线观看 | 日韩精品中文字幕久久臀 | 中文字幕中文字幕在线中文字幕三区 | 999久久精品 | 500部大龄熟乱视频 欧美日本三级 | 特级西西www44高清大胆图片 | 久久在线免费观看视频 | 国产黄a三级三级 | 免费的国产精品 | 亚洲国产精品激情在线观看 | 精品视频免费 | 婷婷久久精品 | 中文在线字幕观看电影 | 日韩大片在线免费观看 | 亚洲国产剧情 | 日韩精品一二三 | 日本大片免费观看在线 | 日本69hd | 久久人人爽爽人人爽人人片av | 国产色影院 | 欧美ⅹxxxxxx | 丁香婷婷亚洲 | 精品视频 | 国产毛片久久久 | 午夜久久影视 | 日韩在线观看中文 | 久久久精品99 | 99re热精品视频 | 免费v片| 亚洲激情综合 | 亚洲国产精品成人va在线观看 | 精品国产激情 | 天堂网中文在线 | 久久精品一区二 | 在线播放国产一区二区三区 | 手机成人免费视频 | 天天躁天天躁天天躁婷 | 91视频高清完整版 | 中文字幕传媒 | 精品国产大片 | 96超碰在线 | 国产91电影在线观看 | 99久久婷婷国产综合精品 | 日韩深夜在线观看 | 美女网站免费福利视频 | 久久99精品国产一区二区三区 | 在线观看免费视频你懂的 | 永久免费观看视频 | 国产一区二区三区久久久 | 亚洲电影毛片 | 热久久国产精品 | 国产一区二区久久久久 | 四虎影视8848dvd | 日韩mv欧美mv国产精品 | 日韩中字在线观看 | 免费av一级电影 | 视频国产 | 国产婷婷久久 | 人人爽网站 | 亚洲在线网址 | 久久久久久久久久久久亚洲 | 91桃色在线播放 | 手机在线中文字幕 | 国产精品一区二区久久精品爱涩 | 黄污在线观看 | 色永久免费视频 | 日日干夜夜爱 | 免费看一及片 | 狠狠干天天射 | 国产亚洲视频系列 | 九九在线高清精品视频 | 天天操天天谢 | 日本三级全黄少妇三2023 | 久久久片 | 青草视频网 | 久久免费视频一区 | 久草香蕉在线 | 久草资源免费 | 在线观看免费91 | 天天干人人| 91桃色视频 | 奇米影视777影音先锋 | 精品二区久久 | 国产精品手机在线观看 | 国产91在| 国产精品第十页 | 天天干人人| 国产福利专区 | 国产精品久久久久久久久软件 | 国产精品久久二区 | 国产91影院 | 国产在线欧美 | 亚洲成人av片在线观看 | 久久久精品久久 | 婷婷免费在线视频 | 美女视频免费精品 | 国产黄色一级片在线 | 亚洲国产美女久久久久 | 91自拍视频在线观看 | 最近中文国产在线视频 | 精品免费观看视频 | 人人干网 | 久久九九精品 | 日韩欧美在线免费 | 欧美动漫一区二区三区 | 免费国产在线观看 | 热re99久久精品国产99热 | 国产品久精国精产拍 | 欧美成人亚洲 | 国产婷婷vvvv激情久 | 亚洲a色| 色片网站在线观看 | 国产精品99爱 | 96久久精品 | 久久艹免费| 欧美另类高清 videos | 少妇性色午夜淫片aaaze | 色婷婷综合视频在线观看 | 国产精品一区二区62 | 国产亚洲一区二区三区 | 丁香花中文在线免费观看 | av中文字幕av | 啪啪免费观看网站 | 日韩视 | 欧美一级久久久 | 天天色天天干天天 | 九九久久成人 | 婷婷av网站 | 免费观看全黄做爰大片国产 | 国产精品剧情在线亚洲 | 国模精品一区二区三区 | 久久精品伊人 | 成年人视频在线免费播放 | 日韩精品在线免费播放 | 免费网站看av片 | 17婷婷久久www | 在线观看av黄色 | 国产精品成人国产乱一区 | 中文字幕日本特黄aa毛片 | 天天射天| 视频在线99 | 免费在线观看成年人视频 | 中文字幕在线观看视频网站 | 免费在线播放视频 | 久久99精品久久久久久秒播蜜臀 | 久久污视频 | a视频在线 | 久久久久久久久久久影院 | 成 人 黄 色 视频免费播放 | 狠狠躁18三区二区一区ai明星 | 成人av高清在线 | 欧美精品一区二区在线观看 | 久久精品久久久久电影 | 狠狠伊人 | 激情五月五月婷婷 | 探花视频免费观看 | 最新av在线网址 | 欧美激情在线看 | 亚洲欧美日韩国产一区二区三区 | 亚色视频在线观看 | 国产69久久久欧美一级 | 久久亚洲免费视频 | 亚洲欧美在线视频免费 | 国产精品久久久久久久免费 | 亚洲国产精品推荐 | 美女视频一区二区 | 欧洲激情在线 | 精品久久网 | 日韩电影一区二区在线观看 | 在线观看免费av网站 | 在线精品一区二区 | 亚洲精品福利在线观看 | 999久久久久久久久久久 | av一区二区在线观看中文字幕 | 国产美女久久 | 免费国产亚洲视频 | 日韩 精品 一区 国产 麻豆 | 中文字幕免费一区二区 | 亚洲午夜在线视频 | 又黄又刺激 | 一区二区三区四区影院 | 97精品国产一二三产区 | 日韩不卡高清 | 亚洲黄色av网址 | 日韩丝袜| av在线网站大全 | 99看视频在线观看 | 国产精品99久久久久久武松影视 | 人人爽人人爽人人片av | 日本精品久久久一区二区三区 | 久久综合狠狠综合久久激情 | 久久久久国产视频 | 欧美一级片在线免费观看 | 国产精品一区二区在线 | www.888av| 亚洲精品视频第一页 | 精品中文字幕视频 | 911香蕉视频 | 成人在线黄色 | 91传媒在线播放 | 中文字幕乱码亚洲精品一区 | 深爱激情综合 | 久久夜靖品 | 午夜久久电影网 | 国产成人免费观看 | 精品久久久久久久久久久久久久久久 | 日韩欧美一区二区在线播放 | 日韩av男人的天堂 | 国产精久久久 | 久久人人爽人人爽人人片av免费 | 黄色大全在线观看 | 欧美一级视频在线观看 | 日本久久精品 | 亚洲成av人片在线观看香蕉 | 久久96国产精品久久99漫画 | 成人一区二区三区中文字幕 | 国产香蕉视频在线观看 | 久久精品99 | 亚洲日本韩国一区二区 | 欧美日韩精品在线观看 | av电影久久 | 日韩欧美一级二级 | www.久久成人| 久草影视在线 | 久久久久久久久久久高潮一区二区 | 国产在线精品一区二区 | 国产伦精品一区二区三区无广告 | 亚洲国产精品第一区二区 | 91av视频播放 | 最新国产精品久久精品 | h视频日本| 久久久久成人精品免费播放动漫 | 久久视频这里有精品 | 色wwww| 久久婷婷一区二区三区 | 91久草视频 | 国产综合精品久久 | 亚洲aⅴ在线 | 婷婷激情欧美 | 欧美夫妻生活视频 | 亚洲一区视频在线播放 | 亚洲精品午夜aaa久久久 | 欧美最猛性xxxxx免费 | 天天做天天射 | 成人精品国产 | 国产精品一区二区三区免费看 | 综合色中色| 99久久婷婷国产精品综合 | 免费看片在线观看 | 91免费观看视频网站 | 国产在线观看免费 | 亚洲一区二区三区在线看 | 日韩精品aaa | 久久人人精| 国产一级黄色电影 | 精品国产美女在线 | 狠狠狠色丁香婷婷综合激情 | 欧美午夜理伦三级在线观看 | 亚洲综合色播 | 91麻豆产精品久久久久久 | 久久国产免费看 | 激情网站免费观看 | 国产亚洲在线观看 | 2017狠狠干 | 日韩手机视频 | 成人国产电影在线观看 | 久久精品99久久 | 国产精品国产三级国产不产一地 | 正在播放亚洲精品 | 一区精品在线 | 国产成本人视频在线观看 | 91成人免费看片 | 成人av在线网 | 久久久国产精品亚洲一区 | 99爱这里只有精品 | 日韩精品一区二区三区视频播放 | 国产一区免费在线 | 久久国产高清 | 欧美日韩二区三区 | 97精品国产 | 久久精品视频2 | 色综合天天天天做夜夜夜夜做 | 99久久精品免费一区 | 亚洲免费色 | 国内少妇自拍视频一区 | 国产在线国偷精品产拍 | 国产精品人人做人人爽人人添 | 一二三四精品 | 久久综合偷偷噜噜噜色 | 又黄又爽又色无遮挡免费 | 国产女人免费看a级丨片 | 99色资源| 激情图片区 | 国产在线观看网站 | 亚洲一级电影 | 狠狠色狠狠色综合系列 | 日韩特黄一级欧美毛片特黄 | 久草国产视频 | 国内精品小视频 | 成人九九视频 | 草久久久久久 | 夜夜骑日日操 | 中文字幕在线一区二区三区 | 日韩在线在线 | 综合久久久久 | 成人免费视频在线观看 | 中文字幕综合在线 | 国产精品久久久久久久久免费看 | 久久图| 国产免费区 | 国产韩国日本高清视频 | 亚洲一片黄 | 999热线在线观看 | 99视屏 | www激情久久 | 国内精品视频一区二区三区八戒 | 欧美一级片在线免费观看 | 天天色.com| 999久久国产精品免费观看网站 | 国产视频1区2区3区 久久夜视频 | 亚洲精品国产高清 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 97视频在线免费观看 | 国内精品视频久久 | 日韩精品免费在线观看 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 国产韩国精品一区二区三区 | 韩国视频一区二区三区 | 成人av在线直播 | 中文字幕在线观看视频一区二区三区 | 国产97碰免费视频 | 亚洲国产剧情av | 99久久精品无免国产免费 | 日韩成人在线免费观看 | 色天天中文 | 国产美女视频一区 | 国产成人香蕉 | 日韩一级电影在线 | 久久精品美女视频 | 91精品久久久久久 | 91chinese在线| 日韩精品久久久久久久电影竹菊 | 久精品一区 | av高清一区二区三区 | 亚洲第一久久久 | 久久爱导航| 综合色在线观看 | 综合国产在线观看 | 午夜视频不卡 | 天天干,天天草 | 91精品国产自产91精品 | 天天色天天干天天色 | 国产成人亚洲精品自产在线 | 久久激情视频 久久 | 中国一级片视频 | 国产精品一区二区av日韩在线 | 亚洲欧美日韩一二三区 | 玖玖视频免费在线 | 色小说在线 | 一区二区三区四区五区在线 | 亚洲美女视频在线 | 久久99精品久久久久婷婷 | 国产在线精品一区二区三区 | 国产一区二区精品在线 | 中文字幕网址 | 国产精品二区在线观看 | 欧美精品中文字幕亚洲专区 | 久久综合色综合88 | 国产美女黄网站免费 | 日韩精品一区二区三区免费观看视频 | 天天做天天爱夜夜爽 | 久久大香线蕉app | 亚洲精品乱码久久久久久高潮 | 欧美激情视频免费看 | 成人av高清 | 天天干夜夜擦 | 日韩小视频| 婷婷色在线观看 | 免费看搞黄视频网站 | 亚洲精品国产精品国 | www.av小说 | 日韩在线观看你懂得 | 国产精品毛片一区视频播不卡 | 色五月色开心色婷婷色丁香 | 福利区在线观看 | 国产一区二区综合 | 亚洲永久免费av | 国产91免费观看 | 久久久久免费精品视频 | 91视频电影 | 国产在线999| 在线观看视频福利 | 欧美xxxx性xxxxx高清 | 黄污网 | 国产成人精品一区二区三区 | 婷婷国产一区二区三区 | 午夜精品久久 | 亚洲午夜精品在线观看 | 欧美精选一区二区三区 | 一二区av| 四虎影视成人永久免费观看亚洲欧美 | 91超在线| 国产精品久久久久久爽爽爽 | 国产精品99久久久久 | 激情电影影院 | 97网| 久久夜色精品国产欧美乱 | 色综合久久中文字幕综合网 | 成人精品视频 |