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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络

發布時間:2023/12/15 卷积神经网络 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 第6章 圖像識別與卷積神經網絡
    • 6.1 圖像識別問題簡介及經典數據集
    • 6.2 卷積神經網絡簡介
    • 6.3 卷積神經網絡常用結構
      • 6.3.1 卷積層
      • 6.3.2 池化層
    • 6.4 經典卷積神經網絡模型
      • 6.4.1 LeNet-5模型
      • 6.4.2 Inception模型
    • 6.5 卷積神經網絡實現遷移學習
      • 6.5.1 遷移學習的介紹

第6章 圖像識別與卷積神經網絡

本章通過利用CNN實現圖像識別的應用來說明如何使用TensorFlow實現卷積神經網絡

6.1 圖像識別問題簡介及經典數據集

1. Cifar

Cifar-10:10種不同種類的60000張圖像,像素大小為32*32的彩色圖像

Cifar-100:20 個大類,大類又細分為 100 個小類別,每類包含 600 張圖像。

  • Cifar相比MNIST的最大區別:彩色,且每張圖包含一個種類的實體分類難度更高。
  • 無論Cifar還是MNIST,相比真實環境的圖像識別,還有兩個主要的問題:
  • 現實生活的圖片分辨率遠遠高于32*32,且分辨率不固定;
  • 現實生活中物體類別很多,且每張圖像中不會僅僅出現一種物體;

2. ImageNet

  • 由斯坦福教授李飛飛(Feifei Li)帶頭整理的數據庫,更加貼近真實生活環境。
  • Imagenet數據集有1400多萬幅圖片,涵蓋2萬多個類別;其中有超過百萬的圖片有明確的類別標注和圖像中物體位置的標注,
  • 相關信息:
    1)Total number of non-empty synsets: 21841

    2)Total number of images: 14,197,122

    3)Number of images with bounding box annotations: 1,034,908

    4)Number of synsets with SIFT features: 1000

    5)Number of images with SIFT features: 1.2 million

6.2 卷積神經網絡簡介

前面所介紹的神經網絡都為全連接神經網絡,本節的卷積神經網絡是非全連接的神經網絡,全連接與卷積神經網絡的結構對比如下:

兩者之間最主要的區別就在于相鄰兩層之間的連接方式

1. 為什么全連接不能很好的處理圖像數據

最大的問題在于全連接層參數太多,使得計算速度減慢,且容易導致過擬合問題。

2. 卷積神經網絡的優勢

卷積神經網絡的前幾層都被組織成一個三維矩陣,可以看出前幾層的每個節點都是和上層中的部分節點相連,卷積神經網絡由以下五部分構成:

1. 輸入層

輸入層是整個神經網絡的輸入,在圖像處理中,輸入一般代表一張圖片的像素矩陣。在上圖中,最左側的三維矩陣就代表一張圖片。三維矩陣的長和寬代表圖像的大小,深度代表了圖像的色彩通道。從輸入層開始,卷積神經網絡通過不同的神經網絡結構將上一層的三維矩陣轉化為下一層的三維矩陣,知道最后的全連接層。

2. 卷積層

卷積層是卷積神經網絡中最重要的部分。卷積層中每一個節點的輸入只是上一層神經網絡的一小塊,這個小塊常用的大小有3?3或5?5,卷積層試圖將神經網絡中的每個小塊進行更加深入的分析從而抽象得到更高層次的特征,一般來說經過卷積層處理過的節點矩陣會變得更深。

3. 池化層

池化層神經網絡不會改變三維矩陣的深度,但是它可以縮小矩陣的大小。池化操作可以認為是將一張分辨率較高的圖片轉化為分辨率較低的圖片。池化層可以進一步縮小最后全連接層中節點的個數,從而達到減少整個神經網絡中參數的目的。

4. 全連接層

經過多輪卷積層和池化層的處理之后,卷積神經網絡的最后一般會是由1-2個全連接層來給出最后的分類結果。經過幾輪卷積層和池化層處理之后,可以認為圖像中的信息已經被抽象成了信息含量更高的特征。 可以將卷積和池化層看成特征提取的過程,提取完成之后,仍然需要使用全連接層來完成分類任務。

5. Softmax層(pooling層)

Softmax層主要用于分類問題,通過softmax可以得到當前樣例屬于不同種類的概率分布情況。

6.3 卷積神經網絡常用結構

6.3.1 卷積層

TensorFlow文檔中將下圖的部分被稱為“過濾器”或“內核”,過濾器可以將當前層神經網絡上的一個子節點矩陣轉化為下一層神經網絡上的一個單位節點矩陣(長和寬都為1,但深度不限的節點矩陣)。

  • 過濾器:

  • 常用的過濾器的大小為 3*3 或 5*5 的,過濾器處理的矩陣深度和當前車網絡節點矩陣的深度一致。
  • 尺寸:過濾器輸入節點矩陣的大小
  • 深度:輸出節點矩陣的深度
  • 上圖中,左側小矩陣的尺寸為過濾器的尺寸,右側單位矩陣的深度為過濾器的深度。
  • 前向傳播過程:通過左側小矩陣的節點計算出右側單位矩陣中節點的過程
  • 過濾器的前向傳播
    卷積層結構的前向傳播過程就是通過將一個過濾器從神經網絡當前層的左上角移動到右下角,并且在移動過程中計算每一個對應的單位矩陣得到的。

    傳播過程:左上角右上角左下角右下角

  • 全零填充:為了避免尺寸變化,可以使用“全零填充”,可以使得前向傳播后兩矩陣大小不變。

  • 設置不同的步長:也可以調整卷積后矩陣的大小

  • 參數共享:每一個卷積層中使用的濾波器中的參數都是一樣的(很重要的性質)

  • 使得圖像上的內容不受位置的影響,因為一幅圖上的濾波器是相同的,無論“1”出現在圖中的哪個位置,濾波的結果都是一樣的。

  • 很大程度上減少神經網絡的參數

  • 示例:全零填充、步長為2的卷積層前向傳播過程


左上角的計算方式:

ReLU(0×1+0×(?1)+0×0+1×2+1)=ReLU(3)=3ReLU(0×1+0×(?1)+0×0+1×2+1)=ReLU(3)=3

  • TensorFlow實現卷積神經網絡

1.創建濾波器的權值和偏置

filter_weight=tf.get_variable('weights',[5,5,3,16],initializer=tf.truncated_initializer(stddev=0.1))# t通過tf.get_variable的方式創建濾波器的權值和偏置# 聲明一個4維矩陣,前面兩個是濾波器尺寸、第三個表示當前層深度、第四個表示過濾器的深度(也就是卷積核個數) biases=tf.get_variable('biases',[16],initializer=tf.constant_initializer(0.1))# 當前層矩陣上不同位置的偏置項也是共享的,所以偏置項個數=下一層深度,本例為16

2.實現卷積層的前向傳播

conv=tf.nn.conv2d(input,filter_weight,strides=[1,1,1,1],padding='SAME')# tf.nn.conv2提供了一個非常方便的函數來實現卷積層的前向傳播# 第一個輸入:當前層節點矩陣# (比如輸入層,input[0,:,:,:]表示輸入第一張圖像,input[1,:,:,:]表示輸入第二張圖像# 第二個參數:卷積層的權重# 第三個參數不同維度上的步長(第一維和最后一維要求一定是1,因為步長只對矩陣的長和寬有效)# 第四個參數:填充的方法,可選'SAME'(全0填充)/'VALID'(不填充)

3.加上偏置項

bias=tf.nn.bias_add(conv,biases)# tf.nn.bias_add提供了一個方便的函數給每個節點加上偏置項# 不直接使用加法:因為矩陣上不同位置上的節點都需要加上相同的偏置項

4.激活

actived_conv=tf.nn.relu(bias)# 將計算結果通過ReLU函數激活

6.3.2 池化層

  • 作用:

  • 減少參數
  • 防止過擬合
  • 獲得平移不變性
  • 常用池化類型:

  • 最大池化
  • 平均池化
  • 池化層的作用范圍:

  • 只影響一個深度上的節點
  • 在長、寬、深這三個維度都要進行移動

  • TensorFlow實現最大池化層的前向傳播
