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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python cnn_Python · CNN(一)· 层结构

發布時間:2023/12/19 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python cnn_Python · CNN(一)· 层结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(這里是最終成品的 GitHub 地址)

(這里是本章用到的 GitHub 地址)

========== 寫在前面的話 ==========

其實在 4 個月之前我寫過一篇叫“Python · 神經網絡(八)· ConvLayer”的文章,不過現在看回去覺得寫的有點太概括性了;如果直接往下寫的話,估計觀眾老爺們(以及我自己)的邏輯都理不順 _(:з」∠)_

所以我打算重寫一次,而且這次會對之前 NN 系列的文章做一個匯總性說明;換句話說,我會從頭開始講如何實現 CNN 而不是接著 NN 的邏輯來講(這也是為什么我沒有接著用“神經網絡”這個系列名而是開了個新的“CNN”系列) _(:з」∠)_

這意味著本文(及接下來的 CNN 系列)會巨長無比,畢竟我會試圖把兩三百行的東西一次性講清楚 _(:з」∠)_

如果覺得這些都無所謂并愿意看的話,我會覺得很開心的 _(:з」∠)_

一些數學基礎:數學 · 神經網絡(二)· BP(反向傳播)數學 · CNN · 從 NN 到 CNN

========== 分割線的說 ==========

往簡單里說、CNN 只是多了卷積層、池化層和 FC 的 NN 而已,雖然卷積、池化對應的前向傳導算法和反向傳播算法的高效實現都很不平凡,但得益于 Tensorflow 的強大、我們可以在僅僅知道它們思想的前提下進行相應的實現,因為 Tensorflow 能夠幫我們處理所有數學與技術上的細節(Tensorflow 的應用式入門教程可以參見這里)

實現普通層

我們在Python · 神經網絡(一)· 層和Python · 神經網絡(二)· 層里面非?,嵥榈卣f明了如何實現 Layer 結構,這里我們就詳盡地把整個實現捋一捋。鑒于 Tensorflow 能夠自動獲取梯度、同時考慮到要擴展出 CNN 的功能,我們需要實現如下功能:對于激活函數,只用定義其原始形式、不必定義其導函數形式

解決特殊層結構(Dropout、Normalize 等等)的實現問題

要考慮當前層為 FC(全連接層)時的表現

讓用戶可以選擇是否給 Layer 加偏置量

其中的第四點可能有些讓人不明所以:要知道偏置量可是對破壞對稱性是很重要的,為什么要讓用戶選擇是否使用偏置量呢?這主要是因為特殊層結構中 Normalize 的特殊性會使偏置量顯得冗余。具體細節會在后文討論特殊層結構處進行說明,這里就暫時按下不表

以下是 Layer 結構基類的具體代碼:

import numpy as np

import tensorflow as tf

from math import ceil

class Layer:

"""初始化結構self.shape:記錄該Layer和上個Layer所含神經元的個數,具體而言:self.shape[0] = 上個Layer所含神經元的個數self.shape[1] = 該Layer所含神經元的個數self.is_fc、self.is_sub_layer:記錄該Layer是否為FC、特殊層結構的屬性self.apply_bias:記錄是否對該Layer加偏置量的屬性"""

def __init__(self, shape, **kwargs):

self.shape = shape

self.is_fc = self.is_sub_layer = False

self.apply_bias = kwargs.get("apply_bias", True)

def __str__(self):

return self.__class__.__name__

def __repr__(self):

return str(self)

@property

def name(self):

return str(self)

@property

def root(self):

return self

# 定義兼容特殊層結構和CNN的、前向傳導算法的封裝

def activate(self, x, w, bias=None, predict=False):

# 如果當前層是FC、就需要先將輸入“鋪平”

if self.is_fc:

x = tf.reshape(x, [-1, int(np.prod(x.get_shape()[1:]))])

# 如果是特殊的層結構、就調用相應的方法獲得結果

if self.is_sub_layer:

return self._activate(x, predict)

# 如果不加偏置量的話、就只進行矩陣相乘和激活函數的作用

if not self.apply_bias:

return self._activate(tf.matmul(x, w), predict)

# 否則就進行“最正常的”前向傳導算法

return self._activate(tf.matmul(x, w) + bias, predict)

# 前向傳導算法的核心、留待子類定義

def _activate(self, x, predict):

pass

注意到我們前向傳導算法中有一項“predict”參數,這主要是因為特殊層結構的訓練過程和預測過程表現通常都會不一樣、所以要加一個標注。該標注的具體意義會在后文進行特殊層結構 SubLayer 的相關說明時體現出來、這里暫時按下不表

在實現好基類后、就可以實現具體要用在神經網絡中的 Layer 了。以 Sigmoid 激活函數對應的 Layer 為例:

class Sigmoid(Layer):

def _activate(self, x, predict):

return tf.nn.sigmoid(x)

得益于 Tensorflow 框架的強大(你除了這句話就沒別的話說了嗎……)、我們甚至連激活函數的形式都無需手寫,因為它已經幫我們封裝好了(事實上、絕大多數常用的激活函數在 Tensorflow 里面都有封裝)

實現特殊層

我們在Python · 神經網絡(三*)· 網絡這里曾經簡要介紹過特殊層 SubLayer 的思想,這里我們將介紹如何利用 Tensorflow 框架實現它,同時也會對十分常用的兩種 SubLayer —— Dropout 和 Normalize 做深入一些的介紹

先來看看應該如何定義 SubLayer 的基類:

# 讓SubLayer繼承Layer以合理復用代碼

class SubLayer(Layer):

"""初始化結構self.shape:和Layer相應屬性意義一致self.parent:記錄該Layer的父層的屬性self.description:用于可視化的屬性,記錄著對該SubLayer的“描述”"""

def __init__(self, parent, shape):

Layer.__init__(self, shape)

self.parent = parent

self.description = ""

# 輔助獲取Root Layer的property

@property

def root(self):

_root = self.parent

while _root.parent:

_root = _root.parent

return _root

可以看到,得益于 Tensorflow 框架(Tensorflow 就是很厲害嘛……),本來難以處理的SubLayer 的實現變得非常簡潔清晰。在實現好基類后、就可以實現具體要用在神經網絡中的 SubLayer 了,先來看 Dropout:

class Dropout(SubLayer):

# self._prob:訓練過程中每個神經元被“留下”的概率

def __init__(self, parent, shape, drop_prob=0.5):

# 神經元被Drop的概率必須大于等于0和小于1

if drop_prob < 0 or drop_prob >= 1:

raise ValueError(

"(Dropout) Probability of Dropout should be a positive float smaller than 1")

SubLayer.__init__(self, parent, shape)

# 被“留下”的概率自然是1-被Drop的概率

self._prob = tf.constant(1 - drop_prob, dtype=tf.float32)

self.description = "(Drop prob: {})".format(drop_prob)

def _activate(self, x, predict):

# 如果是在訓練過程,那么就按照設定的、被“留下”的概率進行Dropout

if not predict:

return tf.nn.dropout(x, self._prob)

# 如果是在預測過程,那么直接返回輸入值即可

return x

Dropout 的詳細說明自然是看原 paper最好,這里我就大概翻譯、總結一下主要內容。Dropout 的核心思想在于提高模型的泛化能力:它會在每次迭代中依概率去掉對應 Layer 的某些神經元,從而每次迭代中訓練的都是一個小的神經網絡。這個過程可以通過下圖進行說明:

