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

歡迎訪問 生活随笔!

生活随笔

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

python

python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...

發布時間:2024/1/23 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇文章我們給出了用paddlepaddle來做手寫數字識別的示例,并對網絡結構進行到了調整,提高了識別的精度。有的同學表示不是很理解原理,為什么傳統的機器學習算法,簡單的神經網絡(如多層感知機)都可以識別手寫數字,我們要采用卷積神經網絡CNN來進行別呢?CNN到底是怎么識別的?用CNN有哪些優勢呢?我們下面就來簡單分析一下。在講CNN之前,為避免完全零基礎的人看不懂后面的講解,我們先簡單回顧一下傳統的神經網絡的基本知識。

神經網絡的預備知識

為什么要用神經網絡?

特征提取的高效性。

大家可能會疑惑,對于同一個分類任務,我們可以用機器學習的算法來做,為什么要用神經網絡呢?大家回顧一下,一個分類任務,我們在用機器學習算法來做時,首先要明確feature和label,然后把這個數據"灌"到算法里去訓練,最后保存模型,再來預測分類的準確性。但是這就有個問題,即我們需要實現確定好特征,每一個特征即為一個維度,特征數目過少,我們可能無法精確的分類出來,即我們所說的欠擬合,如果特征數目過多,可能會導致我們在分類過程中過于注重某個特征導致分類錯誤,即過擬合。

舉個簡單的例子,現在有一堆數據集,讓我們分類出西瓜和冬瓜,如果只有兩個特征:形狀和顏色,可能沒法分區來;如果特征的維度有:形狀、顏色、瓜瓤顏色、瓜皮的花紋等等,可能很容易分類出來;如果我們的特征是:形狀、顏色、瓜瓤顏色、瓜皮花紋、瓜蒂、瓜籽的數量,瓜籽的顏色、瓜籽的大小、瓜籽的分布情況、瓜籽的XXX等等,很有可能會過擬合,譬如有的冬瓜的瓜籽數量和西瓜的類似,模型訓練后這類特征的權重較高,就很容易分錯。這就導致我們在特征工程上需要花很多時間和精力,才能使模型訓練得到一個好的效果。然而神經網絡的出現使我們不需要做大量的特征工程,譬如提前設計好特征的內容或者說特征的數量等等,我們可以直接把數據灌進去,讓它自己訓練,自我“修正”,即可得到一個較好的效果。

數據格式的簡易性

在一個傳統的機器學習分類問題中,我們“灌”進去的數據是不能直接灌進去的,需要對數據進行一些處理,譬如量綱的歸一化,格式的轉化等等,不過在神經網絡里我們不需要額外的對數據做過多的處理,具體原因可以看后面的詳細推導。

參數數目的少量性

在面對一個分類問題時,如果用SVM來做,我們需要調整的參數需要調整核函數,懲罰因子,松弛變量等等,不同的參數組合對于模型的效果也不一樣,想要迅速而又準確的調到最適合模型的參數需要對背后理論知識的深入了解(當然,如果你說全部都試一遍也是可以的,但是花的時間可能會更多),對于一個基本的三層神經網絡來說(輸入-隱含-輸出),我們只需要初始化時給每一個神經元上隨機的賦予一個權重w和偏置項b,在訓練過程中,這兩個參數會不斷的修正,調整到最優質,使模型的誤差最小。所以從這個角度來看,我們對于調參的背后理論知識并不需要過于精通(只不過做多了之后可能會有一些經驗,在初始值時賦予的值更科學,收斂的更快罷了)

有哪些應用?

應用非常廣,不過大家注意一點,我們現在所說的神經網絡,并不能稱之為深度學習,神經網絡很早就出現了,只不過現在因為不斷的加深了網絡層,復雜化了網絡結構,才成為深度學習,并在圖像識別、圖像檢測、語音識別等等方面取得了不錯的效果。

基本網絡結構

一個神經網絡最簡單的結構包括輸入層、隱含層和輸出層,每一層網絡有多個神經元,上一層的神經元通過激活函數映射到下一層神經元,每個神經元之間有相對應的權值,輸出即為我們的分類類別。

詳細數學推導

去年中旬我參考吳恩達的UFLDL和mattmazur的博客寫了篇文章詳細講解了一個最簡單的神經網絡從前向傳播到反向傳播的直觀推導,大家可以先看看這篇文章--一文弄懂神經網絡中的反向傳播法--BackPropagation。

優缺點

前面說了很多優點,這里就不多說了,簡單說說缺點吧。我們試想一下如果加深我們的網絡層,每一個網絡層增加神經元的數量,那么參數的個數將是M*N(m為網絡層數,N為每層神經元個數),所需的參數會非常多,參數一多,模型就復雜了,越是復雜的模型就越不好調參,也越容易過擬合。此外我們從神經網絡的反向傳播的過程來看,梯度在反向傳播時,不斷的迭代會導致梯度越來越小,即梯度消失的情況,梯度一旦趨于0,那么權值就無法更新,這個神經元相當于是不起作用了,也就很難導致收斂。尤其是在圖像領域,用最基本的神經網絡,是不太合適的。后面我們會詳細講講為啥不合適。

為什么要用卷積神經網絡?

傳統神經網絡的劣勢

前面說到在圖像領域,用傳統的神經網絡并不合適。我們知道,圖像是由一個個像素點構成,每個像素點有三個通道,分別代表RGB顏色,那么,如果一個圖像的尺寸是(28,28,1),即代表這個圖像的是一個長寬均為28,channel為1的圖像(channel也叫depth,此處1代表灰色圖像)。如果使用全連接的網絡結構,即,網絡中的神經與與相鄰層上的每個神經元均連接,那就意味著我們的網絡有28 * 28 =784個神經元,hidden層采用了15個神經元,那么簡單計算一下,我們需要的參數個數(w和b)就有:784*15*10+15+10=117625個,這個參數太多了,隨便進行一次反向傳播計算量都是巨大的,從計算資源和調參的角度都不建議用傳統的神經網絡。(評論中有同學對這個參數計算不太理解,我簡單說一下:圖片是由像素點組成的,用矩陣表示的,28*28的矩陣,肯定是沒法直接放到神經元里的,我們得把它“拍平”,變成一個28*28=784 的一列向量,這一列向量和隱含層的15個神經元連接,就有784*15=11760個權重w,隱含層和最后的輸出層的10個神經元連接,就有11760*10=117600個權重w,再加上隱含層的偏置項15個和輸出層的偏置項10個,就是:117625個參數了)

圖1 三層神經網絡識別手寫數字

卷積神經網絡是什么?

三個基本層

卷積層(Convolutional Layer)

上文提到我們用傳統的三層神經網絡需要大量的參數,原因在于每個神經元都和相鄰層的神經元相連接,但是思考一下,這種連接方式是必須的嗎?全連接層的方式對于圖像數據來說似乎顯得不這么友好,因為圖像本身具有“二維空間特征”,通俗點說就是局部特性。譬如我們看一張貓的圖片,可能看到貓的眼鏡或者嘴巴就知道這是張貓片,而不需要說每個部分都看完了才知道,啊,原來這個是貓啊。所以如果我們可以用某種方式對一張圖片的某個典型特征識別,那么這張圖片的類別也就知道了。這個時候就產生了卷積的概念。舉個例子,現在有一個4*4的圖像,我們設計兩個卷積核,看看運用卷積核后圖片會變成什么樣。

圖2 4*4 image與兩個2*2的卷積核操作結果

由上圖可以看到,原始圖片是一張灰度圖片,每個位置表示的是像素值,0表示白色,1表示黑色,(0,1)區間的數值表示灰色。對于這個4*4的圖像,我們采用兩個2*2的卷積核來計算。設定步長為1,即每次以2*2的固定窗口往右滑動一個單位。以第一個卷積核filter1為例,計算過程如下:

1 feature_map1(1,1) = 1*1 + 0*(-1) + 1*1 + 1*(-1) = 1

2 feature_map1(1,2) = 0*1 + 1*(-1) + 1*1 + 1*(-1) = -1