pool = tf.nn.max_pool(actived_conv,ksize[1,3,3,1],strides=[1,2,2,1],padding='SAME')# 第一個參數:當前層節點矩陣# 第二個參數:過濾器尺寸# 給出的是一個長度為4的一位數組,但數組的首位和末位必須為1# 意味著池化層的過濾器是不可以跨過不同樣例或節點矩陣深度的# 第三個參數:步長,第一維和最后一維必須為1,即池化層不能減少節點矩陣的深度或者輸入樣例的個數# 第四個參數:填充方法,'SAME'表示全0填充,'VALID'表示不填充
  • TensorFlow實現平均池化層的前向傳播
pool = tf.nn.avg_pool(actived_conv,ksize[1,3,3,1],strides=[1,2,2,1],padding='SAME')# 第一個參數:當前層節點矩陣# 第二個參數:過濾器尺寸# 給出的是一個長度為4的一維數組,但數組的首位和末位必須為1# 意味著池化層的過濾器是不可以跨過不同樣例或節點矩陣深度的# 第三個參數:步長,第一維和最后一維必須為1,即池化層不能減少節點矩陣的深度或者輸入樣例的個數# 第四個參數:填充方法,'SAME'表示全0填充,'VALID'表示不填充

卷積層、池化層樣例

# 《TensorFlow實戰Google深度學習框架》06 圖像識別與卷積神經網絡 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 # filename:ts06.01.py # 卷積層、池化層樣例import tensorflow as tf import numpy as np# 1. 輸入矩陣 M = np.array([[[1],[-1],[0]],[[-1],[2],[1]],[[0],[2],[-2]]]) print("Matrix shape is: ",M.shape) # Matrix shape is: (3, 3, 1)# 2. 定義卷積過濾器, 深度為1 filter_weight = tf.get_variable('weights', [2, 2, 1, 1], initializer = tf.constant_initializer([[1, -1],[0, 2]])) biases = tf.get_variable('biases', [1], initializer = tf.constant_initializer(1))# 3. 調整輸入的格式符合TensorFlow的要求 M = np.asarray(M, dtype='float32') M = M.reshape(1, 3, 3, 1)# 4. 計算矩陣通過卷積層過濾器和池化層過濾器計算后的結果 x = tf.placeholder('float32', [1, None, None, 1]) conv = tf.nn.conv2d(x, filter_weight, strides=[1, 2, 2, 1], padding='SAME') bias = tf.nn.bias_add(conv, biases) pool = tf.nn.avg_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME') with tf.Session() as sess:tf.global_variables_initializer().run()convoluted_M = sess.run(bias, feed_dict={x: M})pooled_M = sess.run(pool, feed_dict={x: M})print("convoluted_M: \n", convoluted_M)print("pooled_M: \n", pooled_M)

輸出:

Matrix shape is: (3, 3, 1) convoluted_M: [[[[ 7.],[ 1.]][[-1.],[-1.]]]]pooled_M: [[[[ 0.25],[ 0.5 ]][[ 1. ],[-2. ]]]]

6.4 經典卷積神經網絡模型

6.4.1 LeNet-5模型

Yann LeCun 教授于1998年提出,是第一個成功用于數字識別的卷積神經網絡,在mnist數據集上,可以達到99.2%的效果,共有7層,如下圖所示。

輸入原始圖像的大小是32×32

1. 卷積層

輸入:原始圖像的像素(32*32*1)

過濾器:尺寸為5*5,深度為6,不使用全0填充,步長為1

輸出:尺寸為 32-5+1=28,深度為6

參數個數:5*5*1*6+6=156,

下一層節點矩陣的節點:28*28*6=4704,每個節點和5*5=25 個當前層節點相連

本層卷積層共有連接個數:4704*(25+1)=122304

2. 池化層

輸入:第一層的輸出,是一個28*28*6的節點矩陣

過濾器:大小為2*2,長、寬、步長都為2

輸出:14*14*6

3. 卷積層

輸入:14*14*6

過濾器:大小為5*5,深度為16,不使用0填充,步長為1

輸出:10*10*16,按標準的卷積層,本層應該有5*5*6*16+16=2416個參數

共有:10*10*16*(25+1)=41600個連接

4. 池化層

輸入:10*10*16

過濾器:大小為2*2,步長為2

輸出:矩陣大小為5*5*16

5. 全連接層

輸入:5*5*16,本來論文中稱本層為卷積層,但是因為濾波器大小為5*5,所以和全連接層沒有區別,之后就將其看成全連接層。如果將矩陣5*5*16拉成一個向量,則和第四章的無區別

輸出:節點個數為120

總共參數:5*5*16*120+120個參數。

6. 全連接層

輸入:節點個數為120個

輸出:節點個數為84個

總共參數:120*84+84=10164個

7. 全連接層

輸入:84個節點

輸出:10個節點

總共參數:84*10+10=850個

代碼示例:

  • LeNet_inference.py
# 《TensorFlow實戰Google深度學習框架》06 圖像識別與卷積神經網絡 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 # filename:LeNet5_infernece.py # LeNet5前向傳播import tensorflow as tf# 1. 設定神經網絡的參數 INPUT_NODE = 784 OUTPUT_NODE = 10IMAGE_SIZE = 28 NUM_CHANNELS = 1 NUM_LABELS = 10CONV1_DEEP = 32 CONV1_SIZE = 5CONV2_DEEP = 64 CONV2_SIZE = 5FC_SIZE = 512# 2. 定義前向傳播的過程 def inference(input_tensor, train, regularizer):with tf.variable_scope('layer1-conv1'):conv1_weights = tf.get_variable("weight", [CONV1_SIZE, CONV1_SIZE, NUM_CHANNELS, CONV1_DEEP],initializer=tf.truncated_normal_initializer(stddev=0.1))conv1_biases = tf.get_variable("bias", [CONV1_DEEP],initializer=tf.constant_initializer(0.0))conv1 = tf.nn.conv2d(input_tensor, conv1_weights, strides=[1, 1, 1, 1],padding='SAME')relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_biases))with tf.name_scope("layer2-pool1"):pool1 = tf.nn.max_pool(relu1, ksize = [1,2,2,1],strides=[1,2,2,1],padding="SAME")with tf.variable_scope("layer3-conv2"):conv2_weights = tf.get_variable("weight", [CONV2_SIZE, CONV2_SIZE, CONV1_DEEP, CONV2_DEEP],initializer=tf.truncated_normal_initializer(stddev=0.1))conv2_biases = tf.get_variable("bias", [CONV2_DEEP],initializer=tf.constant_initializer(0.0))conv2 = tf.nn.conv2d(pool1, conv2_weights, strides=[1, 1, 1, 1], padding='SAME')relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_biases))with tf.name_scope("layer4-pool2"):pool2 = tf.nn.max_pool(relu2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],padding='SAME')pool_shape = pool2.get_shape().as_list()nodes = pool_shape[1] * pool_shape[2] * pool_shape[3]reshaped = tf.reshape(pool2, [pool_shape[0], nodes])with tf.variable_scope('layer5-fc1'):fc1_weights = tf.get_variable("weight", [nodes, FC_SIZE],initializer=tf.truncated_normal_initializer(stddev=0.1))if regularizer != None: tf.add_to_collection('losses', regularizer(fc1_weights))fc1_biases = tf.get_variable("bias", [FC_SIZE], initializer=tf.constant_initializer(0.1))fc1 = tf.nn.relu(tf.matmul(reshaped, fc1_weights) + fc1_biases)if train: fc1 = tf.nn.dropout(fc1, 0.5)with tf.variable_scope('layer6-fc2'):fc2_weights = tf.get_variable("weight", [FC_SIZE, NUM_LABELS],initializer=tf.truncated_normal_initializer(stddev=0.1))if regularizer != None: tf.add_to_collection('losses', regularizer(fc2_weights))fc2_biases = tf.get_variable("bias", [NUM_LABELS],initializer=tf.constant_initializer(0.1))logit = tf.matmul(fc1, fc2_weights) + fc2_biasesreturn logit
  • LeNet_train.py