上圖所示的即為當 drop_prob 為 50%(我們所設的默認值)時、Dropout 的一種可能的表現。左圖所示為原網絡、右圖所示的為 Dropout 后的網絡,可以看到神經元 a、b、e、g、j 都被 Drop 了

Dropout 過程的合理性需要概率論上一些理論的支撐,不過鑒于 Tensorflow 框架有封裝好的相應函數、我們就不深入介紹其具體的數學原理而僅僅說明其直觀(以 drop_prob 為 50%為例,其余 drop_prob 的情況是同理的):在訓練過程中,由于 Dropout 后留下來的神經元可以理解為“在 50%死亡概率下幸存”的神經元,所以給將它們對應的輸出進行“增幅”是合理的。具體而言,假設一個神經元

的輸出本來是

,那么如果 Dropout 后它被留下來了的話、其輸出就應該變成

(換句話說、應該讓帶 Dropout 的期望輸出和原輸出一致:對于任一個神經元

,設 drop_prob 為p 而其原輸出為

,那么當帶 Dropout 的輸出為

時、

的期望輸出即為

)

由于在訓練時我們保證了神經網絡的期望輸出不變、所以在預測過程中我們還是應該讓整個網絡一起進行預測而不進行 Dropout(關于這一點,原論文似乎也表示這是一種“經試驗證明行之有效”的辦法而沒有給出具體的、原理層面的說明)

Normalize 說起來有點長,所以我開了一個單獨的章節來說(數學 · 神經網絡(四)· Normalize)。下面就直接看看如何實現它:

class Normalize(SubLayer):

"""初始化結構self._eps:記錄增強數值穩定性所用的小值的屬性self._activation:記錄自身的激活函數的屬性,主要是為了兼容圖7.17 A的情況self.tf_rm、self.tf_rv:記錄μ_run、σ_run^2的屬性self.tf_gamma、self.tf_beta:記錄γ、β的屬性self._momentum:記錄動量值m的屬性"""

def __init__(self, parent, shape, activation="Identical", eps=1e-8, momentum=0.9):

SubLayer.__init__(self, parent, shape)

self._eps, self._activation = eps, activation

self.tf_rm = self.tf_rv = None

self.tf_gamma = tf.Variable(tf.ones(self.shape[1]), name="norm_scale")

self.tf_beta = tf.Variable(tf.zeros(self.shape[1]), name="norm_beta")

self._momentum = momentum

self.description = "(eps: {}, momentum: {})".format(eps, momentum)

def _activate(self, x, predict):

# 若μ_run、σ_run^2還未初始化,則根據輸入x進行相應的初始化

if self.tf_rm is None or self.tf_rv is None:

shape = x.get_shape()[-1]

self.tf_rm = tf.Variable(tf.zeros(shape), trainable=False, name="norm_mean")

self.tf_rv = tf.Variable(tf.ones(shape), trainable=False, name="norm_var")

if not predict:

# 利用Tensorflow相應函數計算當前Batch的舉止、方差

_sm, _sv = tf.nn.moments(x, list(range(len(x.get_shape()) - 1)))

_rm = tf.assign(

self.tf_rm, self._momentum * self.tf_rm + (1 - self._momentum) * _sm)

_rv = tf.assign(

self.tf_rv, self._momentum * self.tf_rv + (1 - self._momentum) * _sv)

# 利用Tensorflow相應函數直接得到Batch Normalization的結果

with tf.control_dependencies([_rm, _rv]):

_norm = tf.nn.batch_normalization(

x, _sm, _sv, self.tf_beta, self.tf_gamma, self._eps)

else:

_norm = tf.nn.batch_normalization(

x, self.tf_rm, self.tf_rv, self.tf_beta, self.tf_gamma, self._eps)

# 如果指定了激活函數、就再用相應激活函數作用在BN結果上以得到最終結果

# 這里只定義了ReLU和Sigmoid兩種,如有需要可以很方便地進行拓展

if self._activation == "ReLU":

return tf.nn.relu(_norm)

if self._activation == "Sigmoid":

return tf.nn.sigmoid(_norm)

return _norm

實現損失層

# 定義一個簡單的基類

class CostLayer(Layer):

# 定義一個方法以獲取損失值

def calculate(self, y, y_pred):

return self._activate(y_pred, y)

# 定義Cross Entropy對應的CostLayer(整合了Softmax變換)

class CrossEntropy(CostLayer):

def _activate(self, x, y):

return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=x, labels=y))

# 定義MSE準則對應的CostLayer

class MSE(CostLayer):

def _activate(self, x, y):

return tf.reduce_mean(tf.square(x - y))

我自己用 Numpy 寫的話,相同功能要寫那么個 113 行,然后用 Tensorflow 的話 15 行就行了……由此可窺見 Tensorflow 框架的強大