3 ```4 feature_map1(3,3) = 1*1 + 0*(-1) + 1*1 + 0*(-1) = 2

可以看到這就是最簡單的內積公式。feature_map1(1,1)表示在通過第一個卷積核計算完后得到的feature_map的第一行第一列的值,隨著卷積核的窗口不斷的滑動,我們可以計算出一個3*3的feature_map1;同理可以計算通過第二個卷積核進行卷積運算后的feature_map2,那么這一層卷積操作就完成了。feature_map尺寸計算公式:[ (原圖片尺寸 -卷積核尺寸)/ 步長 ] + 1。這一層我們設定了兩個2*2的卷積核,在paddlepaddle里是這樣定義的:

1 conv_pool_1 =paddle.networks.simple_img_conv_pool(2 input=img,3 filter_size=3,4 num_filters=2,5 num_channel=1,6 pool_stride=1,7 act=paddle.activation.Relu())

這里調用了networks里simple_img_conv_pool函數,激活函數是Relu(修正線性單元),我們來看一看源碼里外層接口是如何定義的:

1 defsimple_img_conv_pool(input,2 filter_size,3 num_filters,4 pool_size,5 name=None,6 pool_type=None,7 act=None,8 groups=1,9 conv_stride=1,10 conv_padding=0,11 bias_attr=None,12 num_channel=None,13 param_attr=None,14 shared_bias=True,15 conv_layer_attr=None,16 pool_stride=1,17 pool_padding=0,18 pool_layer_attr=None):19 """

20 Simple image convolution and pooling group.21 Img input => Conv => Pooling => Output.22 :param name: group name.23 :type name: basestring24 :param input: input layer.25 :type input: LayerOutput26 :param filter_size: see img_conv_layer for details.27 :type filter_size: int28 :param num_filters: see img_conv_layer for details.29 :type num_filters: int30 :param pool_size: see img_pool_layer for details.31 :type pool_size: int32 :param pool_type: see img_pool_layer for details.33 :type pool_type: BasePoolingType34 :param act: see img_conv_layer for details.35 :type act: BaseActivation36 :param groups: see img_conv_layer for details.37 :type groups: int38 :param conv_stride: see img_conv_layer for details.39 :type conv_stride: int40 :param conv_padding: see img_conv_layer for details.41 :type conv_padding: int42 :param bias_attr: see img_conv_layer for details.43 :type bias_attr: ParameterAttribute44 :param num_channel: see img_conv_layer for details.45 :type num_channel: int46 :param param_attr: see img_conv_layer for details.47 :type param_attr: ParameterAttribute48 :param shared_bias: see img_conv_layer for details.49 :type shared_bias: bool50 :param conv_layer_attr: see img_conv_layer for details.51 :type conv_layer_attr: ExtraLayerAttribute52 :param pool_stride: see img_pool_layer for details.53 :type pool_stride: int54 :param pool_padding: see img_pool_layer for details.55 :type pool_padding: int56 :param pool_layer_attr: see img_pool_layer for details.57 :type pool_layer_attr: ExtraLayerAttribute58 :return: layer's output59 :rtype: LayerOutput60 """

61 _conv_ =img_conv_layer(62 name="%s_conv" %name,63 input=input,64 filter_size=filter_size,65 num_filters=num_filters,66 num_channels=num_channel,67 act=act,68 groups=groups,69 stride=conv_stride,70 padding=conv_padding,71 bias_attr=bias_attr,72 param_attr=param_attr,73 shared_biases=shared_bias,74 layer_attr=conv_layer_attr)75 returnimg_pool_layer(76 name="%s_pool" %name,77 input=_conv_,78 pool_size=pool_size,79 pool_type=pool_type,80 stride=pool_stride,81 padding=pool_padding,82 layer_attr=pool_layer_attr)

View Code

1 defsimple_img_conv_pool(input,2 num_filters,3 filter_size,4 pool_size,5 pool_stride,6 act,7 pool_type='max',8 main_program=None,9 startup_program=None):10 conv_out =layers.conv2d(11 input=input,12 num_filters=num_filters,13 filter_size=filter_size,14 act=act,15 main_program=main_program,16 startup_program=startup_program)17

18 pool_out =layers.pool2d(19 input=conv_out,20 pool_size=pool_size,21 pool_type=pool_type,22 pool_stride=pool_stride,23 main_program=main_program,24 startup_program=startup_program)25 return pool_out

可以看到這里面有兩個輸出,conv_out是卷積輸出值,pool_out是池化輸出值,最后只返回池化輸出的值。conv_out和pool_out分別又調用了layers.py的conv2d和pool2d,去layers.py里我們可以看到conv2d和pool2d是如何實現的:

conv2d:

defconv2d(input,

num_filters,

name=None,

filter_size=[1, 1],

act=None,

groups=None,

stride=[1, 1],

padding=None,

bias_attr=None,

param_attr=None,

main_program=None,

startup_program=None):

helper= LayerHelper('conv2d', **locals())

dtype=helper.input_dtype()

num_channels= input.shape[1]if groups isNone:

num_filter_channels=num_channelselse:if num_channels % groups is not0:raise ValueError("num_channels must be divisible by groups.")

num_filter_channels= num_channels /groupsifisinstance(filter_size, int):

filter_size=[filter_size, filter_size]ifisinstance(stride, int):

stride=[stride, stride]ifisinstance(padding, int):

padding=[padding, padding]

input_shape=input.shape

filter_shape= [num_filters, num_filter_channels] +filter_size

std= (2.0 / (filter_size[0]**2 * num_channels))**0.5filter=helper.create_parameter(

attr=helper.param_attr,

shape=filter_shape,

dtype=dtype,

initializer=NormalInitializer(0.0, std, 0))

pre_bias=helper.create_tmp_variable(dtype)

helper.append_op(

type='conv2d',

inputs={'Input': input,'Filter': filter,

},

outputs={"Output": pre_bias},

attrs={'strides': stride,'paddings': padding,'groups': groups})

pre_act= helper.append_bias_op(pre_bias, 1)return helper.append_activation(pre_act)

View Code

pool2d:

1 defpool2d(input,2 pool_size,3 pool_type,4 pool_stride=[1, 1],5 pool_padding=[0, 0],6 global_pooling=False,7 main_program=None,8 startup_program=None):9 if pool_type not in ["max", "avg"]:10 raiseValueError(11 "Unknown pool_type: '%s'. It can only be 'max' or 'avg'.",12 str(pool_type))13 ifisinstance(pool_size, int):14 pool_size =[pool_size, pool_size]15 ifisinstance(pool_stride, int):16 pool_stride =[pool_stride, pool_stride]17 ifisinstance(pool_padding, int):18 pool_padding =[pool_padding, pool_padding]19

20 helper = LayerHelper('pool2d', **locals())21 dtype =helper.input_dtype()22 pool_out =helper.create_tmp_variable(dtype)23

24 helper.append_op(25 type="pool2d",26 inputs={"X": input},27 outputs={"Out": pool_out},28 attrs={29 "poolingType": pool_type,30 "ksize": pool_size,31 "globalPooling": global_pooling,32 "strides": pool_stride,33 "paddings": pool_padding34 })35

36 return pool_out

View Code

大家可以看到,具體的實現方式還調用了layers_helper.py:

1 importcopy2 importitertools3

4 from paddle.v2.framework.framework importVariable, g_main_program, \5 g_startup_program, unique_name, Program6 from paddle.v2.framework.initializer importConstantInitializer, \7 UniformInitializer8

9

10 classLayerHelper(object):11 def __init__(self, layer_type, **kwargs):12 self.kwargs =kwargs13 self.layer_type =layer_type14 name = self.kwargs.get('name', None)15 if name isNone:16 self.kwargs['name'] =unique_name(self.layer_type)17

18 @property19 defname(self):20 return self.kwargs['name']21

22 @property23 defmain_program(self):24 prog = self.kwargs.get('main_program', None)25 if prog isNone:26 returng_main_program27 else:28 returnprog29

30 @property31 defstartup_program(self):32 prog = self.kwargs.get('startup_program', None)33 if prog isNone:34 returng_startup_program35 else:36 returnprog37

38 def append_op(self, *args, **kwargs):39 return self.main_program.current_block().append_op(*args, **kwargs)40

41 def multiple_input(self, input_param_name='input'):42 inputs =self.kwargs.get(input_param_name, [])43 type_error =TypeError(44 "Input of {0} layer should be Variable or sequence of Variable".45 format(self.layer_type))46 ifisinstance(inputs, Variable):47 inputs =[inputs]48 elif not isinstance(inputs, list) and notisinstance(inputs, tuple):49 raisetype_error50 else:51 for each ininputs:52 if notisinstance(each, Variable):53 raisetype_error54 returninputs55

56 def input(self, input_param_name='input'):57 inputs =self.multiple_input(input_param_name)58 if len(inputs) != 1:59 raise "{0} layer only takes one input".format(self.layer_type)60 returninputs[0]61

62 @property63 defparam_attr(self):64 default = {'name': None, 'initializer': UniformInitializer()}65 actual = self.kwargs.get('param_attr', None)66 if actual isNone:67 actual =default68 for default_field indefault.keys():69 if default_field not inactual:70 actual[default_field] =default[default_field]71 returnactual72

73 defbias_attr(self):74 default = {'name': None, 'initializer': ConstantInitializer()}75 bias_attr = self.kwargs.get('bias_attr', None)76 if bias_attr isTrue:77 bias_attr =default78

79 ifisinstance(bias_attr, dict):80 for default_field indefault.keys():81 if default_field not inbias_attr:82 bias_attr[default_field] =default[default_field]83 returnbias_attr84

85 defmultiple_param_attr(self, length):86 param_attr =self.param_attr87 ifisinstance(param_attr, dict):88 param_attr =[param_attr]89

90 if len(param_attr) != 1 and len(param_attr) !=length:91 raise ValueError("parameter number mismatch")92 elif len(param_attr) == 1 and length != 1:93 tmp = [None] *length94 for i inxrange(length):95 tmp[i] =copy.deepcopy(param_attr[0])96 param_attr =tmp97 returnparam_attr98

99 def iter_inputs_and_params(self, input_param_name='input'):100 inputs =self.multiple_input(input_param_name)101 param_attrs =self.multiple_param_attr(len(inputs))102 for ipt, param_attr initertools.izip(inputs, param_attrs):103 yieldipt, param_attr104

105 def input_dtype(self, input_param_name='input'):106 inputs =self.multiple_input(input_param_name)107 dtype =None108 for each ininputs:109 if dtype isNone:110 dtype =each.data_type111 elif dtype !=each.data_type:112 raise ValueError("Data Type mismatch")113 returndtype114

115 def create_parameter(self, attr, shape, dtype, suffix='w',116 initializer=None):117 #Deepcopy the attr so that parameters can be shared in program

118 attr_copy =copy.deepcopy(attr)119 if initializer is notNone:120 attr_copy['initializer'] =initializer121 if attr_copy['name'] isNone:122 attr_copy['name'] = unique_name(".".join([self.name, suffix]))123 self.startup_program.global_block().create_parameter(124 dtype=dtype, shape=shape, **attr_copy)125 returnself.main_program.global_block().create_parameter(126 name=attr_copy['name'], dtype=dtype, shape=shape)127

128 defcreate_tmp_variable(self, dtype):129 returnself.main_program.current_block().create_var(130 name=unique_name(".".join([self.name, 'tmp'])),131 dtype=dtype,132 persistable=False)133

134 def create_variable(self, *args, **kwargs):135 return self.main_program.current_block().create_var(*args, **kwargs)136

137 def create_global_variable(self, persistable=False, *args, **kwargs):138 returnself.main_program.global_block().create_var(139 *args, persistable=persistable, **kwargs)140

141 defset_variable_initializer(self, var, initializer):142 assertisinstance(var, Variable)143 self.startup_program.global_block().create_var(144 name=var.name,145 type=var.type,146 dtype=var.data_type,147 shape=var.shape,148 persistable=True,149 initializer=initializer)150

151 def append_bias_op(self, input_var, num_flatten_dims=None):152 """

153 Append bias operator and return its output. If the user does not set154 bias_attr, append_bias_op will return input_var155

156 :param input_var: the input variable. The len(input_var.shape) is larger157 or equal than 2.158 :param num_flatten_dims: The input tensor will be flatten as a matrix159 when adding bias.160 `matrix.shape = product(input_var.shape[0:num_flatten_dims]), product(161 input_var.shape[num_flatten_dims:])`162 """

163 if num_flatten_dims isNone:164 num_flatten_dims = self.kwargs.get('num_flatten_dims', None)165 if num_flatten_dims isNone:166 num_flatten_dims = 1

167

168 size =list(input_var.shape[num_flatten_dims:])169 bias_attr =self.bias_attr()170 if notbias_attr:171 returninput_var172

173 b =self.create_parameter(174 attr=bias_attr, shape=size, dtype=input_var.data_type, suffix='b')175 tmp = self.create_tmp_variable(dtype=input_var.data_type)176 self.append_op(177 type='elementwise_add',178 inputs={'X': [input_var],179 'Y': [b]},180 outputs={'Out': [tmp]})181 returntmp182

183 defappend_activation(self, input_var):184 act = self.kwargs.get('act', None)185 if act isNone:186 returninput_var187 ifisinstance(act, basestring):188 act = {'type': act}189 tmp = self.create_tmp_variable(dtype=input_var.data_type)190 act_type = act.pop('type')191 self.append_op(192 type=act_type,193 inputs={"X": [input_var]},194 outputs={"Y": [tmp]},195 attrs=act)196 return tmp

View Code

詳細的源碼細節我們下一節會講這里指寫一下實現的方式和調用的函數。

所以這個卷積過程就完成了。從上文的計算中我們可以看到,同一層的神經元可以共享卷積核,那么對于高位數據的處理將會變得非常簡單。并且使用卷積核后圖片的尺寸變小,方便后續計算,并且我們不需要手動去選取特征,只用設計好卷積核的尺寸,數量和滑動的步長就可以讓它自己去訓練了,省時又省力啊。

為什么卷積核有效?

那么問題來了,雖然我們知道了卷積核是如何計算的,但是為什么使用卷積核計算后分類效果要由于普通的神經網絡呢?我們仔細來看一下上面計算的結果。通過第一個卷積核計算后的feature_map是一個三維數據,在第三列的絕對值最大,說明原始圖片上對應的地方有一條垂直方向的特征,即像素數值變化較大;而通過第二個卷積核計算后,第三列的數值為0,第二行的數值絕對值最大,說明原始圖片上對應的地方有一條水平方向的特征。

仔細思考一下,這個時候,我們設計的兩個卷積核分別能夠提取,或者說檢測出原始圖片的特定的特征。此時我們其實就可以把卷積核就理解為特征提取器啊!現在就明白了,為什么我們只需要把圖片數據灌進去,設計好卷積核的尺寸、數量和滑動的步長就可以讓自動提取出圖片的某些特征,從而達到分類的效果啊!

注:1.此處的卷積運算是兩個卷積核大小的矩陣的內積運算,不是矩陣乘法。即相同位置的數字相乘再相加求和。不要弄混淆了。

2.卷積核的公式有很多,這只是最簡單的一種。我們所說的卷積核在數字信號處理里也叫濾波器,那濾波器的種類就多了,均值濾波器,高斯濾波器,拉普拉斯濾波器等等,不過,不管是什么濾波器,都只是一種數學運算,無非就是計算更復雜一點。

3.每一層的卷積核大小和個數可以自己定義,不過一般情況下,根據實驗得到的經驗來看,會在越靠近輸入層的卷積層設定少量的卷積核,越往后,卷積層設定的卷積核數目就越多。具體原因大家可以先思考一下,小結里會解釋原因。

池化層(Pooling Layer)

通過上一層2*2的卷積核操作后,我們將原始圖像由4*4的尺寸變為了3*3的一個新的圖片。池化層的主要目的是通過降采樣的方式,在不影響圖像質量的情況下,壓縮圖片,減少參數。簡單來說,假設現在設定池化層采用MaxPooling,大小為2*2,步長為1,取每個窗口最大的數值重新,那么圖片的尺寸就會由3*3變為2*2:(3-2)+1=2。從上例來看,會有如下變換:

圖3 Max Pooling結果

通常來說,池化方法一般有一下兩種:

MaxPooling:取滑動窗口里最大的值

AveragePooling:取滑動窗口內所有值的平均值

為什么采用Max Pooling?

從計算方式來看,算是最簡單的一種了,取max即可,但是這也引發一個思考,為什么需要Max Pooling,意義在哪里?如果我們只取最大值,那其他的值被舍棄難道就沒有影響嗎?不會損失這部分信息嗎?如果認為這些信息是可損失的,那么是否意味著我們在進行卷積操作后仍然產生了一些不必要的冗余信息呢?

其實從上文分析卷積核為什么有效的原因來看,每一個卷積核可以看做一個特征提取器,不同的卷積核負責提取不同的特征,我們例子中設計的第一個卷積核能夠提取出“垂直”方向的特征,第二個卷積核能夠提取出“水平”方向的特征,那么我們對其進行Max Pooling操作后,提取出的是真正能夠識別特征的數值,其余被舍棄的數值,對于我提取特定的特征并沒有特別大的幫助。那么在進行后續計算使,減小了feature map的尺寸,從而減少參數,達到減小計算量,缺不損失效果的情況。

不過并不是所有情況Max Pooling的效果都很好,有時候有些周邊信息也會對某個特定特征的識別產生一定效果,那么這個時候舍棄這部分“不重要”的信息,就不劃算了。所以具體情況得具體分析,如果加了Max Pooling后效果反而變差了,不如把卷積后不加Max Pooling的結果與卷積后加了Max Pooling的結果輸出對比一下,看看Max Pooling是否對卷積核提取特征起了反效果。

Zero Padding

所以到現在為止,我們的圖片由4*4,通過卷積層變為3*3,再通過池化層變化2*2,如果我們再添加層,那么圖片豈不是會越變越小?這個時候我們就會引出“Zero Padding”(補零),它可以幫助我們保證每次經過卷積或池化輸出后圖片的大小不變,如,上述例子我們如果加入Zero Padding,再采用3*3的卷積核,那么變換后的圖片尺寸與原圖片尺寸相同,如下圖所示:

圖4 zero padding結果

通常情況下,我們希望圖片做完卷積操作后保持圖片大小不變,所以我們一般會選擇尺寸為3*3的卷積核和1的zero padding,或者5*5的卷積核與2的zero padding,這樣通過計算后,可以保留圖片的原始尺寸。那么加入zero padding后的feature_map尺寸 =( width + 2 * padding_size - filter_size )/stride + 1

注:這里的width也可換成height,此處是默認正方形的卷積核,weight = height,如果兩者不相等,可以分開計算,分別補零。

Flatten層 & Fully Connected Layer

到這一步,其實我們的一個完整的“卷積部分”就算完成了,如果想要疊加層數,一般也是疊加“Conv-MaxPooing",通過不斷的設計卷積核的尺寸,數量,提取更多的特征,最后識別不同類別的物體。做完Max Pooling后,我們就會把這些數據“拍平”,丟到Flatten層,然后把Flatten層的output放到full connected Layer里,采用softmax對其進行分類。

圖5 Flatten過程

小結

這一節我們介紹了最基本的卷積神經網絡的基本層的定義,計算方式和起的作用。有幾個小問題可以供大家思考一下:

1.卷積核的尺寸必須為正方形嗎?可以為長方形嗎?如果是長方形應該怎么計算?

2.卷積核的個數如何確定?每一層的卷積核的個數都是相同的嗎?

3.步長的向右和向下移動的幅度必須是一樣的嗎?

如果對上面的講解真的弄懂了的話,其實這幾個問題并不難回答。下面給出我的想法,可以作為參考:

1.卷積核的尺寸不一定非得為正方形。長方形也可以,只不過通常情況下為正方形。如果要設置為長方形,那么首先得保證這層的輸出形狀是整數,不能是小數。如果你的圖像是邊長為 28 的正方形。那么卷積層的輸出就滿足 [ (28 - kernel_size)/ stride ] + 1 ,這個數值得是整數才行,否則沒有物理意義。譬如,你算得一個邊長為 3.6 的 feature map 是沒有物理意義的。?pooling 層同理。FC 層的輸出形狀總是滿足整數,其唯一的要求就是整個訓練過程中 FC 層的輸入得是定長的。如果你的圖像不是正方形。那么在制作數據時,可以縮放到統一大小(非正方形),再使用非正方形的 kernel_size 來使得卷積層的輸出依然是整數。總之,撇開網絡結果設定的好壞不談,其本質上就是在做算術應用題:如何使得各層的輸出是整數。

2.由經驗確定。通常情況下,靠近輸入的卷積層,譬如第一層卷積層,會找出一些共性的特征,如手寫數字識別中第一層我們設定卷積核個數為5個,一般是找出諸如"橫線"、“豎線”、“斜線”等共性特征,我們稱之為basic feature,經過max pooling后,在第二層卷積層,設定卷積核個數為20個,可以找出一些相對復雜的特征,如“橫折”、“左半圓”、“右半圓”等特征,越往后,卷積核設定的數目越多,越能體現label的特征就越細致,就越容易分類出來,打個比方,如果你想分類出“0”的數字,你看到

這個特征,能推測是什么數字呢?只有越往后,檢測識別的特征越多,試過能識別

這幾個特征,那么我就能夠確定這個數字是“0”。

3.有stride_w和stride_h,后者表示的就是上下步長。如果用stride,則表示stride_h=stride_w=stride。

手寫數字識別的CNN網絡結構

上面我們了解了卷積神經網絡的基本結構后,現在來具體看一下在實際數據---手寫數字識別中是如何操作的。上文中我定義了一個最基本的CNN網絡。如下(代碼詳見github)

1 defconvolutional_neural_network_org(img):2 #first conv layer

3 conv_pool_1 =paddle.networks.simple_img_conv_pool(4 input=img,5 filter_size=3,6 num_filters=20,7 num_channel=1,8 pool_size=2,9 pool_stride=2,10 act=paddle.activation.Relu())11 #second conv layer

12 conv_pool_2 =paddle.networks.simple_img_conv_pool(13 input=conv_pool_1,14 filter_size=5,15 num_filters=50,16 num_channel=20,17 pool_size=2,18 pool_stride=2,19 act=paddle.activation.Relu())20 #fully-connected layer

21 predict =paddle.layer.fc(22 input=conv_pool_2, size=10, act=paddle.activation.Softmax())23 return predict

那么它的網絡結構是:

conv1----> conv2---->fully Connected layer

非常簡單的網絡結構。第一層我們采取的是3*3的正方形卷積核,個數為20個,深度為1,stride為2,pooling尺寸為2*2,激活函數采取的為RELU;第二層只對卷積核的尺寸、個數和深度做了些變化,分別為5*5,50個和20;最后鏈接一層全連接,設定10個label作為輸出,采用Softmax函數作為分類器,輸出每個label的概率。

那么這個時候我考慮的問題是,既然上面我們已經了解了卷積核,改變卷積核的大小是否會對我的結果造成影響?增多卷積核的數目能夠提高準確率?于是我做了個實驗:

第一次改進:僅改變第一層與第二層的卷積核數目的大小,其他保持不變。可以看到結果提升了0.06%

第二次改進:保持3*3的卷積核大小,僅改變第二層的卷積核數目,其他保持不變,可以看到結果相較于原始參數提升了0.08%

由以上結果可以看出,改變卷積核的大小與卷積核的數目會對結果產生一定影響,在目前手寫數字識別的項目中,縮小卷積核尺寸,增加卷積核數目都會提高準確率。不過以上實驗只是一個小測試,有興趣的同學可以多做幾次實驗,看看參數帶來的具體影響,下篇文章我們會著重分析參數的影響。

這篇文章主要介紹了神經網絡的預備知識,卷積神經網絡的常見的層及基本的計算過程,看完后希望大家明白以下幾個知識點:

為什么卷積神經網絡更適合于圖像分類?相比于傳統的神經網絡優勢在哪里?

卷積層中的卷積過程是如何計算的?為什么卷積核是有效的?

卷積核的個數如何確定?應該選擇多大的卷積核對于模型來說才是有效的?尺寸必須為正方形嗎?如果是長方形因該怎么做?

步長的大小會對模型的效果產生什么樣的影響?垂直方向和水平方向的步長是否得設定為相同的?

為什么要采用池化層,Max Pooling有什么好處?

Zero Padding有什么作用?如果已知一個feature map的尺寸,如何確定zero padding的數目?

上面的問題,有些在文章中已經詳細講過,有些大家可以根據文章的內容多思考一下。最后給大家留幾個問題思考一下:

為什么改變卷積核的大小能夠提高結果的準確率?卷積核大小對于分類結果是如何影響的?

卷積核的參數是怎么求的?一開始隨機定義一個,那么后來是如何訓練才能使這個卷積核識別某些特定的特征呢?

1*1的卷積核有意義嗎?為什么有些網絡層結構里會采用1*1的卷積核?

下篇文章我們會著重講解以下幾點:

卷積核的參數如何確定?隨機初始化一個數值后,是如何訓練得到一個能夠識別某些特征的卷積核的?

CNN是如何進行反向傳播的?

如何調整CNN里的參數?

如何設計最適合的CNN網絡結構?

能夠不用調用框架的api,手寫一個CNN,并和paddlepaddle里的實現過程做對比,看看有哪些可以改進的?

ps:本篇文章是基于個人對CNN的理解來寫的,本人能力有限,有些地方可能寫的不是很嚴謹,如有錯誤或疏漏之處,請留言給我,我一定會仔細核實并修改的^_^!不接受無腦噴哦~此外,文中的圖表結構均為自己所做,希望不要被人隨意抄襲,可以進行非商業性質的轉載,需要轉載留言或發郵件即可,希望能夠尊重勞動成果,謝謝!有不懂的也請留言給我,我會盡力解答的哈~

總結

以上是生活随笔為你收集整理的python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

91精品婷婷国产综合久久蝌蚪 | 一区二区三区免费在线观看视频 | 欧美日韩在线观看一区二区 | 国产高清视频在线免费观看 | 视频在线精品 | av片子在线观看 | av免费网页 | 亚洲第一av在线播放 | 麻花豆传媒一二三产区 | 亚洲精品小视频在线观看 | 91成人网页版 | 亚洲日本欧美在线 | www.久草视频 | 91亚洲精品在线观看 | 97超级碰| 99精品免费久久久久久日本 | 婷婷亚洲激情 | 免费电影一区二区三区 | 国产精品日韩久久久久 | 国产精品毛片一区二区 | 最新一区二区三区 | 免费观看v片在线观看 | 午夜精品在线看 | 中文字幕91视频 | 亚洲精品网站在线 | 337p日本欧洲亚洲大胆裸体艺术 | 99精品国产亚洲 | 精品国模一区二区 | 一区在线电影 | 欧美成人tv | 免费观看性生活大片3 | 国产精久久 | 国产99久久久久 | 成人91在线 | 欧美成人h版在线观看 | 日韩欧美中文 | 久久国色夜色精品国产 | 久久精品高清视频 | 毛片久久久 | 欧美日韩午夜爽爽 | 99视频精品全部免费 在线 | 亚洲资源在线网 | 月丁香婷婷 | 男女视频久久久 | 99精品乱码国产在线观看 | av怡红院| 美女网站在线 | 亚洲精品视频网站在线观看 | 天堂av在线 | 精品免费久久久久 | 国产 欧美 在线 | 亚洲欧美日本一区二区三区 | 国产精品美女久久久久久免费 | 久久久激情网 | av色影院| www黄免费 | 亚洲精品自在在线观看 | 亚洲成熟女人毛片在线 | 99色在线观看 | 一区二区视频在线播放 | 国产精品理论片在线播放 | 国产96精品 | 久久国产视频网站 | 国产三级av在线 | 一区二区伦理电影 | 五月婷婷毛片 | 视频一区二区在线 | 欧美一级久久 | 欧洲亚洲精品 | 手机在线日韩视频 | 天天操天天是 | 成在人线av| 久久成年人视频 | 91精品国产高清自在线观看 | 久久视频免费在线 | 99精品欧美一区二区 | 91免费在线 | 天天做天天爱天天综合网 | 911久久 | 久久综合五月天 | 亚洲精品国产高清 | 最近最新中文字幕视频 | 麻豆av电影| 黄av在线 | 日韩激情免费视频 | 亚洲天堂网视频 | 日韩精品一区二区在线视频 | 摸bbb搡bbb搡bbbb | 在线观看中文字幕 | 国产精品免费久久久 | 国产午夜精品一区二区三区在线观看 | 国产九色视频在线观看 | avav片| 日韩欧美国产免费播放 | 人人看黄色| 色婷婷激情 | 91视频久久久久久 | 日本精品va在线观看 | 国产精品美女久久久免费 | 国产九色在线播放九色 | 成人国产精品电影 | 国产黄色免费观看 | 久久久久久久久久亚洲精品 | 国产色黄网站 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产视频一区在线 | 欧美少妇xxxxxx | 午夜精品福利一区二区 | 成人免费在线看片 | 高清av免费看 | 色午夜影院 | 国内外成人免费在线视频 | www国产亚洲精品久久网站 | 中文av影院 | 99re亚洲国产精品 | 九九视频这里只有精品 | 久99久精品 | 国产精品久久99精品毛片三a | 免费特级黄色片 | 欧美少妇xx| 日韩电影在线一区二区 | 国产黄色免费看 | 韩国一区二区av | 99国产情侣在线播放 | 免费视频91蜜桃 | 成人免费ⅴa | 欧美性网站 | 久久综合婷婷综合 | 亚洲天堂色婷婷 | 一区二区中文字幕在线播放 | 精产嫩模国品一二三区 | 91精品国产三级a在线观看 | 夜夜操天天干 | 96看片| 精品女同一区二区三区在线观看 | 亚洲一区精品二人人爽久久 | 一区二区三区免费在线观看视频 | 97超碰.com | 亚洲国产精品视频在线观看 | 日韩欧美在线国产 | 在线观看日韩免费视频 | 五月综合| av黄色一级片 | 久久久久综合精品福利啪啪 | www.在线观看视频 | 日韩欧美在线中文字幕 | 日韩激情中文字幕 | 亚洲激情小视频 | 激情综合网五月婷婷 | 黄色av一区 | 91精品国产高清自在线观看 | 国产精品专区在线 | 久久色在线播放 | 国产爽视频 | 日本不卡123区 | 国产热re99久久6国产精品 | 色综合久久久久综合体桃花网 | 综合激情久久 | 激情五月开心 | 国产资源网| 久久av免费 | 婷婷色在线视频 | 亚洲人成在线电影 | 欧美91视频 | 久久成年视频 | 天天干天天在线 | 婷婷色视频| 97色在线观看 | 色婷婷狠狠18 | 日本久久电影 | 高清免费av在线 | 国产成人精品久 | 亚洲成aⅴ人片久久青草影院 | 国产精品久久久久久久免费大片 | 欧美污污网站 | 亚洲一级在线观看 | 四虎在线影视 | 成人国产一区 | 久久久鲁| 国产资源网| 亚洲国产免费看 | 欧洲色吧 | 伊人中文网 | 国语精品免费视频 | 黄色三级久久 | 久久好看 | 久久精品人人做人人综合老师 | 中文字幕在线电影 | 操处女逼 | 国产精品视频永久免费播放 | 国产三级午夜理伦三级 | 一本到视频在线观看 | 欧美在线视频一区二区三区 | 色综合久久精品 | 天天搞夜夜骑 | 日韩欧美国产成人 | 在线观看av麻豆 | 黄色一集片 | 国产在线精品视频 | 亚洲欧美视频在线观看 | 久久精品二区 | 亚洲区另类春色综合小说校园片 | 黄色成人av | 美女网站一区 | 97色在线观看| 中文字幕久久精品亚洲乱码 | 国产中文字幕91 | 99精品热视频只有精品10 | 在线国产精品一区 | 久久九九精品久久 | 在线观看久久 | 久久伦理| 成人在线观看资源 | 日韩高清一区 | 午夜视频免费 | 久青草电影 | 天天综合狠狠精品 | 久久人人干 | 久草观看 | 免费观看91视频 | 日韩av看片 | 成人av av在线 | 精品国产欧美 | 免费看一级片 | 免费av 在线 | 亚洲精品乱码久久久久v最新版 | 欧美成人猛片 | 在线国产一区 | 99久久精品视频免费 | 中文av一区二区 | 免费高清无人区完整版 | 成人黄性视频 | 黄av资源 | 久 久久影院 | 久久女同性恋中文字幕 | 久草在线在线精品观看 | 日韩欧美在线播放 | 99久久超碰中文字幕伊人 | 国产免费久久 | 日本天天操 | 丁香九月婷婷 | 韩日精品视频 | 国产99在线免费 | 香蕉在线视频观看 | 日韩欧美在线综合网 | 在线播放精品一区二区三区 | 综合久久久| 国产一区视频免费在线观看 | 成人在线视 | 日韩中文字幕电影 | 99久高清在线观看视频99精品热在线观看视频 | 夜夜躁狠狠燥 | 狠狠狠狠狠操 | 欧美日韩高清不卡 | 亚洲欧美日本一区二区三区 | 久久精品成人热国产成 | 国产精品嫩草影院123 | 久久99视频 | 一级一片免费观看 | 福利片免费看 | 欧美精品亚州精品 | 亚洲国产片 | 成人av高清在线 | 精品久久1 | 一区二区三区精品在线视频 | 欧美一区二区三区四区夜夜大片 | 丁香婷婷久久 | 日韩xxxbbb| 六月天综合网 | 97视频在线看 | 一级片视频免费观看 | av电影中文 | 国产精品久久久久9999吃药 | 午夜精品视频免费在线观看 | 免费看的黄网站 | av高清不卡| 婷婷去俺也去六月色 | 综合天天色 | 香蕉视频91 | 色综合久久久 | 日韩毛片精品 | 黄色特一级片 | 亚洲精品短视频 | 国产亚洲精品av | 精品国产精品国产偷麻豆 | 九九九热| 亚洲综合五月 | 男女免费av| 99久久夜色精品国产亚洲96 | 夜夜操狠狠操 | 免费观看www7722午夜电影 | 天天艹天天爽 | 91尤物在线播放 | 国产精品成人免费 | 69国产盗摄一区二区三区五区 | 九九电影在线 | 国产精品午夜久久久久久99热 | 日韩a欧美 | 欧洲精品码一区二区三区免费看 | 亚洲精品午夜国产va久久成人 | 日本中文字幕在线电影 | 天天做日日爱夜夜爽 | 三级黄色网络 | 日韩成人精品一区二区三区 | 精久久久久 | 欧美精品v国产精品v日韩精品 | 精品一区二区视频 | 日韩中文字幕亚洲一区二区va在线 | 成人av免费网站 | 蜜臀久久99精品久久久无需会员 | 久久久久久久久久网站 | 天天干天天弄 | 五月婷婷激情五月 | 最新国产精品拍自在线播放 | 中文字幕欧美三区 | 500部大龄熟乱视频 欧美日本三级 | 青青河边草观看完整版高清 | 国产精品久久久久久久妇 | 久久免费试看 | 成人黄色在线电影 | av不卡免费在线观看 | 国产一区二区三区网站 | 国产四虎在线 | 精品一区二三区 | 日韩精品免费在线播放 | 欧美一级免费高清 | 免费a级毛片在线看 | 国产福利91精品一区 | 欧美日本啪啪无遮挡网站 | a久久久久| 日日爽视频 | 亚洲欧美日韩一区二区三区在线观看 | av再线观看| 九九九九免费视频 | 午夜的福利 | 久草综合视频 | 91c网站色版视频 | 福利区在线观看 | 色永久免费视频 | 日韩在线观看视频免费 | 国产精品黄色影片导航在线观看 | 在线看片一区 | 香蕉在线播放 | 黄色福利视频网站 | 夜夜高潮夜夜爽国产伦精品 | 香蕉视频国产在线 | av线上看 | 91精品推荐 | 日本美女xx | 人人爱在线视频 | 韩国一区视频 | 一二区电影 | 日b黄色片 | 欧美精品中文字幕亚洲专区 | 91av视频在线观看免费 | 久久九九免费视频 | 99久久网站| 久久婷婷精品 | 国产精品久久久视频 | 天天操天 | 色婷婷 亚洲 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 日本激情视频中文字幕 | 81国产精品久久久久久久久久 | 国产精品免费久久久久影院仙踪林 | 成人久久18免费 | 国产一区在线视频观看 | 韩国av免费在线观看 | 亚洲精品久久久久久久蜜桃 | 天天狠狠干 | 亚洲一级性 | 91成人在线视频 | 伊人久久在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 欧美日韩在线观看不卡 | 狠狠狠狠狠狠操 | 日韩视频区 | 亚洲精品乱码久久久久久9色 | 国产视频在线观看一区 | 免费av看片| 99精品在线播放 | 欧美尹人 | 黄色成年片 | 亚洲在线网址 | 免费福利片2019潦草影视午夜 | 国产视频二区三区 | 人人看人人爱 | 婷色在线 | 玖玖综合网 | 日韩欧美大片免费观看 | 人人爽人人av| 视频国产在线观看18 | 中文字幕在线观看1 | 日韩免费一级电影 | 欧美作爱视频 | 日韩一区二区三免费高清在线观看 | 日日夜夜精品网站 | 丁香六月国产 | 中文字幕一区二区三区久久蜜桃 | 中文字幕在线成人 | 国产精品福利无圣光在线一区 | 久久网站最新地址 | 久久久黄色免费网站 | 五月婷网 | 嫩草伊人久久精品少妇av | 免费又黄又爽视频 | 日韩在线中文字幕 | 狠狠色伊人亚洲综合网站野外 | 亚洲精品动漫在线 | 色综合咪咪久久网 | 91av电影在线观看 | 久久理论视频 | 国产操在线 | 国产在线观看你懂的 | 99久久精品免费一区 | www..com毛片| 韩国av免费在线观看 | 日韩欧美一区二区三区视频 | 久久综合九色综合97_ 久久久 | 一区二区三区视频网站 | 五月天天色 | 草久在线 | 欧美日本在线观看视频 | 毛片永久新网址首页 | 最新av免费在线观看 | 九九九九精品 | 国产玖玖在线 | 99久久精品国产欧美主题曲 | 久久国产亚洲精品 | 成人免费视频视频在线观看 免费 | 久草在线视频资源 | 亚洲激情视频在线观看 | 五月激情丁香婷婷 | 亚洲第一香蕉视频 | 97人人视频| 激情网站五月天 | 一级黄色av | 在线观看91精品视频 | 欧美日韩在线视频免费 | 欧美成人tv | 九九九热精品免费视频观看 | 天天操天天干天天操天天干 | 亚洲成人免费在线观看 | 91视频啪 | 91精品久久久久 | 国产精品一区二区av影院萌芽 | 欧美精品中文在线免费观看 | 一级成人免费视频 | 欧美 另类 交 | 久久久视屏 | 五月天婷亚洲天综合网精品偷 | 欧美精品久久久久久久亚洲调教 | 久久久亚洲精华液 | 超碰在线人人 | 麻豆国产电影 | 在线欧美a| 综合在线观看色 | 91视频 - x99av| 又色又爽的网站 | 久久伊人精品一区二区三区 | 国产一级免费在线 | 精品亚洲免a | 久草在线手机视频 | av在线亚洲天堂 | 天天综合精品 | 欧美男男tv网站 | www色片 | 久草在线一免费新视频 | 日本精品视频一区二区 | 欧美日韩国产亚洲乱码字幕 | 在线精品在线 | 99色视频在线 | 日韩久久久| 天天鲁天天干天天射 | 日韩在线视频国产 | 日韩三级视频在线观看 | 麻豆精品国产传媒 | 久久久性 | 日韩大片在线播放 | 亚洲视频播放 | 婷婷六月综合亚洲 | 2023国产精品自产拍在线观看 | 日韩丝袜 | 91最新在线 | avlulu久久精品 | av午夜电影 | 日韩在线视频看看 | 国产精品一区二区无线 | 在线看成人 | 毛片二区| 久久午夜精品 | 狠狠色丁香婷婷综合久小说久 | 免费高清在线一区 | 日韩字幕在线观看 | 国产精品嫩草影视久久久 | 日本最新中文字幕 | 国产一区二区在线影院 | 黄色大片免费播放 | 狠狠干夜夜操天天爽 | 亚洲小视频在线观看 | 国产aa免费视频 | 国产aa精品 | 99久久99久久精品 | 国产成人黄色 | 亚洲美女视频在线 | 国产麻豆精品一区 | 天天操天天射天天舔 | 超碰在线公开免费 | 国产一级视频在线 | 免费在线观看av不卡 | 99c视频高清免费观看 | 久久久综合九色合综国产精品 | 久久久久亚洲精品男人的天堂 | 亚洲三级黄色 | 五月婷婷一区二区三区 | 国产免费观看av | 91麻豆精品国产91久久久无需广告 | 日韩精品视频在线观看免费 | 亚洲精品91天天久久人人 | 国产精品精品久久久久久 | 黄色大全视频 | 色在线网站 | 亚洲狠狠丁香婷婷综合久久久 | 国产在线精品区 | 69精品视频在线观看 | 亚洲精品综合在线观看 | 69av久久| 国产欧美在线一区二区三区 | 国产三级精品在线 | 久草精品视频在线播放 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 狠狠操影视 | 精品在线一区二区三区 | av久久在线 | 日韩av成人免费看 | 韩日电影在线免费看 | 亚洲精品美女久久久久网站 | 久久久久国产精品厨房 | 久久久久女人精品毛片九一 | 激情伊人五月天久久综合 | 88av视频 | 成人免费视频视频在线观看 免费 | 国产一区二区不卡在线 | 亚洲在线网址 | 亚洲va欧美va国产va黑人 | 午夜精品视频一区二区三区在线看 | 国产亚洲日本 | 欧美精品亚州精品 | 最近高清中文字幕在线国语5 | 人人射人人澡 | www91在线观看 | 国产视频一区精品 | 成年人在线观看免费视频 | 九九欧美 | 丁香激情婷婷 | 国产成人亚洲精品自产在线 | 激情图片区| 在线精品亚洲一区二区 | 91精品国产成 | 在线国产视频一区 | 国产拍在线| 91成人在线观看喷潮 | 亚洲男男gaygay无套同网址 | 国产不卡在线播放 | 超碰激情在线 | 国产精品99久久久久人中文网介绍 | 久久免费的视频 | 国产精品久久久影视 | 97精品久久 | 福利一区视频 | 6080yy精品一区二区三区 | 久草在线免费资源站 | 国产免费又黄又爽 | 成人三级视频 | 9999亚洲 | 在线 高清 中文字幕 | 国产a视频免费观看 | 99久久99久久精品国产片 | 91亚洲精品久久久中文字幕 | 五月激情综合婷婷 | 亚洲国产精品va在线看 | 蜜臀av夜夜澡人人爽人人 | 日韩欧美在线综合网 | 视频一区二区视频 | 蜜臀av性久久久久蜜臀av | 国产色小视频 | 成人精品久久 | 国产精品国内免费一区二区三区 | 日韩中文字幕免费看 | 国产福利91精品一区二区三区 | 97精品国产97久久久久久久久久久久 | 日韩亚洲欧美中文字幕 | 91在线免费播放视频 | 国产剧情在线一区 | 中文字幕av在线免费 | 国产白浆在线观看 | 色婷婷97| 久久精品久久久久电影 | .精品久久久麻豆国产精品 亚洲va欧美 | 国产日韩精品一区二区 | www黄色com| 久草在线高清 | 欧日韩在线视频 | 中文字幕一区av | 国产精品乱码高清在线看 | 99久久精品视频免费 | 91精品播放 | 免费网站在线观看人 | 激情自拍av | 欧美一级视频免费看 | 青青河边草免费观看 | 久草在线观看 | 欧美性黑人| wwwwwww色| 91在线视频免费播放 | 亚洲国产免费av | 亚洲成年人免费网站 | 亚洲国产中文字幕在线 | 五月婷婷色丁香 | 国产精品亚洲成人 | 色香蕉视频 | av大全在线观看 | 在线观看涩涩 | 久久五月婷婷综合 | 一二区精品 | 欧美在线视频第一页 | 国产一级黄色免费看 | 免费av片在线 | 日本福利视频在线 | 免费 在线 中文 日本 | 精品国产一区二区三区久久久 | 91插插插网站 | av中文在线播放 | 国产成人精品不卡 | 国产黑丝一区二区三区 | 天天射天天爱天天干 | www.夜夜操.com | 色综合久久久网 | 国产精品久久久久久久久久尿 | 国内免费的中文字幕 | 亚洲欧美在线综合 | 亚洲精品在线观看网站 | 久久国产美女视频 | 免费一级片在线观看 | 国产夫妻av在线 | 黄色电影在线免费观看 | 蜜臀久久99精品久久久酒店新书 | 久艹视频在线免费观看 | 欧美日韩久久一区 | 成人h视频| 国产99re| 久久久综合精品 | 麻豆视频在线看 | 天天射天天拍 | 91精品久久久久久久久久入口 | 国产精品亚洲视频 | 国产亚洲无 | 欧美久久久久久久久中文字幕 | 亚洲国产精品va在线看黑人 | 久久综合欧美精品亚洲一区 | 亚洲精品久久久久中文字幕m男 | 又黄又网站 | 一区二区三区在线免费观看视频 | 夜色资源站国产www在线视频 | 91麻豆精品国产午夜天堂 | 亚洲国产中文字幕在线 | 丁香五月亚洲综合在线 | 午夜黄色 | 99国产精品一区 | 欧美成人h版电影 | 玖玖玖国产精品 | 91麻豆精品国产91久久久久久 | 国产91精品看黄网站 | 日韩欧美成 | av性在线| 国产精品视屏 | 国内久久精品视频 | 色黄www小说 | 粉嫩av一区二区三区四区五区 | 午夜体验区 | 日韩精品一区二区三区三炮视频 | 最近日韩免费视频 | 久久精品在线免费观看 | 国产精品久久艹 | 99 精品 在线 | 成人免费在线网 | 超碰在线97免费 | 丰满少妇高潮在线观看 | 国产欧美精品xxxx另类 | 五月网婷婷 | 日韩中字在线观看 | 亚洲一级久久 | 亚洲激情网站免费观看 | 日韩精品影视 | www91在线| 毛片一区二区 | 国产精品美女久久久久久久久久久 | 全久久久久久久久久久电影 | 亚洲小视频在线 | 99久久久久久国产精品 | 久久影院午夜论 | 视频一区二区三区视频 | 狠狠的干狠狠的操 | 麻豆精品视频在线 | 国产视频久久久 | 国产又黄又爽无遮挡 | 久久久久一区二区三区四区 | 久久精品国产美女 | 亚洲欧美少妇 | 成人亚洲综合 | 精品欧美一区二区精品久久 | 欧美日韩一区二区久久 | 超碰av在线播放 | 国产精品久久久影视 | 99国内精品久久久久久久 | 综合网天天色 | 深夜免费福利在线 | 免费无遮挡动漫网站 | 天堂在线视频中文网 | 久久精品99国产国产精 | 五月婷婷一区二区三区 | 97在线观| 日韩在线观看一区 | 久久综合狠狠狠色97 | 欧美成年人在线观看 | 国产高清在线不卡 | 国产精品v欧美精品 | 亚洲国产日韩欧美 | 免费日韩一级片 | 69久久夜色精品国产69 | 91免费看黄色 | 在线观看中文字幕dvd播放 | 草久在线 | 黄色成人小视频 | 五月综合婷 | 国产精品一区二区三区观看 | 日韩高清不卡在线 | 久久中文网 | 国产精品视频app | 亚洲精品视频中文字幕 | 国产一线在线 | 国产成人在线免费观看 | 99在线观看免费视频精品观看 | 日韩精品不卡在线观看 | 最近乱久中文字幕 | 欧美调教网站 | 最近中文字幕第一页 | 97人人澡人人添人人爽超碰 | 国产在线精品二区 | 欧美 日韩精品 | 人人澡人人爱 | 成人av一区二区兰花在线播放 | 免费国产在线精品 | 色婷婷中文 | 一区二区三区免费播放 | 操操操干干干 | 天天拍天天操 | 色婷婷丁香 | 九九在线视频免费观看 | 国产亚洲精品久久久久秋 | 99视频精品免费观看, | av网站在线观看免费 | 天天色天天草天天射 | 国产糖心vlog在线观看 | 四虎5151久久欧美毛片 | av高清一区 | 久久免费观看少妇a级毛片 久久久久成人免费 | 丁香花在线观看视频在线 | 免费电影播放 | 久久久久久久久久久免费 | 国产一级黄色免费看 | 免费观看日韩 | 国产精品视频你懂的 | 少妇精69xxtheporn | 欧美日韩午夜在线 | 日韩av电影中文字幕在线观看 | 国产一区免费在线观看 | 久久精品国产免费看久久精品 | 成人黄色小说视频 | 99亚洲国产 | 久久手机在线视频 | 青草视频免费观看 | 青青河边草手机免费 | 国产第一二区 | 欧美亚洲一区二区在线 | 免费观看一级视频 | 97电影在线看视频 | 2024国产在线 | 免费黄色网址网站 | 久久爱www. | 精品一区二区在线观看 | 日本高清xxxx | 96国产精品视频 | 久久99精品波多结衣一区 | 精品国产成人av在线免 | 精品久久久久久久久久岛国gif | www.eeuss影院av撸| 国产精品九九九九九九 | 欧美日韩国产欧美 | 久久99深爱久久99精品 | 久久影视一区 | 成人全视频免费观看在线看 | 久久久国产精品亚洲一区 | 久久人人爽人人爽人人片av免费 | 97国产大学生情侣酒店的特点 | 97精品国产一二三产区 | 免费色黄 | 在线视频区 | av在线播放免费 | 国产丝袜美腿在线 | 色综合狠狠干 | 亚洲精品玖玖玖av在线看 | 国产精品一区二区无线 | 亚洲精品美女视频 | 久久久久国产精品一区二区 | 国产精品第54页 | 一区二区精 | 欧美视频www| 四虎影视成人精品 | 麻豆视频免费看 | 97超碰总站 | 精品av网站 | 五月天激情在线 | 最新国产在线 | 日韩色中色 | 中文字幕一区在线 | 日韩一级电影网站 | 91视频网址入口 | 婷婷久久综合九色综合 | 99视频精品免费视频 | 成人9ⅰ免费影视网站 | 黄色片免费看 | 天天操天天干天天 | av福利在线导航 | 日韩精品久久一区二区 | av经典在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩三级中文字幕 | 色橹橹欧美在线观看视频高清 | 日日干夜夜干 | 激情五月开心 | 国产成人综合在线观看 | 亚洲一级国产 | 中文字幕资源网 | 中文字幕123区 | 99在线精品免费视频九九视 | av黄网站| 中文字幕在线播放第一页 | 欧美乱淫视频 | 成年人黄色免费看 | 手机看片国产日韩 | 久久精品视频国产 | 福利视频一区二区 | 国产精品理论片在线播放 | 人人爽人人爽人人片 | 一级做a爱片性色毛片www | 日日干天天射 | 国产成人在线一区 | 九九免费精品视频 | 99精品视频一区二区 | 欧美在线一级片 | 欧美日韩中文国产一区发布 | 久产久精国产品 | 日韩av影视| 在线欧美小视频 | 久久成人18免费网站 | 国产亚洲精品久久久久动 | 亚洲精品乱码久久久久久高潮 | 最近中文字幕免费观看 | 黄色软件视频网站 | 久久久精品日本 | 国色综合 | 97在线免费视频 | 中文字幕在线一区观看 | 福利一区视频 | 精品久久久免费 | 日韩一级精品 | 18久久久久久 | 免费亚洲成人 | 国产一区二区免费在线观看 | 亚洲一区二区精品视频 | 美女黄网站视频免费 | 97香蕉久久国产在线观看 | 久操久| 蜜桃视频在线观看一区 | 人人澡人摸人人添学生av | 欧美国产日韩激情 | 成人av片免费观看app下载 | 91高清免费观看 | 天天草天天操 | 亚洲黄色软件 | 国产精品久久久久久妇 | 美女视频永久黄网站免费观看国产 | 性色av香蕉一区二区 | 九九免费在线看完整版 | 欧美一级片在线播放 | 最近高清中文在线字幕在线观看 | 日韩一二三在线 | 在线观看视频在线观看 | 青草视频在线播放 | 日韩一区二区三区免费视频 | 人人射网站 | 欧美一级在线看 | 国产精品自产拍在线观看桃花 | 九九热视频在线 | 国产亚洲精品福利 | 久久综合九色综合欧美就去吻 | 免费观看性生交大片3 | 亚洲国产精品99久久久久久久久 | 久久久久免费精品国产 | 天天干天天搞天天射 | 97超碰人人澡 | 欧美在线1| 久久99国产一区二区三区 | 免费av在线网站 | 在线观看中文字幕2021 | 欧美aa在线观看 | 亚洲永久免费av | 欧美日韩国产一区 | 在线成人欧美 | 2024国产精品视频 | 亚洲综合色站 | 欧美日韩综合在线 | 精品国产一区二区三区四区在线观看 | 日韩乱理 | 天天综合天天综合 | 成人毛片100免费观看 | 久久精品系列 | 中文字幕美女免费在线 | 日韩专区在线观看 | 精品99999 | 免费在线播放av电影 | 制服丝袜欧美 | 免费97视频 | 日韩二区三区在线观看 | 国产精品自产拍在线观看网站 | 天天草天天摸 | 免费观看全黄做爰大片国产 | 色欧美成人精品a∨在线观看 | 日韩高清av | 国产精品久久久区三区天天噜 | 欧美午夜精品久久久久久孕妇 | 三级小视频在线观看 | av高清一区二区三区 | 日韩精品免费一区二区三区 | 欧美日韩一区二区三区在线免费观看 | 国产日韩精品久久 | 天天夜夜亚洲 | 性色av免费看 | 在线国产一区二区 | 亚洲一区二区三区在线看 | 手机色在线 | 久草视频免费观 | 在线中文字幕一区二区 | 国产黑丝袜在线 | 中文永久字幕 | 国产日韩视频在线播放 | www日韩视频| av免费福利 | 久久香蕉国产 | 亚洲黄色app | 激情综合婷婷 | 国产一级片在线播放 | 免费观看丰满少妇做爰 | 中文字幕免费观看视频 | 91桃色免费视频 | 中文免费在线观看 | 国产热re99久久6国产精品 | 91热这里只有精品 | 免费看污的网站 | 中文字幕一区二区三区四区久久 | 亚洲成a人片在线www | 久久久久国产一区二区三区 | 精品福利视频在线观看 | 亚洲免费av网站 | 天天干天天干天天干天天干天天干天天干 | 久久69av | 成人国产精品久久久春色 | 久久天堂影院 | 亚洲午夜大片 | 欧美日韩免费看 | ,午夜性刺激免费看视频 | 欧美成人xxxxxxxx| 久久久精品高清 | 欧美激情精品久久久久 | 国产一级片不卡 | 日日夜夜人人精品 | 日韩深夜在线观看 | 69精品视频在线观看 | 精品国产乱码久久久久久1区2匹 | 亚洲成人av一区 | 国产在线一线 | 国产精品一区二区三区电影 | 国产高清区 | 精品国产中文字幕 | 奇米网网址 | 久久撸在线视频 | japanesefreesexvideo高潮 |