# 《TensorFlow實戰Google深度學習框架》06 圖像識別與卷積神經網絡 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 # filename:LeNet5_train.py # LeNet5訓練import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import LeNet_inference import os import numpy as np# 1. 定義神經網絡相關的參數 BATCH_SIZE = 100 LEARNING_RATE_BASE = 0.01 LEARNING_RATE_DECAY = 0.99 REGULARIZATION_RATE = 0.0001 TRAINING_STEPS = 55000 MOVING_AVERAGE_DECAY = 0.99 MODEL_SAVE_PATH = "LeNet5_model/" # 在當前目錄下存在LeNet5_model子文件夾 MODEL_NAME = "LeNet5_model"# 2. 定義訓練過程 def train(mnist):# 定義輸出為4維矩陣的placeholderx = tf.placeholder(tf.float32, [BATCH_SIZE,LeNet_inference.IMAGE_SIZE,LeNet_inference.IMAGE_SIZE,LeNet_inference.NUM_CHANNELS],name='x-input')y_ = tf.placeholder(tf.float32, [None, LeNet_inference.OUTPUT_NODE], name='y-input')regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)y = LeNet_inference.inference(x, True, regularizer)global_step = tf.Variable(0, trainable=False)# 定義損失函數、學習率、滑動平均操作以及訓練過程。variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)variables_averages_op = variable_averages.apply(tf.trainable_variables())cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))cross_entropy_mean = tf.reduce_mean(cross_entropy)loss = cross_entropy_mean + tf.add_n(tf.get_collection('losses'))learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples / BATCH_SIZE, LEARNING_RATE_DECAY,staircase=True)train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step=global_step)with tf.control_dependencies([train_step, variables_averages_op]):train_op = tf.no_op(name='train')# 初始化TensorFlow持久化類。saver = tf.train.Saver()with tf.Session() as sess:tf.global_variables_initializer().run()for i in range(TRAINING_STEPS):xs, ys = mnist.train.next_batch(BATCH_SIZE)reshaped_xs = np.reshape(xs, (BATCH_SIZE,LeNet_inference.IMAGE_SIZE,LeNet_inference.IMAGE_SIZE,LeNet_inference.NUM_CHANNELS))_, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: reshaped_xs, y_: ys})if i % 1000 == 0:print("After %d training step(s), loss on training batch is %g." % (step, loss_value))saver.save(sess, os.path.join(MODEL_SAVE_PATH, MODEL_NAME), global_step=global_step)# 3. 主程序入口 def main(argv=None):mnist = input_data.read_data_sets("MNIST_data", one_hot=True)train(mnist)if __name__ == '__main__':tf.app.run()

輸出:

Extracting MNIST_data\train-images-idx3-ubyte.gz Extracting MNIST_data\train-labels-idx1-ubyte.gz Extracting MNIST_data\t10k-images-idx3-ubyte.gz Extracting MNIST_data\t10k-labels-idx1-ubyte.gzAfter 1 training step(s), loss on training batch is 6.10953. After 1001 training step(s), loss on training batch is 0.801586. After 2001 training step(s), loss on training batch is 0.829287. After 3001 training step(s), loss on training batch is 0.655056. After 4001 training step(s), loss on training batch is 0.698159. After 5001 training step(s), loss on training batch is 0.744295. After 6001 training step(s), loss on training batch is 0.657604. After 7001 training step(s), loss on training batch is 0.697003. After 8001 training step(s), loss on training batch is 0.685206. After 9001 training step(s), loss on training batch is 0.651352. After 10001 training step(s), loss on training batch is 0.729663. After 11001 training step(s), loss on training batch is 0.666927. After 12001 training step(s), loss on training batch is 0.65114. After 13001 training step(s), loss on training batch is 0.648548. ...
  • LeNet_eval.py(測試該網絡在mnist的正確率,達到99.4%,巨幅高于第五章的98.4%)
# 《TensorFlow實戰Google深度學習框架》06 圖像識別與卷積神經網絡 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 # filename:LeNet5_eval.py # 測試import time import math import tensorflow as tf import numpy as np from tensorflow.examples.tutorials.mnist import input_data import LeNet5_infernece import LeNet5_traindef evaluate(mnist):with tf.Graph().as_default() as g:# 定義輸出為4維矩陣的placeholderx = tf.placeholder(tf.float32, [mnist.test.num_examples,#LeNet5_train.BATCH_SIZE,LeNet5_infernece.IMAGE_SIZE,LeNet5_infernece.IMAGE_SIZE,LeNet5_infernece.NUM_CHANNELS],name='x-input')y_ = tf.placeholder(tf.float32, [None, LeNet5_infernece.OUTPUT_NODE], name='y-input')validate_feed = {x: mnist.test.images, y_: mnist.test.labels}global_step = tf.Variable(0, trainable=False)regularizer = tf.contrib.layers.l2_regularizer(LeNet5_train.REGULARIZATION_RATE)y = LeNet5_infernece.inference(x, False, regularizer)correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))variable_averages = tf.train.ExponentialMovingAverage(LeNet5_train.MOVING_AVERAGE_DECAY)variables_to_restore = variable_averages.variables_to_restore()saver = tf.train.Saver(variables_to_restore)#n = math.ceil(mnist.test.num_examples / LeNet5_train.BATCH_SIZE)n = math.ceil(mnist.test.num_examples / mnist.test.num_examples)for i in range(n):with tf.Session() as sess:ckpt = tf.train.get_checkpoint_state(LeNet5_train.MODEL_SAVE_PATH)if ckpt and ckpt.model_checkpoint_path:saver.restore(sess, ckpt.model_checkpoint_path)global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]xs, ys = mnist.test.next_batch(mnist.test.num_examples)#xs, ys = mnist.test.next_batch(LeNet5_train.BATCH_SIZE)reshaped_xs = np.reshape(xs, (mnist.test.num_examples,#LeNet5_train.BATCH_SIZE,LeNet5_infernece.IMAGE_SIZE,LeNet5_infernece.IMAGE_SIZE,LeNet5_infernece.NUM_CHANNELS))accuracy_score = sess.run(accuracy, feed_dict={x:reshaped_xs, y_:ys})print("After %s training step(s), test accuracy = %g" % (global_step, accuracy_score))else:print('No checkpoint file found')return# 主程序 def main(argv=None):mnist = input_data.read_data_sets("../../../datasets/MNIST_data", one_hot=True)evaluate(mnist)if __name__ == '__main__':tf.app.run()

LeNet-5模型的缺點
不能很好的解決所有問題,比如類似ImageNet的復雜數據集

如何設計卷積神經網絡架構
該正則表達公式總結了經典的用于圖像分類問題的卷積神經網絡架構