(話說我這么賣力地安利 Tensorflow,Google 是不是應該給我些廣告費什么的)(喂

實現卷積層

回憶我們說過的卷積層和普通層的性質、不難發現它們的表現極其相似,區別大體上來說只在于如下三點(以下我們用

、

表示第 i 層的輸入、輸出、激活函數):普通層自身對數據的處理只有“激活”(

)這一個步驟,層與層之間的數據傳遞則是通過權值矩陣、偏置量(

、

)和線性變換(

)來完成的;卷積層自身對數據的處理則多了“卷積”這個步驟(通常來說是先卷積再激活:

)、同時層與層之間的數據傳遞是直接傳遞的(

)

卷積層自身多了 Kernel 這個屬性并因此帶來了諸如 Stride、Padding 等屬性,不過與此同時、卷積層之間沒有權值矩陣

卷積層和普通層的 shape 屬性記錄的東西不同,具體而言:普通層的 shape 記錄著上個 Layer 和該 Layer 所含神經元的個數

卷積層的 shape 記錄著上個卷積層的輸出和該卷積層的 Kernel 的信息(注意卷積層的上一層必定還是卷積層)

接下來就看看具體實現:

class ConvLayer(Layer):

"""初始化結構self.shape:記錄著上個卷積層的輸出和該Layer的Kernel的信息,具體而言:self.shape[0] = 上個卷積層的輸出的形狀(頻道數×高×寬)常簡記為self.shape[0] =(c,h_old,w_old)self.shape[1] = 該卷積層Kernel的信息(Kernel數×高×寬)常簡記為self.shape[1] =(f,h_new,w_new)self.stride、self.padding:記錄Stride、Padding的屬性self.parent:記錄父層的屬性"""

def __init__(self, shape, stride=1, padding="SAME", parent=None):

if parent is not None:

_parent = parent.root if parent.is_sub_layer else parent

shape = _parent.shape

Layer.__init__(self, shape)

self.stride = stride

# 利用Tensorflow里面對Padding功能的封裝、定義self.padding屬性

if isinstance(padding, str):

# "VALID"意味著輸出的高、寬會受Kernel的高、寬影響,具體公式后面會說

if padding.upper() == "VALID":

self.padding = 0

self.pad_flag = "VALID"

# "SAME"意味著輸出的高、寬與Kernel的高、寬無關、只受Stride的影響

else:

self.padding = self.pad_flag = "SAME"

# 如果輸入了一個整數、那么就按照VALID情形設置Padding相關的屬性

else:

self.padding = int(padding)

self.pad_flag = "VALID"

self.parent = parent

if len(shape) == 1:

self.n_channels = self.n_filters = self.out_h = self.out_w = None

else:

self.feed_shape(shape)

# 定義一個處理shape屬性的方法

def feed_shape(self, shape):

self.shape = shape

self.n_channels, height, width = shape[0]

self.n_filters, filter_height, filter_width = shape[1]

# 根據Padding的相關信息、計算輸出的高、寬

if self.pad_flag == "VALID":

self.out_h = ceil((height - filter_height + 1) / self.stride)

self.out_w = ceil((width - filter_width + 1) / self.stride)

else:

self.out_h = ceil(height / self.stride)

self.out_w = ceil(width / self.stride)

上述代碼的最后幾行對應著下述兩個公式、這兩個公式在 Tensorflow 里面有著直接對應的實現:當 Padding 設置為 VALID 時,輸出的高、寬分別為:

其中,符號“

”代表著“向上取整”,stride 代表著步長

當 Padding 設置為 SAME 時,輸出的高、寬分別為:

同時不難看出、上述代碼其實沒有把 CNN 的前向傳導算法囊括進去,這是因為考慮到卷積層會利用到普通層的激活函數、所以期望能夠合理復用代碼。所以期望能夠把上述代碼定義的 ConvLayer 和前文重寫的 Layer 整合在一起以成為具體用在 CNN 中的卷積層,為此我們需要利用到 Python 中一項比較高級的技術——元類(元類的介紹可以參見這里):

class ConvLayerMeta(type):

def __new__(mcs, *args, **kwargs):

name, bases, attr = args[:3]

# 規定繼承的順序為ConvLayer→Layer

conv_layer, layer = bases

def __init__(self, shape, stride=1, padding="SAME"):

conv_layer.__init__(self, shape, stride, padding)

# 利用Tensorflow的相應函數定義計算卷積的方法

def _conv(self, x, w):

return tf.nn.conv2d(x, w, strides=[self.stride] * 4, padding=self.pad_flag)

# 依次進行卷積、激活的步驟

def _activate(self, x, w, bias, predict):

res = self._conv(x, w) + bias

return layer._activate(self, res, predict)

# 在正式進行前向傳導算法之前、先要利用Tensorflow相應函數進行Padding

def activate(self, x, w, bias=None, predict=False):

if self.pad_flag == "VALID" and self.padding > 0:

_pad = [self.padding] * 2

x = tf.pad(x, [[0, 0], _pad, _pad, [0, 0]], "CONSTANT")

return _activate(self, x, w, bias, predict)

# 將打包好的類返回

for key, value in locals().items():

if str(value).find("function") >= 0:

attr[key] = value

return type(name, bases, attr)

在定義好基類和元類后、定義實際應用在 CNN 中的卷積層就非常簡潔了。以在深度學習中應用最廣泛的 ReLU 卷積層為例:

class ConvReLU(ConvLayer, ReLU, metaclass=ConvLayerMeta):

pass

實現池化層

池化層比起卷積層而言要更簡單一點:對于最常見的兩種池化——極大池化和平均池化而言,它們所做的只是取輸入的極大值和均值而已、本身并沒有可以更新的參數。是故對池化層而言,我們無需維護其 Kernel、而只用定義相應的池化方法(極大、平均)即可,因此我們要求用戶在調用池化層時、只提供“高”和“寬”而不提供“Kernel 個數”

注意:Kernel 個數從數值上來說與輸出頻道個數一致,所以對于池化層的實現而言、我們應該直接用輸入頻道數來賦值 Kernel 數,因為池化不會改變數據的頻道數

class ConvPoolLayer(ConvLayer):

def feed_shape(self, shape):

shape = (shape[0], (shape[0][0], *shape[1]))

ConvLayer.feed_shape(self, shape)

def activate(self, x, w, bias=None, predict=False):

pool_height, pool_width = self.shape[1][1:]

# 處理Padding

if self.pad_flag == "VALID" and self.padding > 0:

_pad = [self.padding] * 2

x = tf.pad(x, [[0, 0], _pad, _pad, [0, 0]], "CONSTANT")

# 利用self._activate方法進行池化

return self._activate(None)(

x, ksize=[1, pool_height, pool_width, 1],

strides=[1, self.stride, self.stride, 1], padding=self.pad_flag)

def _activate(self, x, *args):

pass

同樣的,由于 Tensorflow 已經幫助我們做好了封裝、我們可以直接調用相應的函數來完成極大池化和平均池化的實現:

# 實現極大池化

class MaxPool(ConvPoolLayer):

def _activate(self, x, *args):

return tf.nn.max_pool

# 實現平均池化

class AvgPool(ConvPoolLayer):

def _activate(self, x, *args):

return tf.nn.avg_pool

實現 CNN 中的特殊層結構

在 CNN 中同樣有著 Dropout 和 Normalize 這兩種特殊層結構。它們的表現和 NN 中相應特殊層結構的表現是完全一致的,區別只在于作用的對象不同

我們知道,CNN 每一層數據的維度要比 NN 中每一層數據的維度多一維:一個典型的 NN 中每一層的數據通常是

的,而 CNN 則通常是

的、其中 r是當前數據的頻道數。為了讓適用于 NN 的特殊層結構適配于 CNN,一個自然而合理的做法就是將r 個頻道的數據當做一個整體來處理、或說將 CNN 中r 個頻道的數據放在一起并視為 NN 中的一個神經元,這樣做的話就能通過簡易的封裝來直接利用上我們對 NN 定義的特殊層結構。封裝的過程則仍要用到元類:

# 定義作為封裝的元類

class ConvSubLayerMeta(type):

def __new__(mcs, *args, **kwargs):

name, bases, attr = args[:3]

conv_layer, sub_layer = bases

def __init__(self, parent, shape, *_args, **_kwargs):

conv_layer.__init__(self, None, parent=parent)

# 與池化層類似、特殊層輸出數據的形狀應保持與輸入數據的形狀一致

self.out_h, self.out_w = parent.out_h, parent.out_w

sub_layer.__init__(self, parent, shape, *_args, **_kwargs)

self.shape = ((shape[0][0], self.out_h, self.out_w), shape[0])

# 如果是CNN中的Normalize、則要提前初始化好γ、β

if name == "ConvNorm":

self.tf_gamma = tf.Variable(tf.ones(self.n_filters), name="norm_scale")

self.tf_beta = tf.Variable(tf.zeros(self.n_filters), name="norm_beta")

# 利用NN中的特殊層結構的相應方法獲得結果

def _activate(self, x, predict):

return sub_layer._activate(self, x, predict)

def activate(self, x, w, bias=None, predict=False):

return _activate(self, x, predict)

# 將打包好的類返回

for key, value in locals().items():

if str(value).find("function") >= 0 or str(value).find("property"):

attr[key] = value

return type(name, bases, attr)

# 定義CNN中的Dropout,注意繼承順序

class ConvDrop(ConvLayer, Dropout, metaclass=ConvSubLayerMeta):

pass

# 定義CNN中的Normalize,注意繼承順序

class ConvNorm(ConvLayer, Normalize, metaclass=ConvSubLayerMeta):

pass

以上就是所有層結構的相關實現了……看到這里的觀眾老爺們真的要給你們筆芯!至少我是看不下去的(喂

實例

感謝評論區@崔斯特的建議,我打算弄些栗子……不過雖然我非常努力地憋了三個栗子,但總感覺不太對勁……總之歡迎各種吐槽和各種意見 ( σ'ω')σ

第一個栗子是普通層的栗子,假設我們的輸入矩陣為:

亦即有 4 個樣本、每個樣本的維度是 5 維。然后我們的權值矩陣為:

偏置量則簡單地取為

。現在我們要計算

的話,核心代碼只有兩行:

# Identical 為“無激活函數”的意思

# 需要提供輸入維度( 5 )和輸出維度( 2 )

nn_id = Identical([5, 2])

# 調用相應函數進行計算

# 其中 eval 是為了把數值從 Tensorflow 的 Graph 中提取出來

print(nn_id.activate(nn_x, nn_w, nn_b).eval())

完整代碼如下:

with tf.Session().as_default() as sess:

nn_x = np.array([

[ 0, 1, 2, 1, 0],

[-1, -2, 0, 2, 1],

[ 0, 1, -2, -1, 2],

[ 1, 2, -1, 0, -2]

], dtype=np.float32)

nn_w = np.array([

[-2, -1, 0, 1, 2],

[ 2, 1, 0, -1, -2]

], dtype=np.float32).T

nn_b = 1.

nn_id = Identical([nn_x.shape[1], 2])

print(nn_id.activate(nn_x, nn_w, nn_b).eval())

上面這段代碼將會輸出:

要計算 Sigmoid 的話,只需要把 Identical 換成 Sigmoid 即可

第二、三個栗子是卷積的過程,我們統一假設輸入只有一個樣本、頻道也只有一個

第二個栗子是無 Padding 無 Stride 的情形,假設唯一的頻道(Channel)所對應的矩陣如下:

假設我們的卷積核(Kernel)有兩個 Channel:

再假設我們的偏置量為

?,F在我們要計算相應的卷積時,核心代碼仍只有兩行:

# 接收的參數中,第一個是輸入的 shape,第二個是 Kernel 的 shape,具體而言:

# 輸入的 shape 為 height x width x channel = 4 x 4 x 1

# Kernel 的 shape 為 channel x height x width = 2 x 3 x 3

conv_id = ConvIdentical([([4, 4, 1], [2, 3, 3])], padding="VALID")

可能有觀眾老爺看到這就想吐槽:為什么輸入的 channel 放在最后,而 Kernel 的 channel 放在前面?其中的原因主要有兩點:Tensorflow 默認 channel 在最后

我在用 Numpy 實現框架時把 channel 放在了前面

然后……然后就是為了兼容、就變成這樣了(捂臉

不得不說把 channel 放在最后是非常合乎自然語言邏輯的:比如在描述圖片時,我們會自然地說它是

的圖片,其中最后那個 3 就是 channel

那么為什么我用 Numpy 實現時把 channel 放在了前面呢?因為這樣的數組輸出時會更好看(捂臉)

就拿我們這第二個栗子來說吧,如果把 channel 放在最后:

conv_x = np.array([

[

[ 0, 2, 1, 2],

[-1, 0, 0, 1],

[ 1, 1, 0, 1],

[-2, 1, -1, 0]

]

], dtype=np.float32).reshape(1, 4, 4, 1)

# 第一個 1 代表樣本數,最后那個 1 代表 channel 數

這樣的矩陣打印出來是這樣子的:

換句話說,同一個 channel 的東西會被放在同一列(很丑對不對!!);而如果我們把 channel 放前面:

conv_x = np.array([

[

[ 0, 2, 1, 2],

[-1, 0, 0, 1],

[ 1, 1, 0, 1],

[-2, 1, -1, 0]

]

], dtype=np.float32).reshape(1, 1, 4, 4)

# 第一個 1 代表樣本數,第二個 1 代表 channel 數

這樣的矩陣打印出來是這樣子的:

好看多了對不對!!

總之大概就這么個感覺……接下來看看第二個栗子的完整代碼:

with tf.Session().as_default() as sess:

conv_x = np.array([

[

[ 0, 2, 1, 2],

[-1, 0, 0, 1],

[ 1, 1, 0, 1],

[-2, 1, -1, 0]

]

], dtype=np.float32).reshape(1, 4, 4, 1)

# 這里有些兼容 Tensorflow 的 trick,大抵可以不必太在意……

conv_w = np.array([

[[ 1, 0, 1],

[-1, 0, 1],

[ 1, 0, -1]],

[[0, 1, 0],

[1, 0, -1],

[0, -1, 1]]

], dtype=np.float32).transpose([1, 2, 0])[..., None, :]

conv_b = np.array([1, -1], dtype=np.float32)

conv_id = ConvIdentical([(conv_x.shape[1:], [2, 3, 3])], padding="VALID")

print(conv_id.activate(conv_x, conv_w, conv_b).eval())

上面這段代碼將會輸出:

稍微解釋一下,比如說左上角的 4 是這樣求得的:

右上角的 -1 是這樣求得的:

這里需要特別指出的是,Kernel 的第一個 channel 卷積出來的結果在第一列、第二個卷積出來的則在第二列

如果想計算帶 ReLU 的卷積的話,把上述 ConvIdentical 改成 ConvReLU 即可

第三個栗子是 Padding、Stride 均為 1 的情形,假設唯一的 Channel 所對應的矩陣如下:

加了 1 的 Padding 之后、輸入將變為:

假設 Kernel、偏置量都不變,那么在上述代碼的基礎上、只需如下的代碼即可完成第三個栗子所要求的卷積:

conv_x = np.array([

[

[ 1, 2, 1],

[-1, 0, -2],

[ 1, -1, 2]

]

], dtype=np.float32).reshape(1, 3, 3, 1)

conv_id = ConvIdentical([([3, 3, 1], [2, 3, 3])], padding=1, stride=2)

print(conv_id.activate(conv_x, conv_w, conv_b).eval())

上面這段代碼將會輸出:

下一章會說明如何定義一個網絡結構來封裝我們這章講的這些層結構,然后我們就能實際地跑跑 CNN 了 ( σ'ω')σ

希望觀眾老爺們能夠喜歡~

總結

以上是生活随笔為你收集整理的python cnn_Python · CNN(一)· 层结构的全部內容,希望文章能夠幫你解決所遇到的問題。

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

亚洲va欧美va人人爽 | 少妇av网| 久久精品一区二区三区国产主播 | av免费片 | 国产美女主播精品一区二区三区 | 美女黄频在线观看 | 美女福利视频在线 | 日本护士撒尿xxxx18 | 亚洲视频精品在线 | 97在线免费视频观看 | 一个色综合网站 | 麻豆你懂的 | 天天操天天操 | 免费视频a | 999男人的天堂 | 日韩欧美高清不卡 | av电影在线免费观看 | 国产精品18久久久久久久久久久久 | 婷婷av网站| 久久av观看 | 亚洲激情在线观看 | 久久久久二区 | 日日爽日日操 | 天天插伊人 | 麻豆一级视频 | 五月天综合在线 | 欧美精品一区二区免费 | 日韩乱色精品一区二区 | 一级片观看 | 久久精品免费观看 | 国产夫妻av在线 | 亚洲精品在线免费观看视频 | 99视屏| 五月激情综合婷婷 | 99热亚洲精品 | 国产精品免费视频网站 | 在线播放精品一区二区三区 | 最新久久免费视频 | 黄色国产高清 | 人人揉人人揉人人揉人人揉97 | 亚洲国产日韩欧美在线 | www.com久久久 | 99久久超碰中文字幕伊人 | 国产午夜激情视频 | 亚洲 欧美 综合 在线 精品 | 四虎成人免费观看 | 国产精品二区三区 | 探花视频在线版播放免费观看 | 欧美激情视频一区 | 黄色毛片视频免费观看中文 | 免费亚洲一区二区 | 欧美日韩国产一区 | 国产黄网在线 | 欧美孕妇视频 | 在线观看黄色免费视频 | 九热精品 | 亚洲成人av片 | 激情欧美一区二区免费视频 | 日韩影视大全 | 国产成人免费观看久久久 | av综合站| 97在线看 | 国产丝袜在线 | 最新国产福利 | 色丁香色婷婷 | .精品久久久麻豆国产精品 亚洲va欧美 | 亚洲综合成人婷婷小说 | 日韩黄色免费 | 麻豆一二三精选视频 | av中文字幕在线观看网站 | 国产亚洲精品电影 | 999电影免费在线观看 | 天天翘av | 97精品国产一二三产区 | 欧美精品乱码久久久久久 | 国产成人一区二区三区在线观看 | 一区二区三区四区影院 | 久久视频一区 | 一区二区三区三区在线 | 99国内精品久久久久久久 | 欧美激情精品久久久久久变态 | 日韩久久精品一区二区三区 | 亚洲乱码在线 | 99免费在线观看视频 | 午夜精品av | 亚洲天堂精品视频在线观看 | 色噜噜噜噜 | 四虎在线视频 | 国产一区二区不卡在线 | 美女免费视频观看网站 | 99久久精品无码一区二区毛片 | 久草免费在线观看视频 | 992tv在线| 天天操天天操天天爽 | 亚洲国产影院 | 黄网站色视频免费观看 | 天天草天天干 | 日韩精品1区2区 | 夜夜摸夜夜爽 | 精品伦理一区二区三区 | 深爱激情亚洲 | 精品国产一区二区三区蜜臀 | 婷婷色 亚洲 | 亚洲片在线| 日本黄色免费在线 | 中文字幕久久精品一区 | 国产精品 999 | 久草免费在线视频 | 国产高清中文字幕 | 国产精品a级 | 嫩草91影院 | www.av中文字幕.com | 亚洲九九九在线观看 | 91完整视频| 一区精品在线 | 久久精品国产99 | 国产精品青草综合久久久久99 | 中文字幕91视频 | 四虎影视8848aamm | 最新国产精品视频 | 日韩欧美网址 | 亚洲黄色片在线 | 久久99国产精品免费网站 | 国产精品毛片一区视频播不卡 | 国内外激情视频 | 91x色 | 色综合小说 | 国产又黄又猛又粗 | 日韩欧美xxxx | 视频一区视频二区在线观看 | 欧美日产一区 | 人人涩 | 香蕉视频18 | 国产午夜精品一区二区三区欧美 | 亚洲电影网站 | 九九热在线精品 | 国产精品在线看 | 99这里只有精品视频 | 久黄色| 久久久精品一区二区 | 亚洲最大成人网4388xx | 91免费试看 | 国产精品成人免费一区久久羞羞 | 欧美先锋影音 | 免费的国产精品 | 欧美在线观看视频 | 欧美日韩免费网站 | 国产91综合一区在线观看 | 久久免费国产精品1 | 成人av免费| 中文视频在线 | 黄色的网站免费看 | 国产精品美 | 久久久久久免费视频 | 亚洲.www | 99久高清在线观看视频99精品热在线观看视频 | 美女搞黄国产视频网站 | 涩涩网站免费 | 2022久久国产露脸精品国产 | 2022国产精品视频 | 免费在线国产精品 | 亚洲无线视频 | 激情婷婷六月 | av电影免费观看 | 99在线精品视频 | 特级毛片爽www免费版 | 国产99视频在线观看 | 美女国内精品自产拍在线播放 | 国产免费久久久久 | 国产视频不卡一区 | 五月开心激情 | 97免费在线观看视频 | 久久 地址| 色妞色视频一区二区三区四区 | 91视频91蝌蚪| 婷婷色在线观看 | 91精品国产成人 | 国产精品去看片 | 天天爽综合网 | av电影中文字幕 | 日日日天天天 | 免费网址你懂的 | 欧美成人基地 | 久久99国产一区二区三区 | 日韩不卡高清视频 | a v在线观看 | 国产 日韩 中文字幕 | 国产一区福利在线 | 一级黄色电影网站 | av噜噜噜在线播放 | 精品成人网 | 成人资源站 | 成年人免费电影在线观看 | 97天天干| 麻花豆传媒mv在线观看网站 | 国产老妇av | 天天射色综合 | 日韩理论片 | 一级黄色片在线观看 | 精品一二三四视频 | 美州a亚洲一视本频v色道 | 日韩欧美高清 | 伊人天天狠天天添日日拍 | 亚洲天堂精品视频 | 日日操天天爽 | 免费高清无人区完整版 | 日日爱网址 | 亚州视频在线 | 国产精品免费视频一区二区 | 国产精品免费麻豆入口 | 欧美精品免费在线观看 | 日韩在线免费电影 | 黄色一级影院 | 日韩欧美视频在线免费观看 | 三级视频国产 | 国产精品扒开做爽爽的视频 | 中文字幕高清视频 | 美女网站视频久久 | 欧美激情精品 | 久久免费视频在线观看6 | 婷婷激情av| 三级视频片 | 在线成人一区 | 色婷婷丁香 | 成人av高清 | 人人澡澡人人 | 涩涩网站在线 | 日批网站免费观看 | 免费观看国产视频 | 在线视频婷婷 | av资源在线观看 | 97视频亚洲 | 日本久久久久久久久久 | 国产一级二级三级在线观看 | 日韩久久精品一区二区 | 欧美性超爽 | 黄色片软件网站 | 国产视频999| 日韩激情在线视频 | 91麻豆视频| 狠狠色2019综合网 | 免费国产在线精品 | 在线观看视频97 | 少妇bbb搡bbbb搡bbbb′ | 国产一二区精品 | 欧美色图视频一区 | 99久久精品免费看国产免费软件 | 天天干天天射天天爽 | 国产vs久久 | 日韩精品免费在线观看视频 | 国产黄色在线 | 亚洲天堂精品视频 | 欧美精品做受xxx性少妇 | 99久高清在线观看视频99精品热在线观看视频 | 一级一片免费看 | 久久视精品| 美女网站在线观看 | 久久久久久蜜桃一区二区 | 91爱爱视频| 久久婷婷开心 | 久久国产精品99精国产 | 99久久久久久国产精品 | 中文字幕专区高清在线观看 | 有没有在线观看av | 日韩电影黄色 | 亚洲国产中文在线观看 | 国产视频在| 天天插日日插 | 亚洲精品视频在线免费播放 | www黄在线 | 成人视屏免费看 | 国产超碰在线观看 | 国产亚洲久一区二区 | 99久久99久久精品国产片果冰 | 欧美日韩精品在线观看 | 国产精品久久久一区二区 | 国产一卡在线 | 天天操天操| 国产又粗又猛又爽又黄的视频免费 | 日韩精品视频网站 | 永久免费毛片在线观看 | 免费观看的av网站 | 最新中文字幕 | 超碰在线最新网址 | 婷婷精品视频 | 日韩免费观看av | 超碰在线9 | 成x99人av在线www | 91视频这里只有精品 | 久久天天躁狠狠躁夜夜不卡公司 | 久久官网| 欧美资源在线观看 | 久久伦理| 国产成人三级一区二区在线观看一 | 最新国产视频 | 伊人久久av | 国产福利一区二区三区视频 | 日韩高清网站 | 激情网五月天 | 久久激情视频免费观看 | 国产免费资源 | 欧美日韩中 | 欧美亚洲另类在线视频 | 久久艹综合 | 黄色av观看 | 国产在线精品视频 | 精品久久久久久亚洲 | 日日夜夜天天 | 精品久久福利 | 91精品国产自产在线观看 | 97色在线| 久久综合中文字幕 | a级国产毛片| 夜色资源网 | 亚洲电影一区二区 | av免费在线看网站 | 欧美亚洲精品一区 | 欧美日韩视频在线一区 | 91精品中文字幕 | 狠狠操电影网 | 天天射天天射 | 超碰在线个人 | 国产精品久久久久久久久搜平片 | 久久精品久久久久久久 | 国产99久久精品一区二区永久免费 | 亚洲精品永久免费视频 | 91精品麻豆 | 国产午夜激情视频 | 最新av在线播放 | 网站在线观看日韩 | 91在线视频免费观看 | 成人国产网站 | 日韩在线视频精品 | 日韩va在线观看 | 国产精品女同一区二区三区久久夜 | 成人啪啪18免费游戏链接 | 中文字幕在线观看第三页 | 久久久久久久久久久精 | 日av免费| 日韩二区精品 | 欧美99热| 色香网 | 日韩在线观看免费 | 久久99精品久久久久久清纯直播 | 999国产在线 | 中文字幕一二三区 | 久久这里只有精品视频首页 | 日本中文字幕在线免费观看 | 丁香花中文字幕 | 五月婷婷久久丁香 | 在线精品在线 | 久久国产二区 | 国产精品一区二区免费在线观看 | 深爱婷婷激情 | av福利网址导航 | 韩日色视频| 91麻豆精品国产91久久久使用方法 | 亚洲国产无 | 在线网站黄 | 色综合久久五月 | 亚洲黄色免费在线 | 精品国产乱码久久久久久浪潮 | 国产精品对白一区二区三区 | 国产亚洲精品bv在线观看 | 免费男女羞羞的视频网站中文字幕 | 久久免费视频8 | 夜夜操天天干, | 我要看黄色一级片 | 国产精品美女久久久久久久网站 | 久久国产精品99精国产 | 久久新视频 | 国产精品一区二区久久久 | 欧美日韩在线网站 | 欧美精品久久久久久久亚洲调教 | 国产精品欧美日韩在线观看 | 久久社区视频 | 久久99精品国产91久久来源 | 天天鲁一鲁摸一摸爽一爽 | 国产精品12345 | 九九有精品 | 国产高清视频在线观看 | 国产精品嫩草影院9 | 欧美小视频在线观看 | 日韩欧美精品一区二区三区经典 | 中文字幕在线资源 | 精品久久国产一区 | 日韩午夜精品 | 久久国产精品免费 | 黄色av三级在线 | 欧美日韩高清在线 | 韩日三级在线 | 久久久久国产精品免费免费搜索 | 狠狠的操狠狠的干 | 国产黄色av网站 | 国产一区二区久久久久 | 欧美精品三级 | 91免费版在线观看 | 香蕉视频在线免费 | www.香蕉视频在线观看 | 久久国产一区二区 | 婷婷日日 | 亚洲涩涩一区 | 日韩在线播放视频 | 欧美精品乱码久久久久久 | 视频福利在线观看 | 国产三级av在线 | 日日夜夜人人天天 | 国产精品久久久久久久久久ktv | 国产综合在线观看视频 | 一区二区三区在线免费 | 欧美综合干 | 日韩亚洲国产中文字幕 | 三级动图 | 久久99精品国产99久久6尤 | 人人爽人人片 | 永久免费视频国产 | 日韩精品一区二区三区免费观看 | 伊人网综合在线观看 | 亚洲影院一区 | 国产午夜视频在线观看 | 久久精品国产免费看久久精品 | 在线精品亚洲一区二区 | www.色午夜,com | 久久久黄视频 | 一区二区三区免费在线播放 | a黄色影院 | 日本精品一区二区在线观看 | 久久久久在线观看 | 天堂在线一区二区 | 青草草在线视频 | 成年人国产在线观看 | 欧美性生爱 | 黄色在线免费观看网址 | 久久久免费观看完整版 | 91精品国| 免费看三级 | 日韩高清免费电影 | 久久超碰在线 | 777奇米四色 | 久草网在线视频 | 精品一区 在线 | 精品1区2区3区 | 1区2区视频 | 久久不卡免费视频 | 亚洲欧美乱综合图片区小说区 | 99国产一区 | 99在线视频观看 | japanesexxxhd奶水| 成人网页在线免费观看 | av在线网站免费观看 | 九九99视频 | 天天干夜夜操视频 | 午夜999| 日本一区二区三区免费观看 | 婷婷丁香色 | 久草在线视频资源 | 中文免费观看 | 日韩18p| 六月丁香六月婷婷 | 色九九在线 | 这里有精品在线视频 | 91亚洲影院 | 久久综合狠狠综合久久综合88 | 91人人澡 | 久久精品99精品国产香蕉 | 久久久久久久久久影院 | 天天操网站 | 国产一级电影 | 天天草天天插 | 欧美在线视频一区二区三区 | 国产 日韩 欧美 中文 在线播放 | 麻豆系列在线观看 | 在线观看亚洲电影 | 亚洲香蕉视频 | 人人干人人做 | 99久久久国产精品美女 | 国产成人99av超碰超爽 | 99亚洲精品 | 国产精品www | 国产视频 亚洲精品 | 日韩视频在线不卡 | 91九色视频导航 | 日本在线视频一区二区三区 | 亚洲黄色小说网址 | 久久视频精品 | 久久精品这里都是精品 | 丰满少妇一级片 | 久久久久中文 | 国产在线久草 | 国产精品观看在线亚洲人成网 | 日韩免费电影一区二区三区 | avhd高清在线谜片 | 中文字幕免费高清在线 | 亚洲乱码久久 | 四虎在线视频免费观看 | 国产啊v在线观看 | 久久草草热国产精品直播 | 九九九热精品 | 中文字幕视频一区二区 | 日韩av中文在线 | 激情网婷婷| 香蕉在线影院 | 色是在线视频 | 亚洲一区二区三区四区在线视频 | 成人av片免费看 | 国产精品2019 | 色综合天天视频在线观看 | 91在线91拍拍在线91 | 国产精品嫩草在线 | 国产无套精品久久久久久 | 日韩免费视频播放 | 亚洲永久国产精品 | 在线免费观看涩涩 | 黄色成人av网址 | av三级在线免费观看 | 欧美精品做受xxx性少妇 | 99麻豆久久久国产精品免费 | 国产精品99在线播放 | 日韩色一区二区三区 | 91精品在线观看入口 | 91亚色在线观看 | 91av亚洲 | 欧美精品一区二区蜜臀亚洲 | 中文字幕亚洲不卡 | 亚洲永久av | 成人精品影视 | 亚洲精品777| 麻豆传媒视频在线免费观看 | 天天干天天干天天色 | 久久久久日本精品一区二区三区 | 亚洲理论片在线观看 | av不卡免费看 | 国产精品福利在线观看 | 亚洲综合导航 | 中文字幕一区在线观看视频 | 五月色婷 | 美女视频黄免费的 | 婷婷激情五月 | 91系列在线 | 中文字幕色在线视频 | 国产精品99久久久久人中文网介绍 | 国产精品精品久久久久久 | 欧美一级特黄aaaaaa大片在线观看 | 国产精品久久久久久久久久白浆 | 国产精品 日韩 | 国产精品永久免费观看 | 在线视频 一区二区 | 亚洲精品资源在线观看 | 在线亚洲成人 | 手机成人免费视频 | 麻花豆传媒一二三产区 | 特级毛片在线观看 | 夜夜躁狠狠躁日日躁视频黑人 | 色九九视频 | 日韩欧美高清一区二区三区 | 草 免费视频 | 免费日韩av片 | 成人三级网址 | 日韩中文在线观看 | 久热色超碰 | 亚洲永久在线 | 91中文字幕网 | 国产精品综合av一区二区国产馆 | 国产爽妇网 | 久草网视频在线观看 | a v在线观看 | 天天干com | 人人添人人澡人人澡人人人爽 | 亚洲欧美国产精品va在线观看 | 91理论片午午伦夜理片久久 | 欧美一级电影免费观看 | 在线只有精品 | 成人全视频免费观看在线看 | 天天干天天草 | 在线观看你懂的网址 | 日韩精品在线看 | 精产嫩模国品一二三区 | 亚洲国产精品久久久 | 免费日韩 精品中文字幕视频在线 | 国产精在线 | 国产亚洲免费观看 | h文在线观看免费 | av中文字幕网 | 99国产视频在线 | 九九综合久久 | 国产1区在线观看 | 国产精品国产毛片 | 国产精品久久一区二区三区, | 日韩黄色免费电影 | 午夜精品一区二区三区在线播放 | 中文字幕在线免费播放 | 成年人视频在线免费播放 | 91亚洲精品视频 | 久久午夜影视 | 99久久日韩精品视频免费在线观看 | 丁香婷婷色综合亚洲电影 | 国产高清成人 | 在线播放日韩av | 久久久精品久久日韩一区综合 | 成年人免费观看在线视频 | 99久久久国产精品美女 | av网站在线观看播放 | 日本 在线 视频 中文 有码 | 亚洲观看黄色网 | 成人中文字幕+乱码+中文字幕 | 天天综合中文 | 久久久亚洲精品 | 久久伊人精品一区二区三区 | 天天综合操| 日韩在线观看三区 | 江苏妇搡bbbb搡bbbb | 夜色在线资源 | 欧美另类人妖 | 精品国产日本 | 日本中文字幕电影在线免费观看 | 五月婷婷影院 | 国产精品久久久久久a | 国产拍揄自揄精品视频麻豆 | 丝袜美腿在线播放 | 欧美日在线观看 | 亚洲天天综合 | 日韩欧美在线影院 | 亚洲国产视频直播 | 视频一区在线免费观看 | 99久久精| 丁香电影小说免费视频观看 | 最新av中文字幕 | 久久精视频 | 奇米影视在线99精品 | 日韩高清在线不卡 | 五月综合婷 | 黄在线免费看 | 久久婷婷丁香 | 奇米导航 | 欧美日韩高清在线一区 | 狠狠干成人综合网 | 91麻豆精品| 久久99久久99精品中文字幕 | 成人精品一区二区三区电影免费 | 日韩高清在线观看 | 国产手机在线视频 | 久久久久成人免费 | 婷婷香蕉| 久久8精品 | 成人在线你懂得 | 精品999久久久 | 欧美一二三四在线 | 久久久久女教师免费一区 | 制服丝袜在线91 | 国产精品系列在线播放 | 久香蕉 | 中文字幕成人一区 | 天天天天爽 | 亚洲黄色在线免费观看 | 最新日韩电影 | 国产一区欧美一区 | 正在播放国产一区 | 九九视频免费观看视频精品 | 高清中文字幕av | 久久久精品福利视频 | 正在播放国产一区 | 在线观看不卡的av | 欧美色久| 国产三级视频 | 国产高清无线码2021 | 国产黄色精品视频 | 日韩电影中文字幕在线观看 | 毛片区| 在线日本看片免费人成视久网 | 亚洲国产精品成人va在线观看 | 激情小说网站亚洲综合网 | 综合网天天色 | 国产麻豆成人传媒免费观看 | 天天色影院 | 亚洲视频在线看 | 97在线精品 | 中文字幕亚洲五码 | 国产白浆在线观看 | 国产精品美女久久久久久久网站 | 蜜臀久久99精品久久久无需会员 | 9999国产| 久人人 | 日韩视频免费在线 | www.久久成人 | 欧美日韩aa | 欧美日韩免费在线视频 | 久久免费视频5 | 国产精品一区二区久久精品爱微奶 | 五月婷婷激情五月 | 成片免费观看视频大全 | 天堂av在线网址 | 亚洲经典视频在线观看 | 在线视频在线观看 | 91看片淫黄大片一级在线观看 | 欧美精品生活片 | 一区二区三区免费在线观看视频 | 久久黄色免费观看 | 91尤物在线播放 | 九九影视理伦片 | 1024手机看片国产 | 99久久久免费视频 | 日韩综合第一页 | 在线观看日本高清mv视频 | 久久久久免费精品国产小说色大师 | 精品日韩在线 | 91亚洲精品久久久蜜桃借种 | 丁香综合五月 | 免费a视频| 日韩av一区二区在线影视 | 日日婷婷夜日日天干 | 久久精品久久精品久久 | 国产精品女人久久久 | 欧美精品一区二区在线播放 | 最近日本韩国中文字幕 | 国产一区在线视频观看 | 91在线影视 | 国产美女视频免费 | 91亚色免费视频 | 久久国产精品99久久久久久丝袜 | 日韩视频在线不卡 | 久久精品一区二区国产 | 久久免费视频4 | 国产无限资源在线观看 | 国产精品片 | 国产在线日本 | 精品国产aⅴ麻豆 | 久草精品资源 | 精品国产一区二区三区日日嗨 | 日韩av伦理片| 日本精品va在线观看 | 黄色com | 四虎免费av| 久久婷亚洲五月一区天天躁 | 久久九九久久 | 人人干免费 | 久久999精品 | 天天干天天干天天色 | 久久短视频 | 国语自产偷拍精品视频偷 | 在线不卡中文字幕播放 | 日韩理论在线观看 | 99久久精品免费看 | 成人h动漫在线看 | 欧美激情视频三区 | 五月婷婷,六月丁香 | 久久亚洲综合国产精品99麻豆的功能介绍 | 中日韩三级视频 | 在线观看精品视频 | 亚在线播放中文视频 | h文在线观看免费 | 免费一级片在线 | 久久图| av午夜电影 | 91精品1区2区 | 97人人射| 91久久丝袜国产露脸动漫 | 国产中文字幕在线免费观看 | 国产成人av在线 | 一级黄色a视频 | 免费午夜视频在线观看 | 中文字幕在线免费看线人 | 国产精品三级视频 | 在线播放一区二区三区 | 午夜性盈盈 | 免费看精品久久片 | 久久精品国产一区二区三 | 色婷在线 | 久草视频中文在线 | 亚洲综合在线五月 | 在线观看免费一级片 | 免费v片 | 色婷婷综合视频在线观看 | 五月婷婷视频在线观看 | 日韩在线精品 | 日韩字幕在线观看 | 黄色a三级| 国产成人久久精品一区二区三区 | 免费在线色 | www.色午夜,com | 在线观看免费观看在线91 | 韩国精品在线观看 | 久草视频在线免费看 | 91色国产在线 | 日本护士三级少妇三级999 | 91免费视频黄 | 亚洲综合情 | 四虎国产精品免费观看视频优播 | 成人国产精品免费观看 | 欧美疯狂性受xxxxx另类 | av天天草| 1000部国产精品成人观看 | 中文字幕精品视频 | 免费黄a| 99在线免费视频 | 国产精品aⅴ | 欧美污污网站 | 欧洲亚洲激情 | 色偷偷网站视频 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲美女免费精品视频在线观看 | 成人小视频在线 | 精品国产一区二区三区久久久 | 久久夜夜夜 | 亚洲黄色在线观看 | 欧美巨大荫蒂茸毛毛人妖 | 激情小说网站亚洲综合网 | 日日添夜夜添 | 久久久久久国产精品久久 | 日女人电影 | 国产区av在线 | 91精品国产乱码久久桃 | 天天干干 | 天天干视频在线 | 亚洲电影久久久 | 欧美日韩免费一区二区三区 | 国产品久精国精产拍 | 欧美经典久久 | 韩国av一区二区 | 狠狠色狠狠色综合系列 | av片子在线观看 | 久久艹中文字幕 | 欧美一区二区日韩一区二区 | 国产精品一区二区av | 日韩专区在线 | 97影视| 又黄又爽又湿又无遮挡的在线视频 | 日韩欧三级 | 国产精品一区二区av日韩在线 | 久久精品成人热国产成 | 三日本三级少妇三级99 | 欧美国产大片 | 精品久久影院 | 成人中文字幕在线观看 | 国产精品系列在线 | 天躁狠狠躁 | 日本一区二区高清不卡 | 在线看片成人 | 91精品久| 91国内产香蕉 | 中文字幕 欧美性 | 国产亚洲片 | 国产精品激情偷乱一区二区∴ | 国产精品嫩草在线 | 日日干干夜夜 | 中日韩欧美精彩视频 | 91在线九色 | 成人性生爱a∨ | 国产在线观看你懂得 | 中文字幕美女免费在线 | 久久人操| av丝袜天堂 | 欧美日韩一区二区三区免费视频 | 午夜精品视频一区 | 日韩中文字幕免费在线观看 | 久久久鲁 | 亚洲国产精品成人精品 | 色小说在线 | 午夜精品久久久久 | 日韩激情第一页 | 免费av高清| 黄色在线观看网站 | 干av在线 | 狠狠激情中文字幕 | 黄网站色视频免费观看 | 亚洲影视九九影院在线观看 | 在线观看免费av片 | 在线亚洲欧美视频 | 玖玖精品在线 | 日韩av影片在线观看 | 国产免费久久久久 | 激情综合网天天干 | 一区二区三区在线视频111 | 婷婷在线精品视频 | 高清在线一区 | 国产在线欧美 | 久久激情视频 久久 | 99热这里是精品 | 最近中文字幕在线中文高清版 | 亚洲电影图片小说 | 最新av免费在线观看 | 偷拍福利视频一区二区三区 | 91免费观看 | 一级黄色av | 国产在线a视频 | 亚洲黄色av| 午夜久久久久久久 | 人人干网 | 国产精品手机播放 | 69国产在线观看 | 日韩手机在线观看 | 亚洲欧美日韩精品一区二区 | 欧美日韩综合在线观看 | 免费在线观看国产精品 | 亚洲资源在线网 | 99久久日韩精品免费热麻豆美女 | 欧美亚洲另类在线视频 | 成人av影视观看 | 精品亚洲男同gayvideo网站 | 区一区二区三在线观看 | 中文字幕在线播出 | 国产小视频在线免费观看 | 国产日韩av在线 | 日韩a在线 | 欧美一区二区在线免费观看 | 国际精品久久久久 | 中文字幕精品一区二区精品 | 在线观看免费版高清版 | 香蕉国产91| 在线观看成人网 | 亚洲精品乱码久久久久 | www在线免费观看 | 精品国产一区二区三区av性色 | 一区二区三区电影 | 久精品在线 | 久久夜夜操 | 一区二区三区国 | 国产一级大片免费看 | 1000部国产精品成人观看 | 五月婷婷综合在线 | 香蕉久久久久久av成人 | 最近高清中文在线字幕在线观看 | 麻豆一区二区三区视频 | 中国美女一级看片 | 成人av在线一区二区 | 中文字幕不卡在线88 | 激情五月婷婷综合 | 99亚洲国产 | 欧美午夜视频在线 | 免费看成人a | 亚洲v精品| 丁香花在线视频观看免费 | 四虎影视成人精品国库在线观看 | 久久夜色精品国产欧美一区麻豆 | 欧美黑吊大战白妞欧美 | 午夜三级毛片 | 黄色特级一级片 | 99成人在线视频 | 在线免费av电影 | 高清一区二区三区 | 日韩黄色免费电影 | 丰满少妇在线 | 国产区在线看 | 成人网中文字幕 | 久久夜色电影 | 天天干夜夜擦 | 天天综合网天天综合色 | 欧美日韩国产一区二区三区 | 98久9在线 | 免费 | 深夜福利视频在线观看 | 综合五月 | 天天干,天天草 | 久久露脸国产精品 | 国产精品无 | 在线色视频小说 | 天天插天天操天天干 | 91久久偷偷做嫩草影院 | 国产精品av在线免费观看 | 91av电影| 毛片网站观看 | 日韩成人精品一区二区三区 | 激情五月五月婷婷 | 九色91视频| 日韩一区二区三区在线看 | 亚洲 av网站 | 夜夜躁狠狠燥 | 免费网站在线观看成人 | 久久免费在线 | 久久99国产一区二区三区 | 久久久国产精品久久久 | 婷婷视频导航 | 日韩在线精品视频 | 国产日产在线观看 | 91香蕉视频色版 | 在线观看视频在线观看 | 国产淫a| 最新中文字幕在线观看视频 | 91大神精品视频在线观看 | 在线电影91 | 久草亚洲视频 | 久久免费a | 日韩欧美精品在线 | 成年人免费在线播放 | 天天躁天天躁天天躁婷 | av在线影片| 在线久热 | 三上悠亚一区二区在线观看 | 久久亚洲在线 | 久久99国产精品久久 | 久久色亚洲 | 国模一区二区三区四区 | 国产在线观看不卡 | 国产高清专区 | 啪啪激情网 | 免费观看性生交大片3 | www久久精品 | 国偷自产中文字幕亚洲手机在线 | 亚洲最大在线视频 | 久久久久|