輸入層(卷積層+池化層?)+全連接層+
其中:

  • +表示一層或多層
  • “池化層?”表示沒有或一層池化層,因為有的網絡是通過直接調整卷積層步長來完成的參數減少
  • 多倫卷積核池化之后,輸出層之前會有1~2個全連接層
  • LeNet-5的正則表達:

    輸入層卷積層池化層卷積層池化層全連接層全連接層輸出層

    從VGGNet觀察正則表達式的特點:

  • convX-Y:濾波器的邊長為X,深度為Y

  • VGGNet中的濾波器的邊長基本都為3或1

  • LeNet-5中使用了大小為5*5的濾波器,一般都不會超過5,但也有的設置為7*7,甚至11*11的

  • 在濾波器的深度選擇上,大部分都采用逐層遞增的方式,VGG中,每經過一個池化層,濾波器的深度*2,

  • 卷積層的步長一般為2,但也有例外(使用2或3)

  • 池化層配置相對簡單,用的最多的是最大池化層,邊長一般為2或3,步長一般為2或3

  • 6.4.2 Inception模型

    已知濾波器的大小可選,但是沒有先驗知識幫助我們去選擇其大小,所以Inception模型將不同尺寸的濾波器的濾波結果通過并聯的方式結合在一起,即將得到的矩陣拼接起來。

    Inception模型會使用不同尺寸的濾波器處理矩陣,使用全0填充和步長為1的方法獲得的特征圖譜大小是相同的,不會影響矩陣的拼接。

    Inception-v3模型共有46層,由11個Inception模塊構成,上圖中方框標注的就是一個模塊,Inception-v3模型有96個卷積層,直接使用上文的TensorFlow模型會非常冗長,所以此處介紹TensorFlow-Slim工具來更加簡潔的實現同樣結構的神經網絡代碼量。

    1.直接使用TensorFlow原始API實現卷積層

    with tf.variable_scope(scope_name):weights=tf.get_variable("weight",...)biases=tf.get_variable("bias",...)conv=tf.nn.conv2d(...)relu=tf.nn.relu(tf.nn.bias_add(conv,biases))

    2.使用TensorFlow-Slim實現卷積層

    tf.contrib.slim.conv2d (inputs,num_outputs,#[卷積核個數]kernel_size,#[高度,寬度]stride=1,#步長padding='SAME',#VALID

    存在于tensorflow.contrib的庫中,導入方法:import tensorflow.contrib.slim as slim

    net=slim.conv2d(input,32,[3,3]) # 可以在一行中實現一個卷積層的前向傳播算法 # 第一個參數:輸入節點矩陣 # 第二個參數:當前卷積層過濾器的深度 # 第三個參數:過濾器的尺寸 # 可選步長、填充、激活函數、變量命名空間等

    6.5 卷積神經網絡實現遷移學習

    6.5.1 遷移學習的介紹

    從上表可以看出,隨著模型層數及復雜度的增加,模型在ImageNet上的錯誤率也隨之降低,然而訓練神經網絡需要非常多的標注數據,ImageNet數據集中有120萬標注圖像,所以才能使得152層的ResNet模型達到分類的96.5%的正確率,實際中很難收集到如此多的標記數據,即使收集也會花費很多的人力物力,并且海量的訓練數據使得復雜的卷積神經網絡的訓練需要幾天甚至幾周,為了解決標注數據和訓練時間的問題,提出了遷移學習。

    遷移學習:將一個問題上訓練好的模型通過簡單的調整使其適用于一個新的問題。比如可以保留訓練好的Inception-v3模型中所有卷積層的參數,只是替換最后一層全連接層,可以解決一個新的圖像分類問題。

    瓶頸層:在最后這一層全連接層之前的網絡層稱之為瓶頸層。

    • 將新的圖像通過訓練好的卷積神經網絡直到瓶頸層的過程可以看成是對圖像進行特征提取的過程。
    • 可以認為瓶頸層的輸出節點向量可以被作為任何圖像的一個更加精簡且表達能力更強的特征向量,于是可以用該訓練好的神經網絡在新的數據集上完成對圖像特征的提取。
    • 再將提取到的特征作為輸入來訓練一個新的單層全連接神經網絡處理新的分類問題

    遷移學習相比重新訓練的優缺點:

    • 缺點:效果不如完全重新訓練
    • 優點:需要的訓練時間和訓練樣本數要遠遠小于訓練完整的模型

    代碼實現:

    # 《TensorFlow實戰Google深度學習框架》06 圖像識別與卷積神經網絡 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-8.0-windows10-x64-v5.1 # filename:ts06.03.py # 遷移學習# 以下實驗需要如下資源 # 源碼及資源位置:git clone https://github.com/caicloud/tensorflow-tutorial.git # 需要tensorflow-tutorial.git庫中的flower_photos和inception_dec_2015 # tensorflow-tutorial\Deep_Learning_with_TensorFlow\datasets\flower_photos # tensorflow-tutorial\Deep_Learning_with_TensorFlow\datasets\inception_dec_2015import glob import os.path import random import numpy as np import tensorflow as tf from tensorflow.python.platform import gfile# 1. 模型和樣本路徑的設置 # inception-v3模型瓶頸層的節點數 BOTTLENECK_TENSOR_SIZE = 2048# inception-v3模型中代表瓶頸層結果的張量名稱,谷歌提供的inception-v3模型中,這個張量名稱就是'pool_3/_reshape:0' # 訓練過程中,可以利用tensor.name來獲取張量的名稱 BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0'# 圖像輸入張量所對應的名稱 JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0'# 保存的模型文件目錄 MODEL_DIR = '../../datasets/inception_dec_2015' # 下載的谷歌訓練好的inception-v3模型文件名 MODEL_FILE= 'tensorflow_inception_graph.pb'# 因為一個訓練數據會被使用多次,所以可以將原始圖像通過inception-v3模型計算得到的特征向量保存在文件中, # 以免重復計算,下面是這些文件的存放地址。 CACHE_DIR = '../../datasets/bottleneck'# 圖片數據文件夾 # 該文件夾中每一個子文件夾代表一個需要區分的類別,每個子文件夾中存放了對應類別的圖片 INPUT_DATA = '../../datasets/flower_photos'# 驗證集百分比 VALIDATION_PERCENTAGE = 10 # 測試集百分比 TEST_PERCENTAGE = 10# 2. 神經網絡參數的設置 LEARNING_RATE = 0.01 STEPS = 4000 BATCH = 100# 3. 把樣本中所有的圖片列表并按訓練、驗證、測試數據分開 # testing_percentage:測試數據集的大小 # validation_percentage:驗證數據集的大小 def create_image_lists(testing_percentage, validation_percentage):# 定義一個result字典,key存儲類別名稱, 與key對應的value也是一個字典,存儲所有該類的圖片名稱result = {}# 獲取當前目錄下所有的子目錄sub_dirs = [x[0] for x in os.walk(INPUT_DATA)]is_root_dir = Truefor sub_dir in sub_dirs:if is_root_dir:is_root_dir = Falsecontinueextensions = ['jpg', 'jpeg', 'JPG', 'JPEG']file_list = []dir_name = os.path.basename(sub_dir)for extension in extensions:file_glob = os.path.join(INPUT_DATA, dir_name, '*.' + extension)file_list.extend(glob.glob(file_glob))if not file_list: continuelabel_name = dir_name.lower()# 初始化training_images = []testing_images = []validation_images = []for file_name in file_list:base_name = os.path.basename(file_name)# 隨機劃分數據chance = np.random.randint(100)if chance < validation_percentage:validation_images.append(base_name)elif chance < (testing_percentage + validation_percentage):testing_images.append(base_name)else:training_images.append(base_name)result[label_name] = {'dir': dir_name,'training': training_images,'testing': testing_images,'validation': validation_images,}return result# 4. 定義函數通過類別名稱、所屬數據集和圖片編號獲取一張圖片的地址 def get_image_path(image_lists, image_dir, label_name, index, category):label_lists = image_lists[label_name]category_list = label_lists[category]mod_index = index % len(category_list)base_name = category_list[mod_index]sub_dir = label_lists['dir']full_path = os.path.join(image_dir, sub_dir, base_name)return full_path# 5. 定義函數獲取Inception-v3模型處理之后的特征向量的文件地址 def get_bottleneck_path(image_lists, label_name, index, category):return get_image_path(image_lists, CACHE_DIR, label_name, index, category) + '.txt'# 6. 定義函數使用加載的訓練好的Inception-v3模型處理一張圖片,得到這個圖片的特征向量 # 該過程實際上就是將當前圖片作為輸入九三瓶頸張量的值,這個瓶頸張量的值就是該圖像的新的特征向量 def run_bottleneck_on_image(sess, image_data, image_data_tensor, bottleneck_tensor):bottleneck_values = sess.run(bottleneck_tensor, {image_data_tensor: image_data})# 將四維數組壓縮為一個特征向量bottleneck_values = np.squeeze(bottleneck_values)return bottleneck_values# 7. 定義函數會先試圖尋找已經計算且保存下來的特征向量,如果找不到則先計算這個特征向量,然后保存到文件 def get_or_create_bottleneck(sess, image_lists, label_name, index, category, jpeg_data_tensor, bottleneck_tensor):label_lists = image_lists[label_name]sub_dir = label_lists['dir']sub_dir_path = os.path.join(CACHE_DIR, sub_dir)if not os.path.exists(sub_dir_path): os.makedirs(sub_dir_path)bottleneck_path = get_bottleneck_path(image_lists, label_name, index, category)if not os.path.exists(bottleneck_path):image_path = get_image_path(image_lists, INPUT_DATA, label_name, index, category)image_data = gfile.FastGFile(image_path, 'rb').read()bottleneck_values = run_bottleneck_on_image(sess, image_data, jpeg_data_tensor, bottleneck_tensor)bottleneck_string = ','.join(str(x) for x in bottleneck_values)with open(bottleneck_path, 'w') as bottleneck_file:bottleneck_file.write(bottleneck_string)else:with open(bottleneck_path, 'r') as bottleneck_file:bottleneck_string = bottleneck_file.read()bottleneck_values = [float(x) for x in bottleneck_string.split(',')]return bottleneck_values# 8. 這個函數隨機獲取一個batch的圖片作為訓練數據 def get_random_cached_bottlenecks(sess, n_classes, image_lists, how_many, category, jpeg_data_tensor, bottleneck_tensor):bottlenecks = []ground_truths = []for _ in range(how_many):label_index = random.randrange(n_classes)label_name = list(image_lists.keys())[label_index]image_index = random.randrange(65536)bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, image_index, category, jpeg_data_tensor, bottleneck_tensor)ground_truth = np.zeros(n_classes, dtype=np.float32)ground_truth[label_index] = 1.0bottlenecks.append(bottleneck)ground_truths.append(ground_truth)return bottlenecks, ground_truths# 9. 這個函數獲取全部的測試數據,并計算正確率 def get_test_bottlenecks(sess, image_lists, n_classes, jpeg_data_tensor, bottleneck_tensor):bottlenecks = []ground_truths = []label_name_list = list(image_lists.keys())for label_index, label_name in enumerate(label_name_list):category = 'testing'for index, unused_base_name in enumerate(image_lists[label_name][category]):bottleneck = get_or_create_bottleneck(sess, image_lists, label_name, index, category,jpeg_data_tensor, bottleneck_tensor)ground_truth = np.zeros(n_classes, dtype=np.float32)ground_truth[label_index] = 1.0bottlenecks.append(bottleneck)ground_truths.append(ground_truth)return bottlenecks, ground_truths# 10. 定義主函數 def main():image_lists = create_image_lists(TEST_PERCENTAGE, VALIDATION_PERCENTAGE)n_classes = len(image_lists.keys())# 讀取已經訓練好的Inception-v3模型。with gfile.FastGFile(os.path.join(MODEL_DIR, MODEL_FILE), 'rb') as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read())bottleneck_tensor, jpeg_data_tensor = tf.import_graph_def(graph_def, return_elements=[BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME])# 定義新的神經網絡輸入bottleneck_input = tf.placeholder(tf.float32, [None, BOTTLENECK_TENSOR_SIZE], name='BottleneckInputPlaceholder')ground_truth_input = tf.placeholder(tf.float32, [None, n_classes], name='GroundTruthInput')# 定義一層全鏈接層with tf.name_scope('final_training_ops'):weights = tf.Variable(tf.truncated_normal([BOTTLENECK_TENSOR_SIZE, n_classes], stddev=0.001))biases = tf.Variable(tf.zeros([n_classes]))logits = tf.matmul(bottleneck_input, weights) + biasesfinal_tensor = tf.nn.softmax(logits)# 定義交叉熵損失函數。cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=ground_truth_input)cross_entropy_mean = tf.reduce_mean(cross_entropy)train_step = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(cross_entropy_mean)# 計算正確率。with tf.name_scope('evaluation'):correct_prediction = tf.equal(tf.argmax(final_tensor, 1), tf.argmax(ground_truth_input, 1))evaluation_step = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))with tf.Session() as sess:init = tf.global_variables_initializer()sess.run(init)# 訓練過程。for i in range(STEPS):train_bottlenecks, train_ground_truth = get_random_cached_bottlenecks(sess, n_classes, image_lists, BATCH, 'training', jpeg_data_tensor, bottleneck_tensor)sess.run(train_step,feed_dict={bottleneck_input: train_bottlenecks, ground_truth_input: train_ground_truth})if i % 100 == 0 or i + 1 == STEPS:validation_bottlenecks, validation_ground_truth = get_random_cached_bottlenecks(sess, n_classes, image_lists, BATCH, 'validation', jpeg_data_tensor, bottleneck_tensor)validation_accuracy = sess.run(evaluation_step, feed_dict={bottleneck_input: validation_bottlenecks, ground_truth_input: validation_ground_truth})print('Step %d: Validation accuracy on random sampled %d examples = %.1f%%' %(i, BATCH, validation_accuracy * 100))# 在最后的測試數據上測試正確率。test_bottlenecks, test_ground_truth = get_test_bottlenecks(sess, image_lists, n_classes, jpeg_data_tensor, bottleneck_tensor)test_accuracy = sess.run(evaluation_step, feed_dict={bottleneck_input: test_bottlenecks, ground_truth_input: test_ground_truth})print('Final test accuracy = %.1f%%' % (test_accuracy * 100))if __name__ == '__main__':tf.app.run()

    總結

    以上是生活随笔為你收集整理的TensorFlow:实战Google深度学习框架(五)图像识别与卷积神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    在线 成人 | 久久久99精品免费观看app | 亚洲精色 | 黄色三级在线看 | 日韩a在线| 色综合久久综合中文综合网 | 国产精品美女久久久久久 | 成年人黄色大片在线 | 国产日韩精品在线观看 | 久久免费高清视频 | 日韩精品久久久免费观看夜色 | 综合久久久久久久 | 97超碰人 | 亚洲欧美视频在线播放 | 婷婷丁香花| 婷婷五月情 | 91九色porny蝌蚪主页 | 精品一区二区久久久久久久网站 | 超碰人在线 | 天天操天天射天天插 | 91精品网站 | 天天插天天 | 国产高清亚洲 | 97在线超碰 | 色99在线 | 狠狠躁日日躁夜夜躁av | 女人魂免费观看 | 亚洲理论影院 | 在线观看一| 91精品黄色| 91精彩视频 | 国产91精品一区二区麻豆亚洲 | 欧美国产日韩一区二区三区 | 天天躁天天狠天天透 | 日韩毛片在线一区二区毛片 | 久久免费观看少妇a级毛片 久久久久成人免费 | 99re热精品视频 | 国产成人99av超碰超爽 | 91精品人成在线观看 | 国产伦理精品一区二区 | 国产精品毛片一区二区在线 | 国产日韩中文字幕在线 | 97理论电影 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 91片黄在线观 | 三上悠亚一区二区在线观看 | 国产伦精品一区二区三区四区视频 | 最近中文字幕在线中文高清版 | 国产精品午夜久久久久久99热 | 欧美成年黄网站色视频 | 亚洲精品ww | 国产高清视频免费在线观看 | 在线视频亚洲 | 精品国产一区二区三区av性色 | 叶爱av在线 | 中文字幕黄色av | 久久综合天天 | 欧美日性视频 | 天天摸日日摸人人看 | 在线观看一区二区视频 | 四虎影视国产精品免费久久 | 国产a级免费 | japanesexxx乱女另类 | 在线成人一区 | 国产精品国产三级国产aⅴ入口 | 国产一区二区高清不卡 | 国产精品va在线观看入 | 成人观看 | 久久av不卡 | 国产精品自产拍在线观看蜜 | 国产精品theporn| 久久精品久久久久电影 | 91九色综合 | 黄色成人av在线 | 西西44人体做爰大胆视频 | 国内成人综合 | 亚洲精品色婷婷 | 午夜国产福利在线观看 | 97视频在线观看网址 | 天天天在线综合网 | 国产成人精品免高潮在线观看 | 天天草天天干天天射 | 黄色不卡av | 天天操天天射天天爱 | 国产片免费在线观看视频 | 国产一区二区手机在线观看 | 国产色视频 | 日韩精品网址 | 亚洲欧美在线综合 | 国产成人精品一区一区一区 | 成年人看片网站 | 激情在线网| 99草视频在线观看 | 五月激情丁香图片 | 精品视频在线播放 | 国产精品高清一区二区三区 | 成人久久久精品国产乱码一区二区 | 久久99精品久久久久久久久久久久 | 国产在线一线 | 人人爽人人av | 黄色一二级片 | 免费在线色电影 | 在线看污网站 | 免费观看性生活大片 | 91x色| 久综合网 | 久久这里 | 五月婷婷欧美视频 | 激情久久久久久久久久久久久久久久 | 日p视频| 国产色拍拍拍拍在线精品 | 成年人国产精品 | 91亚洲精品久久久蜜桃借种 | 国产精品第54页 | 国产你懂的在线 | 国产香蕉久久精品综合网 | 国产午夜精品免费一区二区三区视频 | 国产91在线观 | 国产高清免费观看 | 亚洲精品国产高清 | 国产成本人视频在线观看 | 国产黄色成人av | 99精品在线免费观看 | 免费视频黄色 | 岛国av在线不卡 | 久久在线播放 | 在线一级片 | 九九视频在线播放 | 亚洲精品福利在线观看 | 欧洲精品在线视频 | 毛片网在线播放 | 国产麻豆精品一区二区 | 奇米网网址 | 精品美女国产在线 | 国产91精品久久久久久 | 亚洲精品久久久蜜臀下载官网 | 国产高清久久 | 免费看片成人 | 色a综合 | 在线观看国产高清视频 | 欧美一区二区日韩一区二区 | 黄色av一区二区三区 | 国产中出在线观看 | 国产专区欧美专区 | 国产精国产精品 | 欧美91精品国产自产 | 久久久免费精品国产一区二区 | 国产一区二区三区网站 | 亚洲精品毛片一级91精品 | 国产精品国产三级国产 | 色综合久久中文字幕综合网 | 日韩欧美一区二区不卡 | 精品国产伦一区二区三区免费 | 精品国产伦一区二区三区观看体验 | 国产精品久久久区三区天天噜 | 最近中文字幕完整高清 | 欧美精品久久久久久久 | 日韩 在线观看 | 中文字幕在线观看免费观看 | 麻豆系列在线观看 | 国产精品福利小视频 | 91成人精品一区在线播放 | 久草在线视频看看 | 2022中文字幕在线观看 | 黄色一集片 | 18pao国产成视频永久免费 | 国产成人av免费在线观看 | 亚洲自拍偷拍色图 | 在线色吧 | 国产理论免费 | 综合激情网... | 一级黄色大片在线观看 | 国产精品二区在线观看 | 亚洲乱码中文字幕综合 | 午夜av免费在线观看 | 欧美激情在线网站 | 久久精品成人热国产成 | 中文免费| 99国产一区 | 亚洲热久久 | 草久久av| 国产一级片在线播放 | 最近最新mv字幕免费观看 | 日韩剧| 成人av片免费观看app下载 | 久久亚洲影视 | 国产精品精品国产婷婷这里av | 国产免费黄色 | 天天av在线播放 | 国产午夜精品久久久久久久久久 | 国产视频精品免费 | 国产区精品视频 | 国产免费一区二区三区网站免费 | av福利电影 | 国产精品自产拍在线观看网站 | 国产精品婷婷 | 91精品国产92久久久久 | 三级av片 | 亚洲狠狠丁香婷婷综合久久久 | 最近日本韩国中文字幕 | 99久久精品免费看国产免费软件 | 99精品国产99久久久久久97 | 久久综合久久综合久久 | 欧美极品久久 | 久草视频首页 | 久久香蕉国产 | 亚洲综合婷婷 | 欧美国产高清 | 免费看日韩 | 欧美一级性生活片 | 亚洲女人天堂成人av在线 | 日韩成人中文字幕 | 欧美一级性 | 西西大胆免费视频 | 成人免费看黄 | 国产亚洲综合性久久久影院 | 91九色在线观看 | 热久久电影| 久久久久久久99精品免费观看 | 人人澡人人舔 | 免费看片网址 | 超碰公开在线 | 久热只有精品 | 色综合天天狠天天透天天伊人 | 国产原创av在线 | 欧美a视频| 国产在线精品一区二区 | 久久久久久久国产精品 | 久久理论影院 | 久久成年人视频 | 91精品国产自产在线观看 | 日韩免费一级a毛片在线播放一级 | 中文资源在线官网 | 99精品国产一区二区三区不卡 | av大片免费在线观看 | 99精品99 | 国产精品久久久久久久久久久杏吧 | 2023亚洲精品国偷拍自产在线 | 欧美国产日韩一区二区 | 狠狠色狠狠色综合日日小说 | 成人午夜精品久久久久久久3d | 久久久精品欧美一区二区免费 | 亚洲精品短视频 | 91传媒在线 | av网在线观看 | 99国产视频| 久草在线观看视频免费 | 精品毛片在线 | 日韩免费av在线 | 欧美日性视频 | 在线观看电影av | 一区二区三区电影大全 | 欧美日韩精品免费观看 | 韩国三级在线一区 | 中文字幕在线播放日韩 | 婷婷丁香激情五月 | 天天操天天曰 | 一级特黄av | 一区二区视频免费在线观看 | 69国产成人综合久久精品欧美 | 国产精品欧美久久久久三级 | 日韩网站中文字幕 | 91麻豆精品一区二区三区 | 国产精品免费久久久久久久久久中文 | 国产精品久久久久久久久久东京 | 人人澡人人干 | 午夜视频二区 | 天天干天天操天天拍 | 免费99| 99视频精品全国免费 | 国产精品第72页 | 免费亚洲电影 | 国产丝袜网站 | 久久三级毛片 | 中文字幕日本特黄aa毛片 | 夜夜骑首页 | 日韩三级视频 | 欧美大荫蒂xxx | 在线天堂视频 | 日韩视频一区二区三区在线播放免费观看 | 中文字幕日韩av | 激情五月色播五月 | 日韩在线观看你懂的 | 成人免费视频免费观看 | 欧美色噜噜噜 | 日韩精品亚洲专区在线观看 | 99综合影院在线 | 国产成人精品一区在线 | 国产福利不卡视频 | 99色婷婷 | 91久久精品一区二区三区 | 狠狠色丁香婷婷综合最新地址 | 久久久久免费看 | 丰满少妇久久久 | 精品91| 国内精品视频久久 | 亚洲狠狠干| 久久久国产电影 | 91在线视频观看免费 | 日本高清xxxx | 亚洲精品久久久久久久蜜桃 | 欧美日韩久久一区 | 在线 你懂 | 国产午夜精品一区二区三区四区 | 91精品国产成 | 国产精品福利午夜在线观看 | 亚洲精品免费观看视频 | 最新日韩电影 | 婷婷色中文字幕 | 91精品网站在线观看 | 视频国产| 在线观看www视频 | 在线看片视频 | 99视频在线免费观看 | 国产最新精品视频 | 日韩中文在线视频 | 黄污网站在线 | 91资源在线视频 | 丝袜网站在线观看 | 久久国产精品区 | 亚洲成熟女人毛片在线 | 99精品黄色片免费大全 | 91在线精品秘密一区二区 | 国产精品2区 | 国产精品123 | 成人午夜精品 | 国产高清视频在线播放一区 | 在线欧美中文字幕 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲男男gaygay无套同网址 | 密桃av在线| 91麻豆精品国产91久久久更新时间 | 美女精品 | 黄色软件视频网站 | 亚洲精品日韩在线观看 | 中文字幕 国产专区 | 精品 激情 | 91精品色 | 日韩国产欧美在线视频 | 亚洲经典在线 | 丁香六月欧美 | 国产一区在线免费观看 | 五月婷婷在线视频 | 中文字幕美女免费在线 | 欧美日韩性视频在线 | 久久国内精品99久久6app | 午夜三级福利 | 国产伦精品一区二区三区照片91 | 亚洲天天干 | 国产午夜三级一区二区三 | 黄影院| 一级黄色在线视频 | 夜夜爽天天爽 | 日日日日 | 久久久免费播放 | 成人在线免费av | 色吊丝av中文字幕 | 亚洲日b视频 | 探花视频免费观看高清视频 | 美女视频网站久久 | 日日夜夜精品免费 | 最近中文字幕视频完整版 | 久久不卡视频 | 成年人电影免费在线观看 | 亚洲三区在线 | 午夜精品一区二区三区在线 | 成人a在线| 99免费| 久久国产色| 日韩在线视频网站 | 日韩高清无线码2023 | 久久99精品久久久久久清纯直播 | 欧美污在线观看 | 少妇性aaaaaaaaa视频 | 日韩午夜精品 | 天天做天天爱夜夜爽 | 日本最新中文字幕 | 精品九九九九 | 色婷婷久久久综合中文字幕 | 日日操日日插 | 一区二区三区四区五区在线 | 在线黄色免费 | 日日干干夜夜 | 国产资源在线视频 | 最新中文字幕 | 日一日操一操 | 午夜视频在线网站 | 91久久人澡人人添人人爽欧美 | 中文字幕国产一区二区 | av网址最新| 天天操夜操视频 | 一级a毛片高清视频 | 99精品黄色片免费大全 | www99精品| 久久午夜国产精品 | 97视频在线播放 | 亚洲麻豆精品 | 国产精品久久久久婷婷二区次 | 国产精品久久久影视 | 免费毛片一区二区三区久久久 | 91高清免费看| 亚洲成人免费在线观看 | 日韩国产精品久久 | 亚洲永久av| 日韩中文字幕免费在线观看 | 久艹在线免费观看 | 国产午夜一级毛片 | 午夜精品电影 | 国产精品久久久久久久免费大片 | 亚洲福利精品 | 亚洲国产精品一区二区久久hs | 黄色在线免费观看网站 | 亚洲午夜精品久久久久久久久久久久 | 91桃色免费视频 | 你操综合 | 成人黄色在线观看视频 | 精品国产一区二区三区四区vr | 色射色 | 天天干天天插伊人网 | 国语对白少妇爽91 | 日韩午夜三级 | 丁香婷婷激情国产高清秒播 | www.超碰97.com | 九九视频精品在线 | 黄色在线免费观看网站 | 天堂在线成人 | 亚洲免费在线看 | 粉嫩av一区二区三区四区 | 成人动漫一区二区三区 | 在线免费观看的av网站 | 91黄色在线视频 | 免费在线观看毛片网站 | 色91在线 | 99久久精品视频免费 | 国产精品久久久久久久久久久久午夜 | 亚洲精品国内 | 国产在线精品国自产拍影院 | 久久国产成人午夜av影院宅 | 国产视频在线播放 | 一级黄色av | 成人av在线直播 | 日韩欧美精选 | av黄在线播放 | 天堂va在线高清一区 | www.色五月 | 天天色综合1 | 国产只有精品 | 成人激情开心网 | 国产高清免费观看 | 亚洲黄色大片 | 大荫蒂欧美视频另类xxxx | 天天爽天天爽 | 最近中文字幕大全中文字幕免费 | 五月天综合网站 | 国产精品大片免费观看 | 欧美一级大片在线观看 | 免费观看www7722午夜电影 | 久一在线 | 久久久麻豆| 欧美日韩一区二区三区在线观看视频 | 精品国产日本 | 天天射天天干 | 四虎国产免费 | 亚洲午夜精品久久久 | 亚洲一区欧美激情 | 天干啦夜天干天干在线线 | 91天堂在线观看 | 免费在线 | 一区中文字幕电影 | 国产高清视频在线播放 | 欧美精品在线观看免费 | 91精品国产91久久久久久三级 | 香蕉久草在线 | 中文字幕在线观看完整 | 欧美日韩二区在线 | 免费三级骚 | 成人久久久电影 | 韩日精品在线 | 免费网站黄 | 久久久精品免费观看 | 日韩精品免费在线视频 | 婷婷久久网 | 黄色国产精品 | 日韩免费在线 | 黄色免费电影网站 | 国产成人久久久久 | 黄色一级免费网站 | 四虎国产精品成人免费影视 | 粉嫩av一区二区三区四区 | 久久久国产成人 | 天天干天天拍天天操天天拍 | 91看片在线播放 | 美女啪啪图片 | 福利视频一区二区 | 国产黄色片久久久 | 丁香婷婷色综合亚洲电影 | 日韩高清网站 | 久久久久久高潮国产精品视 | 久久黄色片 | 日韩免费在线观看 | 这里只有精品视频在线 | 最新国产福利 | 久久久精品国产一区二区 | 日本中文字幕电影在线免费观看 | 精品一区二区久久久久久久网站 | 91精品欧美一区二区三区 | 一区二区亚洲精品 | 国产成人777777 | 久久久精品福利视频 | 日韩成人中文字幕 | 国产91丝袜在线播放动漫 | 欧美视频在线二区 | 免费在线黄色av | 69精品人人人人 | 国产在线观看中文字幕 | 欧美一级性视频 | 国产不卡毛片 | 国产中文字幕网 | 中文字幕在线看视频国产中文版 | 国产亚洲精品xxoo | 国产精品一区二区久久 | 国产一区国产二区在线观看 | www.com黄色 | 久久精品96 | 免费视频一区 | 国内小视频 | 天天射网站 | 国产精品久久久久久一区二区三区 | 亚洲情感电影大片 | 久久久久一区二区三区四区 | 久久免费福利视频 | 一区二区三区四区五区六区 | 国产成人一级 | 免费av网址在线观看 | 久久艹国产| 少妇视频在线播放 | 亚洲欧美精品一区 | 国产在线观看黄 | 91污在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 在线欧美最极品的av | 日韩视频免费观看高清完整版在线 | 精品中文字幕在线播放 | 四虎欧美 | 婷婷久月 | 永久免费观看视频 | 国产精品视频最多的网站 | 午夜丰满寂寞少妇精品 | 中文字幕日韩伦理 | 精品黄色在线观看 | a久久久久久 | 免费看污污视频的网站 | 久久久资源网 | 中文字幕日本在线 | 亚洲一级黄色 | 丰满少妇在线观看 | www.国产高清 | 91av视频播放 | 久久精品一级片 | 在线免费观看视频一区 | 久热av在线 | 欧美激情视频一二区 | 亚洲精品国产精品国自产 | 香蕉视频久久久 | 国产三级国产精品国产专区50 | 四虎影视久久久 | 久久免费看视频 | 亚洲美女免费精品视频在线观看 | 综合色在线观看 | 国产拍揄自揄精品视频麻豆 | 亚洲欧美日韩精品久久久 | 国语精品视频 | 韩国在线一区二区 | 久久免费av| 欧美一性一交一乱 | 国产xxxx | 91av看片 | 麻豆久久久久 | 久久久精品网站 | 久久久精品国产一区二区 | 国产综合在线视频 | 五月综合在线观看 | 狠狠干中文字幕 | 天天草网站 | 91激情小视频 | 五月色丁香 | 精品亚洲免费 | 四虎国产精品成人免费影视 | 一区二区三区在线观看免费视频 | 久久久久草 | 亚洲资源视频 | 成年人免费看片 | 狠狠天天| 中文字幕第一页在线vr | 五月天免费网站 | 日韩精品久久一区二区三区 | 免费av观看网站 | 欧美中文字幕第一页 | 91天天操| 一区二区 精品 | 干 操 插 | www.888av | 99热99热| 区一区二区三区中文字幕 | 九九九九精品九九九九 | 国产999精品久久久久久麻豆 | www色com| 久久午夜网 | 亚洲另类视频 | 五月婷婷久久综合 | 久久久国产精品网站 | 九九热re | 国产xx视频 | 在线观看黄网 | 天天干天天插伊人网 | 99热 精品在线 | 中文字幕999| 久久理论电影网 | 国产亚洲综合在线 | 免费男女羞羞的视频网站中文字幕 | 国产无遮挡猛进猛出免费软件 | 超碰在线中文字幕 | 99资源网 | 国产最新福利 | 欧美日韩在线观看不卡 | 99热精品久久 | 韩国视频一区二区三区 | 久久久久女人精品毛片 | 天天操天天操天天操天天操天天操天天操 | 国产成人av| 中文字幕高清 | 国产首页 | 色综合久 | 久久久精品久久日韩一区综合 | 久草在线免费播放 | 中文字幕资源网 国产 | 日本久久成人 | 国产群p| 免费色视频网站 | 97在线免费观看视频 | 久久伊人八月婷婷综合激情 | 夜夜爽88888免费视频4848 | 中文字幕视频一区 | 久久免费观看少妇a级毛片 久久久久成人免费 | 亚洲国产激情 | 欧美日本在线观看视频 | 黄色av影院 | 国产剧情久久 | 国产精品久久久久久久久久久久午夜 | 91粉色视频 | 亚洲最新av网站 | 99久久这里有精品 | 欧美在线观看视频免费 | 黄色a视频免费 | 又污又黄的网站 | 成人免费 在线播放 | 免费成人黄色av | 亚洲精品国产高清 | 亚洲我射av| 亚州天堂| 成人av av在线 | 国产片网站 | 午夜久久福利影院 | 四虎影视成人永久免费观看亚洲欧美 | 香蕉久久久久久久 | 精品国产乱码久久久久久久 | 久久特级毛片 | 99九九99九九九视频精品 | 国产精品久久久久久久久久白浆 | 曰韩在线| 欧美韩日在线 | 三级av片| 久久99国产精品 | 精品福利在线视频 | 久久精品国产久精国产 | 色国产视频 | 91福利区一区二区三区 | 久久国产精品久久精品国产演员表 | 国产h片在线观看 | 日韩欧美一区二区三区在线 | 亚洲国产欧洲综合997久久, | 麻豆影视在线播放 | 97福利社 | av专区在线 | 国产精品激情 | 蜜臀久久99精品久久久酒店新书 | 欧美一区二区三区激情视频 | 亚洲久草网 | 在线观看国产v片 | 国产精品免费视频观看 | 五月婷丁香 | 日韩精品无码一区二区三区 | 黄色毛片大全 | www亚洲精品| 国产精品久久久 | 美女国产在线 | 91中文字幕视频 | 精品99免费视频 | 日韩专区一区二区 | 91免费观看 | 日韩av中文字幕在线 | 91经典在线 | 中文字幕一区在线 | 日韩av三区 | 九九日九九操 | 久久精彩视频 | 久久国产精品一国产精品 | 国产资源精品在线观看 | 九色91在线视频 | www婷婷| 西西www4444大胆在线 | 久久狠狠一本精品综合网 | 日本成人中文字幕在线观看 | 国产精品男女啪啪 | 国产成人免费网站 | 一二区av| 久久综合狠狠综合久久激情 | 91精品第一页 | 亚洲三级黄色 | 99爱在线| 国产精品99蜜臀久久不卡二区 | 亚洲欧美一区二区三区孕妇写真 | 色福利网站 | 久久久久久久看片 | 国产精品系列在线 | 国产精品免费大片视频 | 成人免费在线观看入口 | 国产精品免费在线播放 | 日韩av片无码一区二区不卡电影 | 国产成人精品一区二区 | 中文字幕日韩无 | 欧美精品久久久久久久亚洲调教 | 毛片网在线观看 | a'aaa级片在线观看 | 国产 字幕 制服 中文 在线 | 成片免费观看视频999 | 欧美日韩国产在线一区 | 国产日韩欧美在线免费观看 | 免费人做人爱www的视 | 91香蕉国产在线观看软件 | 国产69精品久久久久9999apgf | 97精品国产97久久久久久久久久久久 | 成人午夜电影在线播放 | 日韩三级免费 | 国产精品手机播放 | 色多多污污在线观看 | 成人在线观看av | 丝袜美腿在线视频 | 国产精品99精品 | 亚洲视频大全 | 精品久久网 | 狠狠躁天天躁 | 伊人色综合网 | 97超碰在线视 | 天天色天天上天天操 | 黄色三级网站在线观看 | 日韩av三区 | 国产理论一区二区三区 | 99r在线视频| 精品久久久国产 | 亚洲国产精品成人va在线观看 | 视频在线观看入口黄最新永久免费国产 | 一本色道久久综合亚洲二区三区 | 久久激情片 | 日韩在线视频二区 | 久久久久久久久综合 | 91pony九色丨交换 | 日韩中文在线播放 | 最近日韩中文字幕中文 | 国产理论一区二区三区 | 久久久久国产一区二区 | 亚洲国产午夜 | 久久久久麻豆v国产 | 亚洲激情视频在线观看 | 日日爽视频 | 日韩乱理 | 久久69精品 | 欧美性极品xxxx做受 | 国产一级免费观看 | 国产一级黄 | 午夜精品久久久久久久久久久 | 精品国产一区二区三区四区vr | 91爱爱视频 | 黄色av网站在线免费观看 | 国产区精品 | 国产色小视频 | 久久亚洲私人国产精品va | 岛国av在线 | 欧美大片aaa| 日本激情视频中文字幕 | 成人在线观看av | 欧美日韩一区二区三区不卡 | 欧美一级视频免费 | 99夜色 | 午夜av日韩 | 99精品免费| 免费在线精品视频 | 欧美一区二区三区特黄 | 一区在线电影 | 国产一级电影免费观看 | 久久精品www人人爽人人 | 91av视屏 | 999久久国精品免费观看网站 | 免费在线观看国产黄 | 91porny九色91啦中文 | 国产成人一二三 | 99re久久精品国产 | 久久人人爽人人片 | 激情大尺度视频 | 欧美日韩首页 | 亚洲 欧美变态 另类 综合 | 免费看成年人 | 在线视频 你懂得 | 色视频一区 | 国产精品二区在线 | www.久久婷婷 | 久久综合狠狠综合 | 97碰碰视频 | 国产午夜麻豆影院在线观看 | 激情小说网站亚洲综合网 | 国产福利精品视频 | 国产一级高清 | 999精品| 99视频精品视频高清免费 | 亚洲韩国一区二区三区 | 国产小视频网站 | 水蜜桃亚洲一二三四在线 | 精品国产伦一区二区三区免费 | 欧美日韩精品在线一区二区 | 欧美日在线 | 午夜视频一区二区 | 婷婷国产一区二区三区 | 黄网站色视频免费观看 | 91视频亚洲| 911国产在线观看 | 国产美女搞久久 | 免费在线观看国产黄 | 热久久在线视频 | 日日夜夜人人精品 | 婷婷六月丁 | 最近中文国产在线视频 | 国内外成人在线 | 久久一久久| 亚洲欧洲av在线 | 亚洲国产日韩欧美 | 国产成年免费视频 | 九九热免费视频在线观看 | 久免费 | 欧美成人精品欧美一级乱黄 | 午夜精品久久久久久久爽 | 午夜国产福利视频 | 人人爽人人爽av | 中文字幕在线观看完整版电影 | 日韩欧美不卡 | 欧美嫩草影院 | 成人作爱视频 | 天天干天天操天天 | 亚洲年轻女教师毛茸茸 | 午夜精品视频免费在线观看 | 国产精品久久久久久久久免费 | 狠狠躁日日躁狂躁夜夜躁av | 91一区啪爱嗯打偷拍欧美 | 成人中文字幕在线观看 | 午夜aaaa | 国产码电影 | 精品国产亚洲在线 | 国产亚洲91| 国内精品视频在线播放 | 亚洲婷婷综合色高清在线 | 夜夜操天天摸 | 国产精品久久久久久久久久白浆 | 9999国产| 91福利免费| 日韩欧美在线国产 | 韩国av电影在线观看 | 国产精品女人久久久久久 | 亚洲精品理论片 | 91桃色在线免费观看 | 在线免费观看视频一区二区三区 | 免费看三级黄色片 | 91在线网址| 久久国产经典 | 黄色av播放 | 免费看黄电影 | 五月天最新网址 | 国产精品初高中精品久久 | 久久免费黄色大片 | 91高清视频 | 久久艹人人 | 特级毛片aaa | 99综合影院在线 | www视频免费在线观看 | 国产一级精品在线观看 | 日本精品一二区 | 91日韩精品| 91精品一区二区三区蜜桃 | 99视频在线看 | 国产精品日韩欧美一区二区 | 99久久精品免费看 | 91超级碰| 欧美小视频在线观看 | 日本三级人妇 | 亚洲精品 在线视频 | 国产精品久久久久影院 | 欧美精品久久人人躁人人爽 | 91自拍91| 日韩激情第一页 | 欧美极品少妇xbxb性爽爽视频 | 精品字幕 | 日韩特黄av| 国产美女久久 | 国精产品999国精产 久久久久 | 亚洲 中文 在线 精品 | 五月婷婷开心中文字幕 | 国产中文字幕在线 | 免费又黄又爽的视频 | 久久激五月天综合精品 | 欧美伦理一区 | 精品一区91 | 色综合久久精品 | 亚洲成a人片在线观看网站口工 | 亚洲综合导航 | 成人精品一区二区三区电影免费 | 久久精品国产亚洲精品 | 高清av在线免费观看 | 亚洲精品在线观看中文字幕 | www.com.黄| 最近中文字幕第一页 | 免费在线观看黄网站 | 一区二区激情视频 | 亚洲精品www| 色就色,综合激情 | 天堂av免费在线 | 久久精彩视频 | 日韩欧美亚州 | 免费看搞黄视频网站 | 91av视频免费观看 | 超碰av在线播放 | 日韩有码中文字幕在线 | 日韩欧美xxxx | 激情久久五月天 | 欧美日韩亚洲一 | 久久久久高清毛片一级 | 月丁香婷婷 | 狠狠操影视 | 久久久久久久久久久福利 | 六月久久婷婷 | 很污的网站 | 欧美成人视 | 中文字幕在线观看91 | 中文字幕一区二区三区久久蜜桃 | 精品一区二区日韩 | 欧洲精品亚洲精品 | 天天干天天摸 | 国产尤物一区二区三区 | 国产精品免费不卡 | www婷婷 | 中文字幕乱码在线播放 | 色激情在线 | 国内精品久久久精品电影院 | 国产成人综合图片 | 亚洲精品18p| 九九色在线观看 | 最近最新中文字幕视频 | bbw av| 欧美一二三区在线播放 | av电影免费观看 | 国外调教视频网站 | 欧美一级免费 | 国产精品av一区二区 | 91自拍成人 | 日韩欧美一二三 | av资源在线看 | 久久久久99999 | 玖玖视频| 久久精品com | 91大神免费在线观看 | www黄在线| 免费男女网站 | 国产精品久久婷婷六月丁香 | 亚洲激情视频在线 | 91九色视频在线 | 一区二区三区日韩视频在线观看 | 亚洲成人精品在线 | 精品一区二区日韩 | 欧美精品久久久久久久久久丰满 | 激情五月婷婷综合网 | 婷婷夜夜| 日本黄色免费在线 | 美女视频黄频大全免费 | 天天操天天干天天干 | 麻豆国产网站入口 | 国产精品原创在线 | 超碰成人免费电影 | 免费瑟瑟网站 | 一区二区三区四区五区六区 | 五月婷婷综合久久 | 久久免费看视频 |