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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)

發布時間:2024/7/5 pytorch 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 作業1:初始化
      • 1. 神經網絡模型
      • 2. 使用 0 初始化
      • 3. 隨機初始化
      • 4. He 初始化
    • 作業2:正則化
      • 1. 無正則化模型
      • 2. L2 正則化
      • 3. DropOut 正則化
        • 3.1 帶dropout的前向傳播
        • 3.2 帶dropout的后向傳播
        • 3.3 運行模型
    • 作業3:梯度檢驗
      • 1. 1維梯度檢驗
      • 2. 多維梯度檢驗

測試題:參考博文

筆記:02.改善深層神經網絡:超參數調試、正則化以及優化 W1.深度學習的實踐層面

作業1:初始化

好的初始化:

  • 加快梯度下降的收斂速度
  • 增加梯度下降收斂到較低的訓練(和泛化)誤差的幾率

導入數據

import numpy as np import matplotlib.pyplot as plt import sklearn import sklearn.datasets from init_utils import sigmoid, relu, compute_loss, forward_propagation, backward_propagation from init_utils import update_parameters, predict, load_dataset, plot_decision_boundary, predict_dec%matplotlib inline plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray'# load image dataset: blue/red dots in circles train_X, train_Y, test_X, test_Y = load_dataset()


我們的任務是:將兩類點分類

1. 神經網絡模型

用一個已經實現好了的 3層神經網絡

def model(X, Y, learning_rate = 0.01, num_iterations = 15000, print_cost = True, initialization = "he"):"""Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.Arguments:X -- input data, of shape (2, number of examples)Y -- true "label" vector (containing 0 for red dots; 1 for blue dots), of shape (1, number of examples)learning_rate -- learning rate for gradient descent num_iterations -- number of iterations to run gradient descentprint_cost -- if True, print the cost every 1000 iterationsinitialization -- flag to choose which initialization to use ("zeros","random" or "he")Returns:parameters -- parameters learnt by the model"""grads = {}costs = [] # to keep track of the lossm = X.shape[1] # number of exampleslayers_dims = [X.shape[0], 10, 5, 1]# Initialize parameters dictionary.if initialization == "zeros":parameters = initialize_parameters_zeros(layers_dims)elif initialization == "random":parameters = initialize_parameters_random(layers_dims)elif initialization == "he":parameters = initialize_parameters_he(layers_dims)# Loop (gradient descent)for i in range(0, num_iterations):# Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.a3, cache = forward_propagation(X, parameters)# Losscost = compute_loss(a3, Y)# Backward propagation.grads = backward_propagation(X, Y, cache)# Update parameters.parameters = update_parameters(parameters, grads, learning_rate)# Print the loss every 1000 iterationsif print_cost and i % 1000 == 0:print("Cost after iteration {}: {}".format(i, cost))costs.append(cost)# plot the lossplt.plot(costs)plt.ylabel('cost')plt.xlabel('iterations (per hundreds)')plt.title("Learning rate =" + str(learning_rate))plt.show()return parameters

2. 使用 0 初始化

# GRADED FUNCTION: initialize_parameters_zeros def initialize_parameters_zeros(layers_dims):"""Arguments:layer_dims -- python array (list) containing the size of each layer.Returns:parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])b1 -- bias vector of shape (layers_dims[1], 1)...WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])bL -- bias vector of shape (layers_dims[L], 1)"""parameters = {}L = len(layers_dims) # number of layers in the networkfor l in range(1, L):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.zeros((layers_dims[l], layers_dims[l-1]))parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))### END CODE HERE ###return parameters

運行以下代碼訓練:

parameters = model(train_X, train_Y, initialization = "zeros") print ("On the train set:") predictions_train = predict(train_X, train_Y, parameters) print ("On the test set:") predictions_test = predict(test_X, test_Y, parameters)

結果:

Cost after iteration 0: 0.6931471805599453 Cost after iteration 1000: 0.6931471805599453 Cost after iteration 2000: 0.6931471805599453 Cost after iteration 3000: 0.6931471805599453 Cost after iteration 4000: 0.6931471805599453 Cost after iteration 5000: 0.6931471805599453 Cost after iteration 6000: 0.6931471805599453 Cost after iteration 7000: 0.6931471805599453 Cost after iteration 8000: 0.6931471805599453 Cost after iteration 9000: 0.6931471805599453 Cost after iteration 10000: 0.6931471805599455 Cost after iteration 11000: 0.6931471805599453 Cost after iteration 12000: 0.6931471805599453 Cost after iteration 13000: 0.6931471805599453 Cost after iteration 14000: 0.6931471805599453

On the train set: Accuracy: 0.5 On the test set: Accuracy: 0.5
  • 效果很差,代價函數幾乎沒有下降
print ("predictions_train = " + str(predictions_train)) print ("predictions_test = " + str(predictions_test))

預測全部都是 0

predictions_train = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0]] predictions_test = [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]] plt.title("Model with Zeros initialization") axes = plt.gca() axes.set_xlim([-1.5,1.5]) axes.set_ylim([-1.5,1.5]) plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)


結論:

  • 神經網絡中,不要把參數初始化為0,否則模型不能打破這種狀態,一直學習同樣的東西。
  • 可以將權重隨機初始化,偏置初始化為0

3. 隨機初始化

  • np.random.randn(layers_dims[l], layers_dims[l-1])*10,* 10 使用很大的隨機數初始化權重
# GRADED FUNCTION: initialize_parameters_randomdef initialize_parameters_random(layers_dims):"""Arguments:layer_dims -- python array (list) containing the size of each layer.Returns:parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])b1 -- bias vector of shape (layers_dims[1], 1)...WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])bL -- bias vector of shape (layers_dims[L], 1)"""np.random.seed(3) # This seed makes sure your "random" numbers will be the as oursparameters = {}L = len(layers_dims) # integer representing the number of layersfor l in range(1, L):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1])*10parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))### END CODE HERE ###return parameters

運行以下代碼訓練:

parameters = model(train_X, train_Y, initialization = "random") print ("On the train set:") predictions_train = predict(train_X, train_Y, parameters) print ("On the test set:") predictions_test = predict(test_X, test_Y, parameters)

結果:

Cost after iteration 0: inf Cost after iteration 1000: 0.6239567039908781 Cost after iteration 2000: 0.5978043872838292 Cost after iteration 3000: 0.563595830364618 Cost after iteration 4000: 0.5500816882570866 Cost after iteration 5000: 0.5443417928662615 Cost after iteration 6000: 0.5373553777823036 Cost after iteration 7000: 0.4700141958024487 Cost after iteration 8000: 0.3976617665785177 Cost after iteration 9000: 0.39344405717719166 Cost after iteration 10000: 0.39201765232720626 Cost after iteration 11000: 0.38910685278803786 Cost after iteration 12000: 0.38612995897697244 Cost after iteration 13000: 0.3849735792031832 Cost after iteration 14000: 0.38275100578285265

On the train set: Accuracy: 0.83 On the test set: Accuracy: 0.86

決策邊界

plt.title("Model with large random initialization") axes = plt.gca() axes.set_xlim([-1.5,1.5]) axes.set_ylim([-1.5,1.5]) plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)


將* 10 改為 * 1:

Cost after iteration 0: 1.9698193182646349 Cost after iteration 1000: 0.6894749458317239 Cost after iteration 2000: 0.675058063210226 Cost after iteration 3000: 0.6469210868251528 Cost after iteration 4000: 0.5398790761260324 Cost after iteration 5000: 0.4062642269764849 Cost after iteration 6000: 0.29844708868759456 Cost after iteration 7000: 0.22183734662094845 Cost after iteration 8000: 0.16926424179038072 Cost after iteration 9000: 0.1341330896982709 Cost after iteration 10000: 0.10873865543082417 Cost after iteration 11000: 0.09169443068126971 Cost after iteration 12000: 0.07991173603998084 Cost after iteration 13000: 0.07083949901112582 Cost after iteration 14000: 0.06370209022580517 On the train set: Accuracy: 0.9966666666666667 On the test set: Accuracy: 0.96


將* 10 改為 * 0.1:

Cost after iteration 0: 0.6933234320329613 Cost after iteration 1000: 0.6932871248121155 Cost after iteration 2000: 0.6932558729405607 Cost after iteration 3000: 0.6932263488895136 Cost after iteration 4000: 0.6931989886931527 Cost after iteration 5000: 0.6931076575962486 Cost after iteration 6000: 0.6930655602542224 Cost after iteration 7000: 0.6930202936477311 Cost after iteration 8000: 0.6929722630100763 Cost after iteration 9000: 0.6929185743666864 Cost after iteration 10000: 0.6928576152283971 Cost after iteration 11000: 0.6927869030178897 Cost after iteration 12000: 0.6927029749978133 Cost after iteration 13000: 0.6926024266332704 Cost after iteration 14000: 0.6924787835871681 On the train set: Accuracy: 0.6 On the test set: Accuracy: 0.57

  • 使用合適的初始化權重非常重要!!!
  • 不好的初始化會造成梯度消失/爆炸,降低了學習速度

4. He 初始化

是以一個人的名字命名的。

  • 如果使用ReLu激活函數(最常用),?np.sqrt(2n[l?1])*np.sqrt(\frac{2}{n^{[l-1]}})?np.sqrt(n[l?1]2?)
  • 如果使用tanh激活函數,1n[l?1]\sqrt \frac{1}{n^{[l-1]}}n[l?1]1??,或者 2n[l?1]+n[l]\sqrt \frac{2}{n^{[l-1]}+n^{[l]}}n[l?1]+n[l]2??
# GRADED FUNCTION: initialize_parameters_hedef initialize_parameters_he(layers_dims):"""Arguments:layer_dims -- python array (list) containing the size of each layer.Returns:parameters -- python dictionary containing your parameters "W1", "b1", ..., "WL", "bL":W1 -- weight matrix of shape (layers_dims[1], layers_dims[0])b1 -- bias vector of shape (layers_dims[1], 1)...WL -- weight matrix of shape (layers_dims[L], layers_dims[L-1])bL -- bias vector of shape (layers_dims[L], 1)"""np.random.seed(3)parameters = {}L = len(layers_dims) - 1 # integer representing the number of layersfor l in range(1, L + 1):### START CODE HERE ### (≈ 2 lines of code)parameters['W' + str(l)] = np.random.randn(layers_dims[l], layers_dims[l-1])*np.sqrt(2/layers_dims[l-1])parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))### END CODE HERE ###return parameters parameters = model(train_X, train_Y, initialization = "he") print ("On the train set:") predictions_train = predict(train_X, train_Y, parameters) print ("On the test set:") predictions_test = predict(test_X, test_Y, parameters) Cost after iteration 0: 0.8830537463419761 Cost after iteration 1000: 0.6879825919728063 Cost after iteration 2000: 0.6751286264523371 Cost after iteration 3000: 0.6526117768893807 Cost after iteration 4000: 0.6082958970572938 Cost after iteration 5000: 0.5304944491717495 Cost after iteration 6000: 0.4138645817071794 Cost after iteration 7000: 0.3117803464844441 Cost after iteration 8000: 0.23696215330322562 Cost after iteration 9000: 0.18597287209206836 Cost after iteration 10000: 0.15015556280371817 Cost after iteration 11000: 0.12325079292273552 Cost after iteration 12000: 0.09917746546525932 Cost after iteration 13000: 0.08457055954024274 Cost after iteration 14000: 0.07357895962677362

On the train set: Accuracy: 0.9933333333333333 On the test set: Accuracy: 0.96 plt.title("Model with He initialization") axes = plt.gca() axes.set_xlim([-1.5,1.5]) axes.set_ylim([-1.5,1.5]) plot_decision_boundary(lambda x: predict_dec(parameters, x.T), train_X, train_Y)

模型訓練準確率問題
3-layer NN with zeros initialization50%fails to break symmetry
3-layer NN with large random initialization83%too large weights
3-layer NN with He initialization99%recommended method

作業2:正則化

過擬合是個嚴重的問題,它表現為在訓練集上表現的很好,但是泛化性能較差

# import packages import numpy as np import matplotlib.pyplot as plt from reg_utils import sigmoid, relu, plot_decision_boundary, initialize_parameters, load_2D_dataset, predict_dec from reg_utils import compute_cost, predict, forward_propagation, backward_propagation, update_parameters import sklearn import sklearn.datasets import scipy.io from testCases import *%matplotlib inline plt.rcParams['figure.figsize'] = (7.0, 4.0) # set default size of plots plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray'

問題引入:

法國足球守門員發球,把球踢到什么位置,他的隊友可以用頭頂球。

train_X, train_Y, test_X, test_Y = load_2D_dataset()


法國守門員從左側發球,藍色是自己隊友頂球位置,紅色是對方頂球位置

肉眼看,好像可以用一條45°左右的斜線分開

1. 無正則化模型

def model(X, Y, learning_rate = 0.3, num_iterations = 30000, print_cost = True, lambd = 0, keep_prob = 1):"""Implements a three-layer neural network: LINEAR->RELU->LINEAR->RELU->LINEAR->SIGMOID.Arguments:X -- input data, of shape (input size, number of examples)Y -- true "label" vector (1 for blue dot / 0 for red dot), of shape (output size, number of examples)learning_rate -- learning rate of the optimizationnum_iterations -- number of iterations of the optimization loopprint_cost -- If True, print the cost every 10000 iterationslambd -- regularization hyperparameter, scalarkeep_prob - probability of keeping a neuron active during drop-out, scalar.Returns:parameters -- parameters learned by the model. They can then be used to predict."""grads = {}costs = [] # to keep track of the costm = X.shape[1] # number of exampleslayers_dims = [X.shape[0], 20, 3, 1]# Initialize parameters dictionary.parameters = initialize_parameters(layers_dims)# Loop (gradient descent)for i in range(0, num_iterations):# Forward propagation: LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOID.if keep_prob == 1:a3, cache = forward_propagation(X, parameters)elif keep_prob < 1:a3, cache = forward_propagation_with_dropout(X, parameters, keep_prob)# Cost functionif lambd == 0:cost = compute_cost(a3, Y)else:cost = compute_cost_with_regularization(a3, Y, parameters, lambd)# Backward propagation.assert(lambd==0 or keep_prob==1) # it is possible to use both L2 regularization and dropout, # but this assignment will only explore one at a timeif lambd == 0 and keep_prob == 1:grads = backward_propagation(X, Y, cache)elif lambd != 0:grads = backward_propagation_with_regularization(X, Y, cache, lambd)elif keep_prob < 1:grads = backward_propagation_with_dropout(X, Y, cache, keep_prob)# Update parameters.parameters = update_parameters(parameters, grads, learning_rate)# Print the loss every 10000 iterationsif print_cost and i % 10000 == 0:print("Cost after iteration {}: {}".format(i, cost))if print_cost and i % 1000 == 0:costs.append(cost)# plot the costplt.plot(costs)plt.ylabel('cost')plt.xlabel('iterations (x1,000)')plt.title("Learning rate =" + str(learning_rate))plt.show()return parameters parameters = model(train_X, train_Y) print ("On the training set:") predictions_train = predict(train_X, train_Y, parameters) print ("On the test set:") predictions_test = predict(test_X, test_Y, parameters)
  • 無正則化 訓練過程
Cost after iteration 0: 0.6557412523481002 Cost after iteration 10000: 0.16329987525724213 Cost after iteration 20000: 0.13851642423245572

On the training set: Accuracy: 0.9478672985781991 On the test set: Accuracy: 0.915

  • 沒有正則化的模型過擬合了,它擬合了一些噪聲點

2. L2 正則化

  • 注意在損失函數里加入正則化項

無正則項的損失函數:
J=?1m∑i=1m(y(i)log?(a[L](i))+(1?y(i))log?(1?a[L](i)))J = -\frac{1}{m} \sum\limits_{i = 1}^{m} \bigg( \small y^{(i)}\log\left(a^{[L](i)}\right) + (1-y^{(i)})\log\left(1- a^{[L](i)}\right) \bigg)J=?m1?i=1m?(y(i)log(a[L](i))+(1?y(i))log(1?a[L](i)))
加入正則化項的損失函數:
Jregularized=?1m∑i=1m(y(i)log?(a[L](i))+(1?y(i))log?(1?a[L](i)))?cross-entropy?cost+1mλ2∑l∑k∑jWk,j[l]2?L2?regularization?costJ_{regularized} = \small \underbrace{-\frac{1}{m} \sum\limits_{i = 1}^{m} \bigg(\small y^{(i)}\log\left(a^{[L](i)}\right) + (1-y^{(i)})\log\left(1- a^{[L](i)}\right) \bigg) }_\text{cross-entropy cost} + \underbrace{\frac{1}{m} \frac{\lambda}{2} \sum\limits_l\sum\limits_k\sum\limits_j W_{k,j}^{[l]2} }_\text{L2 regularization cost} Jregularized?=cross-entropy?cost?m1?i=1m?(y(i)log(a[L](i))+(1?y(i))log(1?a[L](i)))??+L2?regularization?costm1?2λ?l?k?j?Wk,j[l]2???

>>> w1 = np.array([[1,2],[2,3]]) >>> w1 array([[1, 2],[2, 3]]) >>> np.sum(np.square(w1)) 18 # GRADED FUNCTION: compute_cost_with_regularizationdef compute_cost_with_regularization(A3, Y, parameters, lambd):"""Implement the cost function with L2 regularization. See formula (2) above.Arguments:A3 -- post-activation, output of forward propagation, of shape (output size, number of examples)Y -- "true" labels vector, of shape (output size, number of examples)parameters -- python dictionary containing parameters of the modelReturns:cost - value of the regularized loss function (formula (2))"""m = Y.shape[1]W1 = parameters["W1"]W2 = parameters["W2"]W3 = parameters["W3"]cross_entropy_cost = compute_cost(A3, Y) # This gives you the cross-entropy part of the cost### START CODE HERE ### (approx. 1 line)L2_regularization_cost = lambd/(2*m)*(np.sum(np.square(W1)) + np.sum(np.square(W2)) + np.sum(np.square(W3)))### END CODER HERE ###cost = cross_entropy_cost + L2_regularization_costreturn cost
  • 反向傳播,計算梯度時也要根據 新的損失函數
    dw 需要加入 ddW(12λmW2)=λmW\fracozvdkddzhkzd{dW} ( \frac{1}{2}\frac{\lambda}{m} W^2) = \frac{\lambda}{m} WdWd?(21?mλ?W2)=mλ?W
# GRADED FUNCTION: backward_propagation_with_regularizationdef backward_propagation_with_regularization(X, Y, cache, lambd):"""Implements the backward propagation of our baseline model to which we added an L2 regularization.Arguments:X -- input dataset, of shape (input size, number of examples)Y -- "true" labels vector, of shape (output size, number of examples)cache -- cache output from forward_propagation()lambd -- regularization hyperparameter, scalarReturns:gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables"""m = X.shape[1](Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cachedZ3 = A3 - Y### START CODE HERE ### (approx. 1 line)dW3 = 1./m * np.dot(dZ3, A2.T) + lambd/m*W3### END CODE HERE ###db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)dA2 = np.dot(W3.T, dZ3)dZ2 = np.multiply(dA2, np.int64(A2 > 0))### START CODE HERE ### (approx. 1 line)dW2 = 1./m * np.dot(dZ2, A1.T) + lambd/m*W2### END CODE HERE ###db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)dA1 = np.dot(W2.T, dZ2)dZ1 = np.multiply(dA1, np.int64(A1 > 0))### START CODE HERE ### (approx. 1 line)dW1 = 1./m * np.dot(dZ1, X.T) + lambd/m*W1### END CODE HERE ###db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2,"dZ2": dZ2, "dW2": dW2, "db2": db2, "dA1": dA1, "dZ1": dZ1, "dW1": dW1, "db1": db1}return gradients
  • 運行帶 L2 正則化( λ\lambdaλ = 0.7)的模型(使用上面兩個函數計算損失、梯度)
Cost after iteration 0: 0.6974484493131264 Cost after iteration 10000: 0.26849188732822393 Cost after iteration 20000: 0.2680916337127301

On the train set: Accuracy: 0.9383886255924171 On the test set: Accuracy: 0.93

模型沒有過擬合

L2 正則化使得 權重衰減,其基于假設: 小的權重 W 的模型更簡單,所以模型會懲罰 大的 W,小的權重 使得輸出變化比較平和,不會劇烈變化 形成復雜的邊界(造成過擬合)

調整 λ\lambdaλ 做點對比:
λ=0.3\lambda = 0.3λ=0.3

On the train set: Accuracy: 0.919431279620853 On the test set: Accuracy: 0.945

λ=0.1\lambda = 0.1λ=0.1

On the train set: Accuracy: 0.9383886255924171 On the test set: Accuracy: 0.95

λ=0.01\lambda = 0.01λ=0.01(正則化作用很弱)

On the train set: Accuracy: 0.9289099526066351 On the test set: Accuracy: 0.915

(有點過擬合)

λ=1\lambda = 1λ=1

On the train set: Accuracy: 0.9241706161137441 On the test set: Accuracy: 0.93


λ=5\lambda = 5λ=5

On the train set: Accuracy: 0.919431279620853 On the test set: Accuracy: 0.92

  • λ\lambdaλ 太大,正則化太強,W 被壓縮的很小,決策邊界過度平滑(都直線了),造成高的偏差

3. DropOut 正則化


DropOut 正則化 在每次迭代的時候 隨機關閉一些神經元
被關閉的神經元在當次迭代時,對前向和后向傳播都沒有貢獻

drop-out背后的思想是,每次迭代時,使用部分神經元子集的不同模型,神經元對另一個特定神經元的激活變得不那么敏感,因為另一個神經元隨時可能被關閉

3.1 帶dropout的前向傳播

對一個3層神經網絡實施 dropout,只對第1,2層進行,不包括輸入和輸出層

  • 用 np.random.rand() 建立與 A[1]A^{[1]}A[1] 一樣維度的 D[1]=[d[1](1)d[1](2)...d[1](m)]D^{[1]} = [d^{[1](1)} d^{[1](2)} ... d^{[1](m)}]D[1]=[d[1](1)d[1](2)...d[1](m)]
  • 以一定的概率,設置 D[1]D^{[1]}D[1] 元素為0(概率 1-keep_prob), 1(概率 keep_prob)X = (X < keep_prob)
  • 關閉某些神經元,A[1]=A[1]?D[1]A^{[1]}= A^{[1]} * D^{[1]}A[1]=A[1]?D[1]
  • A[1]/=keep-prob?A^{[1]} /= \text { keep-prob }A[1]/=?keep-prob?,此步確保損失函數的期望值與 沒有dropout 時一樣(inverted dropout
# GRADED FUNCTION: forward_propagation_with_dropoutdef forward_propagation_with_dropout(X, parameters, keep_prob = 0.5):"""Implements the forward propagation: LINEAR -> RELU + DROPOUT -> LINEAR -> RELU + DROPOUT -> LINEAR -> SIGMOID.Arguments:X -- input dataset, of shape (2, number of examples)parameters -- python dictionary containing your parameters "W1", "b1", "W2", "b2", "W3", "b3":W1 -- weight matrix of shape (20, 2)b1 -- bias vector of shape (20, 1)W2 -- weight matrix of shape (3, 20)b2 -- bias vector of shape (3, 1)W3 -- weight matrix of shape (1, 3)b3 -- bias vector of shape (1, 1)keep_prob - probability of keeping a neuron active during drop-out, scalarReturns:A3 -- last activation value, output of the forward propagation, of shape (1,1)cache -- tuple, information stored for computing the backward propagation"""np.random.seed(1)# retrieve parametersW1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]W3 = parameters["W3"]b3 = parameters["b3"]# LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOIDZ1 = np.dot(W1, X) + b1A1 = relu(Z1)### START CODE HERE ### (approx. 4 lines) # Steps 1-4 below correspond to the Steps 1-4 described above. D1 = np.random.rand(A1.shape[0], A1.shape[1]) # Step 1: initialize matrix D1 = np.random.rand(..., ...)D1 = D1 < keep_prob # Step 2: convert entries of D1 to 0 or 1 (using keep_prob as the threshold)A1 = A1*D1 # Step 3: shut down some neurons of A1A1 = A1/keep_prob # Step 4: scale the value of neurons that haven't been shut down### END CODE HERE ###Z2 = np.dot(W2, A1) + b2A2 = relu(Z2)### START CODE HERE ### (approx. 4 lines)D2 = np.random.rand(A2.shape[0], A2.shape[1]) # Step 1: initialize matrix D2 = np.random.rand(..., ...)D2 = D2 < keep_prob # Step 2: convert entries of D2 to 0 or 1 (using keep_prob as the threshold)A2 = A2*D2 # Step 3: shut down some neurons of A2A2 = A2/keep_prob # Step 4: scale the value of neurons that haven't been shut down### END CODE HERE ###Z3 = np.dot(W3, A2) + b3A3 = sigmoid(Z3)cache = (Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3)return A3, cache

3.2 帶dropout的后向傳播

上面我們用 D[1],D[2]D^{[1]},D^{[2]}D[1],D[2] 把神經元關閉了

  • 使用相同的 D[1]D^{[1]}D[1] 關閉 dA1dA1dA1
  • dA1/=keep-probdA1 /= \text{keep-prob}dA1/=keep-prob,導數跟上面保持一致的系數
# GRADED FUNCTION: backward_propagation_with_dropoutdef backward_propagation_with_dropout(X, Y, cache, keep_prob):"""Implements the backward propagation of our baseline model to which we added dropout.Arguments:X -- input dataset, of shape (2, number of examples)Y -- "true" labels vector, of shape (output size, number of examples)cache -- cache output from forward_propagation_with_dropout()keep_prob - probability of keeping a neuron active during drop-out, scalarReturns:gradients -- A dictionary with the gradients with respect to each parameter, activation and pre-activation variables"""m = X.shape[1](Z1, D1, A1, W1, b1, Z2, D2, A2, W2, b2, Z3, A3, W3, b3) = cachedZ3 = A3 - YdW3 = 1./m * np.dot(dZ3, A2.T)db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)dA2 = np.dot(W3.T, dZ3)### START CODE HERE ### (≈ 2 lines of code)dA2 = dA2 * D2 # Step 1: Apply mask D2 to shut down the same neurons as during the forward propagationdA2 = dA2/keep_prob # Step 2: Scale the value of neurons that haven't been shut down### END CODE HERE ###dZ2 = np.multiply(dA2, np.int64(A2 > 0))dW2 = 1./m * np.dot(dZ2, A1.T)db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)dA1 = np.dot(W2.T, dZ2)### START CODE HERE ### (≈ 2 lines of code)dA1 = dA1 * D1 # Step 1: Apply mask D1 to shut down the same neurons as during the forward propagationdA1 = dA1/keep_prob # Step 2: Scale the value of neurons that haven't been shut down### END CODE HERE ###dZ1 = np.multiply(dA1, np.int64(A1 > 0))dW1 = 1./m * np.dot(dZ1, X.T)db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2,"dZ2": dZ2, "dW2": dW2, "db2": db2, "dA1": dA1, "dZ1": dZ1, "dW1": dW1, "db1": db1}return gradients

3.3 運行模型

參數:keep_prob = 0.86,前后向傳播 使用上面的兩個函數

On the train set: Accuracy: 0.9289099526066351 On the test set: Accuracy: 0.95

模型沒有過擬合,且 test 集上的準確率達到了 95%


注意:

  • 只能在訓練的時候,使用dropout,測試的時候不要使用
  • 前向、后向均應該使用
modeltrain accuracytest accuracy
3-layer NN without regularization95%91.5%
3-layer NN with L2-regularization94%93%
3-layer NN with dropout93%95%

正則化限制了在訓練集上的過擬合,訓練準確率下降了,但是測試集準確率上升了,這是個好現象

作業3:梯度檢驗

梯度檢驗 確保 反向傳播 是正確的,沒有 bug

1. 1維梯度檢驗

?J?θ=lim?ε→0J(θ+ε)?J(θ?ε)2ε\frac{\partial J}{\partial \theta} = \lim_{\varepsilon \to 0} \frac{J(\theta + \varepsilon) - J(\theta - \varepsilon)}{2 \varepsilon}?θ?J?=ε0lim?2εJ(θ+ε)?J(θ?ε)?

  • 計算理論梯度
# GRADED FUNCTION: forward_propagationdef forward_propagation(x, theta):"""Implement the linear forward propagation (compute J) presented in Figure 1 (J(theta) = theta * x)Arguments:x -- a real-valued inputtheta -- our parameter, a real number as wellReturns:J -- the value of function J, computed using the formula J(theta) = theta * x"""### START CODE HERE ### (approx. 1 line)J = theta * x### END CODE HERE ###return J # GRADED FUNCTION: backward_propagationdef backward_propagation(x, theta):"""Computes the derivative of J with respect to theta (see Figure 1).Arguments:x -- a real-valued inputtheta -- our parameter, a real number as wellReturns:dtheta -- the gradient of the cost with respect to theta"""### START CODE HERE ### (approx. 1 line)dtheta = x### END CODE HERE ###return dtheta
  • 計算近似梯度
  • θ+=θ+ε\theta^{+} = \theta + \varepsilonθ+=θ+ε
  • θ?=θ?ε\theta^{-} = \theta - \varepsilonθ?=θ?ε
  • J+=J(θ+)J^{+} = J(\theta^{+})J+=J(θ+)
  • J?=J(θ?)J^{-} = J(\theta^{-})J?=J(θ?)
  • gradapprox=J+?J?2εgradapprox = \frac{J^{+} - J^{-}}{2 \varepsilon}gradapprox=2εJ+?J??
    • 反向傳播,計算理論梯度 grad
    • 比較兩者誤差
      difference=∣∣grad?gradapprox∣∣2∣∣grad∣∣2+∣∣gradapprox∣∣2difference = \frac {\mid\mid grad - gradapprox \mid\mid_2}{\mid\mid grad \mid\mid_2 + \mid\mid gradapprox \mid\mid_2}difference=grad2?+gradapprox2?grad?gradapprox2??
    np.linalg.norm(...)
    • 檢查上式是否足夠小(10-7
    # GRADED FUNCTION: gradient_checkdef gradient_check(x, theta, epsilon = 1e-7):"""Implement the backward propagation presented in Figure 1.Arguments:x -- a real-valued inputtheta -- our parameter, a real number as wellepsilon -- tiny shift to the input to compute approximated gradient with formula(1)Returns:difference -- difference (2) between the approximated gradient and the backward propagation gradient"""# Compute gradapprox using left side of formula (1). epsilon is small enough, you don't need to worry about the limit.### START CODE HERE ### (approx. 5 lines)thetaplus = theta + epsilon # Step 1thetaminus = theta - epsilon # Step 2J_plus = forward_propagation(x, thetaplus) # Step 3J_minus = forward_propagation(x, thetaminus) # Step 4gradapprox = (J_plus - J_minus)/(2*epsilon) # Step 5### END CODE HERE #### Check if gradapprox is close enough to the output of backward_propagation()### START CODE HERE ### (approx. 1 line)grad = backward_propagation(x, theta)### END CODE HERE ###### START CODE HERE ### (approx. 1 line)numerator = np.linalg.norm(grad - gradapprox) # Step 1'denominator = np.linalg.norm(grad) + np.linalg.norm(gradapprox) # Step 2'difference = numerator/denominator # Step 3'### END CODE HERE ###if difference < 1e-7:print ("The gradient is correct!")else:print ("The gradient is wrong!")return difference

    2. 多維梯度檢驗

    def forward_propagation_n(X, Y, parameters):"""Implements the forward propagation (and computes the cost) presented in Figure 3.Arguments:X -- training set for m examplesY -- labels for m examples parameters -- python dictionary containing your parameters "W1", "b1", "W2", "b2", "W3", "b3":W1 -- weight matrix of shape (5, 4)b1 -- bias vector of shape (5, 1)W2 -- weight matrix of shape (3, 5)b2 -- bias vector of shape (3, 1)W3 -- weight matrix of shape (1, 3)b3 -- bias vector of shape (1, 1)Returns:cost -- the cost function (logistic cost for one example)"""# retrieve parametersm = X.shape[1]W1 = parameters["W1"]b1 = parameters["b1"]W2 = parameters["W2"]b2 = parameters["b2"]W3 = parameters["W3"]b3 = parameters["b3"]# LINEAR -> RELU -> LINEAR -> RELU -> LINEAR -> SIGMOIDZ1 = np.dot(W1, X) + b1A1 = relu(Z1)Z2 = np.dot(W2, A1) + b2A2 = relu(Z2)Z3 = np.dot(W3, A2) + b3A3 = sigmoid(Z3)# Costlogprobs = np.multiply(-np.log(A3),Y) + np.multiply(-np.log(1 - A3), 1 - Y)cost = 1./m * np.sum(logprobs)cache = (Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3)return cost, cache def backward_propagation_n(X, Y, cache):"""Implement the backward propagation presented in figure 2.Arguments:X -- input datapoint, of shape (input size, 1)Y -- true "label"cache -- cache output from forward_propagation_n()Returns:gradients -- A dictionary with the gradients of the cost with respect to each parameter, activation and pre-activation variables."""m = X.shape[1](Z1, A1, W1, b1, Z2, A2, W2, b2, Z3, A3, W3, b3) = cachedZ3 = A3 - YdW3 = 1./m * np.dot(dZ3, A2.T)db3 = 1./m * np.sum(dZ3, axis=1, keepdims = True)dA2 = np.dot(W3.T, dZ3)dZ2 = np.multiply(dA2, np.int64(A2 > 0))dW2 = 1./m * np.dot(dZ2, A1.T) * 2db2 = 1./m * np.sum(dZ2, axis=1, keepdims = True)dA1 = np.dot(W2.T, dZ2)dZ1 = np.multiply(dA1, np.int64(A1 > 0))dW1 = 1./m * np.dot(dZ1, X.T)db1 = 4./m * np.sum(dZ1, axis=1, keepdims = True)gradients = {"dZ3": dZ3, "dW3": dW3, "db3": db3,"dA2": dA2, "dZ2": dZ2, "dW2": dW2, "db2": db2,"dA1": dA1, "dZ1": dZ1, "dW1": dW1, "db1": db1}return gradients # GRADED FUNCTION: gradient_check_ndef gradient_check_n(parameters, gradients, X, Y, epsilon = 1e-7):"""Checks if backward_propagation_n computes correctly the gradient of the cost output by forward_propagation_nArguments:parameters -- python dictionary containing your parameters "W1", "b1", "W2", "b2", "W3", "b3":grad -- output of backward_propagation_n, contains gradients of the cost with respect to the parameters. x -- input datapoint, of shape (input size, 1)y -- true "label"epsilon -- tiny shift to the input to compute approximated gradient with formula(1)Returns:difference -- difference (2) between the approximated gradient and the backward propagation gradient"""# Set-up variablesparameters_values, _ = dictionary_to_vector(parameters)grad = gradients_to_vector(gradients)num_parameters = parameters_values.shape[0]J_plus = np.zeros((num_parameters, 1))J_minus = np.zeros((num_parameters, 1))gradapprox = np.zeros((num_parameters, 1))# Compute gradapproxfor i in range(num_parameters):# Compute J_plus[i]. Inputs: "parameters_values, epsilon". Output = "J_plus[i]".# "_" is used because the function you have to outputs two parameters but we only care about the first one### START CODE HERE ### (approx. 3 lines)thetaplus = np.copy(parameters_values) # Step 1thetaplus[i][0] = thetaplus[i][0] + epsilon # Step 2J_plus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaplus)) # Step 3### END CODE HERE #### Compute J_minus[i]. Inputs: "parameters_values, epsilon". Output = "J_minus[i]".### START CODE HERE ### (approx. 3 lines)thetaminus = np.copy(parameters_values) # Step 1thetaminus[i][0] = thetaminus[i][0] - epsilon # Step 2 J_minus[i], _ = forward_propagation_n(X, Y, vector_to_dictionary(thetaminus)) # Step 3### END CODE HERE #### Compute gradapprox[i]### START CODE HERE ### (approx. 1 line)gradapprox[i] = (J_plus[i] - J_minus[i])/(2*epsilon)### END CODE HERE #### Compare gradapprox to backward propagation gradients by computing difference.### START CODE HERE ### (approx. 1 line)numerator = np.linalg.norm(gradapprox - grad) # Step 1'denominator = np.linalg.norm(gradapprox)+np.linalg.norm(grad) # Step 2'difference = numerator/denominator # Step 3'### END CODE HERE ###if difference > 1e-7:print ("\033[93m" + "There is a mistake in the backward propagation! difference = " + str(difference) + "\033[0m")else:print ("\033[92m" + "Your backward propagation works perfectly fine! difference = " + str(difference) + "\033[0m")return difference
    • 老師給的 backward_propagation_n 函數里面有錯誤,嘗試去找到它。
    X, Y, parameters = gradient_check_n_test_case()cost, cache = forward_propagation_n(X, Y, parameters) gradients = backward_propagation_n(X, Y, cache) difference = gradient_check_n(parameters, gradients, X, Y) There is a mistake in the backward propagation! difference = 0.2850931567761624
    • 尋找錯誤
      db1 改成:db1 = 1./m * np.sum(dZ1, axis=1, keepdims = True)
      dW2 改成:dW2 = 1./m * np.dot(dZ2, A1.T)

    誤差下來了,但略微超過 10-7, 所以顯示錯誤,應該問題不大

    There is a mistake in the backward propagation! difference = 1.1890913023330276e-07

    注意:

    • 梯度檢驗非常慢,計算很耗時,所以我們訓練時,不運行梯度檢驗,只運行幾次檢查梯度是否正確
    • 梯度檢驗時,需要關掉 dropout

    我的CSDN博客地址 https://michael.blog.csdn.net/

    長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的02.改善深层神经网络:超参数调试、正则化以及优化 W1.深度学习的实践层面(作业:初始化+正则化+梯度检验)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    欧美,日韩 | www.久久com | 久久久久久黄 | 最近免费中文字幕mv在线视频3 | 婷婷电影在线观看 | 亚洲成人高清在线 | 手机在线观看国产精品 | 国产亲近乱来精品 | 婷婷视频导航 | www.五月天 | 成人一级片视频 | 久久影视一区 | 久久不卡视频 | 国产精品男女视频 | 国产精品久久久久久久久久免费看 | 国产999在线 | 国产精品99久久久久人中文网介绍 | 欧美一进一出抽搐大尺度视频 | 亚洲伦理一区二区 | 在线观看一二三区 | 国产精品久久久久久久久毛片 | 中文字幕在线观看国产 | 国产精品 中文在线 | 国模精品在线 | 久久最新视频 | 久久婷婷精品视频 | 日韩在线激情 | 在线观看网站黄 | 亚洲一级电影视频 | 婷婷网址| 国产综合久久 | 色噜噜在线观看 | 中文字幕在线中文 | 日韩高清观看 | 国产免费又爽又刺激在线观看 | 国产精品视频不卡 | 国产日韩精品一区二区三区在线 | 九九综合久久 | 国产精品爽爽久久久久久蜜臀 | 亚洲视频在线视频 | 久草视频资源 | 操久久网 | 一区二区三区四区五区在线 | 亚洲国产精品小视频 | 亚洲精品资源在线 | 麻豆手机在线 | 国产成人一区二区三区影院在线 | 香蕉视频国产在线 | 成人免费xxx在线观看 | 欧美日韩成人一区 | 国产免费视频一区二区裸体 | 在线免费观看欧美日韩 | 狠狠色丁香九九婷婷综合五月 | 看片的网址 | 激情视频二区 | 视频成人永久免费视频 | 国产精品黄色 | 国产精品一区二区三区在线免费观看 | 色偷偷88888欧美精品久久久 | 在线一级片| 国产系列在线观看 | 蜜臀av网址 | 亚洲国产久 | 激情五月在线 | 在线看日韩 | 中文字幕在线第一页 | av不卡在线看| 高清久久久 | 伊在线视频 | a'aaa级片在线观看 | 2018亚洲男人天堂 | 亚洲一区免费在线 | 黄色一级大片在线免费看国产一 | 激情欧美xxxx | av在线播放快速免费阴 | 国产一区精品在线观看 | 精品久久久亚洲 | 综合色综合 | 久久精品中文视频 | 超级碰视频 | 久久久久女教师免费一区 | 四虎在线免费 | 国产精品午夜在线观看 | 四虎在线永久免费观看 | 免费亚洲精品 | 福利视频网站 | 毛片无卡免费无播放器 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 麻豆视频免费在线观看 | 亚洲精品国产精品国自 | 99r在线精品 | 91视频观看免费 | 亚洲国产日韩在线 | 亚洲少妇xxxx | 亚洲精品资源 | 国产精品视频免费 | 亚洲精品视频在线免费播放 | 中文字幕文字幕一区二区 | 日本不卡一区二区三区在线观看 | 亚洲精品国产精品国自产观看浪潮 | 五月婷婷色综合 | 亚洲精品在线观看av | ww视频在线观看 | 最新国产精品亚洲 | 一区二区三区电影 | 黄色软件在线观看 | 欧美一级免费高清 | 欧美另类sm图片 | 九九99靖品 | 日韩性色 | 黄在线免费看 | 91免费观看国产 | 亚洲视频在线免费观看 | 国产一区二区三区免费在线观看 | 六月丁香婷| 国产在线视频导航 | 日韩视频免费观看高清完整版在线 | 日韩精品一区二区三区不卡 | 波多野结衣在线观看一区二区三区 | 国产最顶级的黄色片在线免费观看 | 日日麻批40分钟视频免费观看 | 美女很黄免费网站 | 人人澡人人添人人爽一区二区 | 久久狠狠婷婷 | 深爱婷婷久久综合 | 18国产精品福利片久久婷 | 久艹在线观看视频 | 尤物一区二区三区 | 天天激情综合网 | 久久涩视频 | 特级a毛片 | 亚洲国产高清在线观看视频 | 中文字幕在线视频网站 | 一级片免费在线 | 天天骚夜夜操 | 欧美欧美 | 成年人免费av网站 | 91精品黄色 | 国产91精品久久久久久 | 高清在线一区二区 | 中文字幕电影高清在线观看 | 婷婷激情影院 | 国产一级视频在线免费观看 | 97国产在线 | 日韩欧美一区二区三区视频 | 天天操天天综合网 | 欧美一二区视频 | 国产91精品一区二区绿帽 | 蜜桃av人人夜夜澡人人爽 | 国产精品尤物 | 天天鲁一鲁摸一摸爽一爽 | 中文字幕av免费观看 | 国产小视频在线看 | а天堂中文最新一区二区三区 | 五月婷婷六月丁香 | 丁香久久婷婷 | 久久在线看| 在线观看岛国av | 中文字幕在线久一本久 | 深爱婷婷| 91免费高清视频 | 成人精品影视 | 欧美人人爱 | 国产精品一区二区 91 | 免费在线观看一级片 | 国产精品久久久久婷婷二区次 | 奇米网444| 久操伊人 | 91一区啪爱嗯打偷拍欧美 | 中文字幕视频三区 | av中文字幕第一页 | 国产中出在线观看 | 伊人久久精品久久亚洲一区 | 不卡的av在线播放 | 欧美成人h版电影 | 国产日韩在线看 | 欧美在线观看视频一区二区三区 | 中文字幕在线视频一区二区 | 欧美精品黑人性xxxx | 人人添人人澡人人澡人人人爽 | 日日日视频 | 免费在线观看av的网站 | 日b黄色片 | 超碰97中文 | 国产精品久久久久久久久久久久午夜 | 激情综合网五月 | 狠狠狠狠狠狠天天爱 | 国产日韩中文字幕在线 | 国产婷婷精品av在线 | 91精品麻豆 | 婷婷久久网站 | 视频一区亚洲 | 国产视频久 | 国产麻豆视频在线观看 | 久久综合九色99 | 成年人免费在线 | 久久99精品国产91久久来源 | 欧美一区免费在线观看 | 热九九精品 | 亚洲一区二区视频在线播放 | 国产精品乱码久久久久久1区2区 | 激情五月开心 | 色一级片| 一区二区三区四区在线免费观看 | 国产精品午夜在线 | 久久免费大片 | 在线草 | 中文国产字幕在线观看 | 久久精品五月 | 久久五月激情 | 日韩首页 | 欧美日韩在线观看视频 | 国产亚洲精品女人久久久久久 | 日日夜夜天天操 | 久草视频免费 | 丁香五月亚洲综合在线 | 免费观看日韩av | 亚洲国产视频在线 | 久久久久久久久久免费 | 久久久久一区二区三区 | 国产一区自拍视频 | 国产精品国产亚洲精品看不卡15 | 在线免费观看黄色小说 | www黄在线 | 欧美日韩首页 | www.五月婷 | 国产一级片网站 | 国产精品久久久久久久久久尿 | 久久午夜影视 | 日韩精品首页 | 欧美日韩亚洲在线观看 | 成人av av在线 | 国产免费又爽又刺激在线观看 | 国产精品成久久久久三级 | 日韩精品视频在线免费观看 | 亚洲日本欧美 | 99 色| 日韩专区视频 | 99久久久国产精品美女 | 亚洲电影免费 | 久久久受www免费人成 | 日韩三区在线观看 | 精品视频国产 | 亚洲黄网站 | 国产在线专区 | 日韩免费一区 | 激情五月婷婷丁香 | 精品一区二区在线免费观看 | 欧美性做爰猛烈叫床潮 | 男女精品久久 | 99精品在线免费 | 久久综合天天 | 色婷五月天 | 日本午夜在线亚洲.国产 | 日韩 在线 | 激情图片久久 | 久久免费视频这里只有精品 | 国产成人一区二区啪在线观看 | 99久精品视频| 亚洲一区免费在线 | 国产淫a| 亚洲人视频在线 | 日韩欧美精品一区 | 日韩免费在线观看网站 | 最新精品视频在线 | 月丁香婷婷| 国产日韩精品一区二区在线观看播放 | 中文字幕永久在线 | 视频国产一区二区三区 | 久久国产精品成人免费浪潮 | 亚洲欧美日本国产 | 久草在线免费播放 | 日韩av进入 | 中文字幕一区二区三区四区 | 热久久免费视频精品 | 青草草在线视频 | 国产精品一区二区62 | 亚洲欧美日本一区二区三区 | 在线视频精品 | 国产在线精品视频 | 大型av综合网站 | 一色屋精品视频在线观看 | 国产区在线看 | 在线观看免费色 | 久久人人做 | 国产成人一区二 | 久久精品小视频 | 久日精品| 欧美二区在线播放 | 日韩经典一区二区三区 | 久久伦理 | 久久久久国产精品一区二区 | 国产欧美综合视频 | 婷婷色社区 | 久草资源免费 | 伊人伊成久久人综合网站 | 中文字幕 91| 福利精品在线 | 五月综合久久 | 免费福利在线观看 | 在线观看免费一区 | 黄色毛片一级片 | 超碰免费av | 久久免费精品国产 | 爱色av.com | 亚洲春色成人 | 日本公妇色中文字幕 | 日韩av一区二区在线影视 | 欧美 亚洲 另类 激情 另类 | 精品久久久久久久久久岛国gif | 久久久一本精品99久久精品66 | 最近av在线| av免费高清观看 | 一区二区不卡在线观看 | 在线观看91精品国产网站 | 久久综合九色综合网站 | 伊人激情网 | 日本不卡一区二区 | 黄色精品国产 | 日本女人的性生活视频 | 久久精品视频网 | 亚洲mv大片欧洲mv大片免费 | 亚洲永久精品在线 | 久久久久www | 九九视频免费观看视频精品 | 国产一区二区在线影院 | 国产精品黄网站在线观看 | 久久激情网站 | 久久成人高清视频 | 亚洲国产欧美一区二区三区丁香婷 | 中文字幕美女免费在线 | 日韩精品中文字幕一区二区 | 欧美日韩国产一二 | 日本大尺码专区mv | 亚洲精品视 | 天堂入口网站 | 日韩 在线观看 | 婷婷综合伊人 | 国产成人精品一区二区三区在线 | 国产乱对白刺激视频在线观看女王 | 精品国产一区二区三区久久久蜜月 | 久久久在线 | 正在播放国产一区二区 | 涩涩网站在线看 | 伊人五月 | 丁香六月综合网 | 99视频导航| 免费在线观看av网站 | 天堂av高清| 国产+日韩欧美 | 97色涩 | 97视频免费在线观看 | 区一区二在线 | 欧洲av在线 | 日韩欧美中文 | 国产超碰97 | 国产韩国日本高清视频 | 开心激情五月婷婷 | 成人午夜电影免费在线观看 | 91手机电视| 欧美性视频网站 | 丁香婷婷激情 | 在线免费观看黄色 | 欧美综合色 | 在线精品视频免费观看 | 狠狠干夜夜 | 国产高清视频在线播放一区 | 天天操夜操 | av导航福利| 国产日韩精品久久 | 国产日韩精品一区二区三区 | av怡红院 | 久久成视频 | 天天久久夜夜 | 在线观看午夜 | 免费人成在线观看网站 | 欧洲性视频 | 天天干天天干天天色 | 欧美日韩国产一区二区三区在线观看 | 91精品视频在线免费观看 | 国产视频在线观看一区 | 免费毛片一区二区三区久久久 | 国产精品va在线观看入 | 欧美日韩一区二区三区免费视频 | 91成人黄色 | 亚洲理论在线观看电影 | 成人av中文字幕在线观看 | 视频二区在线视频 | 欧美一区二区精品在线 | 日韩中文在线电影 | 丁香久久久 | 亚洲不卡av一区二区三区 | 97干com| 狠狠综合网 | 最近日本字幕mv免费观看在线 | 中文字幕资源在线 | 久草视频中文 | 91一区在线观看 | 超碰在线97免费 | 国产亚洲精品久久久久久移动网络 | 日韩成人精品 | 中文字幕视频一区 | 日韩高清无线码2023 | 99热在| 香蕉视频18 | 人人添人人澡 | 麻豆一精品传二传媒短视频 | 久久艹在线 | 国产 在线 日韩 | 911精品美国片911久久久 | 久久福利影视 | 99精品国产成人一区二区 | 国产黄色一级片 | 草久久久久久 | 人人爽人人澡人人添人人人人 | 免费在线色 | 99免费| 草在线 | 久久综合九色欧美综合狠狠 | 99视频在线免费看 | 色婷婷激情 | 91成人免费电影 | 欧美国产日韩一区二区三区 | 国产免费小视频 | 欧美韩国日本在线 | 97超碰.com| 欧美午夜一区二区福利视频 | 午夜精品视频福利 | 国产精品18久久久久久不卡孕妇 | www.天天射 | 国产精品久久久久久一区二区三区 | 久久天天躁夜夜躁狠狠躁2022 | 丝袜美腿av| 久久综合狠狠狠色97 | 国产亚洲精品久久久久久久久久 | 久草视频2| 日韩毛片在线一区二区毛片 | 香蕉91视频| 视频一区二区国产 | 国产亚洲午夜高清国产拍精品 | 麻豆传媒在线视频 | 五月天色综合 | 亚洲激情视频在线 | 日韩精品久久一区二区三区 | 国产一区二区三区免费观看视频 | 欧美日韩在线视频观看 | 中文字幕av免费在线观看 | 激情九九 | 久久久久麻豆 | aaawww | 国产区免费在线 | 五月婷婷综合在线视频 | 午夜国产在线观看 | 久草在线视频网 | 91大神精品视频在线观看 | 色先锋av资源中文字幕 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | www国产亚洲精品久久麻豆 | 国产精品一区二区视频 | 欧美日韩一区二区三区免费视频 | 久久夜色精品国产欧美一区麻豆 | 色婷婷综合久久久久中文字幕1 | 成人黄色电影在线观看 | 在线网站黄 | 国产精品黄网站在线观看 | 欧美成人一二区 | 精品96久久久久久中文字幕无 | 日本久久中文字幕 | 国产女做a爱免费视频 | 国产高清在线一区 | 九九久久国产 | 欧美韩日视频 | www久久精品 | av一级久久 | 美女国产 | 成人一级电影在线观看 | 天天干.com | 亚洲精品视 | 欧美久久久久久久久中文字幕 | 四虎国产永久在线精品 | 91精品播放 | 国产精品一区二区三区视频免费 | 日韩免费一二三区 | 久草久草久草久草 | www.五月婷婷| 久久视频在线观看免费 | 97超在线| 91cn国产在线| 精品主播网红福利资源观看 | 免费在线成人 | 久艹在线观看视频 | 又黄又爽的视频在线观看网站 | 夜夜夜| 日韩成人中文字幕 | 欧美日韩视频在线一区 | 国产伦精品一区二区三区高清 | 六月丁香婷 | 999视频精品 | 人人射 | 久久婷婷色 | 日韩三区在线观看 | 黄色成人av网址 | 久久久九色精品国产一区二区三区 | 国产精品久久久久久久久久久免费 | 欧美一区二区三区免费看 | 亚洲成人国产 | 精品黄色在线观看 | 中文字幕第一页av | 99国产精品免费网站 | 精品国产亚洲一区二区麻豆 | 日日夜夜天天 | 欧美一区二区三区特黄 | 99精品美女 | 国产97免费| 在线精品国产 | 手机看片 | 一区二区三区观看 | 久久久久免费精品 | 91丨porny丨九色 | 婷婷成人亚洲综合国产xv88 | 精品三级av | 天天射天天爽 | 99成人精品| 国产精品99久久久久 | 亚洲免费视频在线观看 | 麻豆视频国产在线观看 | 最近中文字幕mv | 婷婷六月久久 | 超碰免费成人 | 成人免费观看在线视频 | 日韩免费一区 | 91成年人网站 | www.com黄| 日韩一级片网址 | 97精品国产97久久久久久免费 | 久久精品国产一区二区 | 国产美女久久 | 国产精品久久婷婷六月丁香 | 日韩精品视频久久 | av网站手机在线观看 | 久久综合狠狠综合久久激情 | 国产91小视频 | 99精品视频在线播放免费 | 亚洲在线视频免费 | 久99视频 | 免费成人av在线看 | 国产精品欧美激情在线观看 | 激情自拍av | 91视频观看免费 | 亚洲成人午夜在线 | 免费观看一级成人毛片 | 美女久久久久久 | 亚洲一区二区高潮无套美女 | 一区二区三区四区在线 | 国产成人免费av电影 | 久久激情五月丁香伊人 | 国产专区一 | 久久久国产网站 | av免费播放| 91亚洲精 | 在线观看成人 | 亚洲va欧美va人人爽春色影视 | 亚洲国产97在线精品一区 | 婷婷色五| 久久99精品国产麻豆宅宅 | 成年人免费在线 | 久久久久久国产精品 | 在线综合 亚洲 欧美在线视频 | 国产成人在线观看免费 | 久久免费99 | 一区在线免费观看 | 一区二区精品视频 | 亚洲少妇天堂 | av网站免费线看精品 | 五月婷婷开心 | 精品一区 在线 | 日韩av不卡在线观看 | 日韩欧美视频二区 | 激情电影影院 | 96av视频 | 亚洲欧洲在线视频 | 国产日韩精品在线观看 | 亚洲狠狠丁香婷婷综合久久久 | 国产伦理一区二区三区 | 国产成人亚洲在线观看 | 久久电影中文字幕视频 | 香蕉日日 | 日韩专区一区二区 | 日日狠狠 | 国产精品久久久久久久久费观看 | 国产粉嫩在线 | 欧美日韩视频网站 | 久久婷婷视频 | 日韩欧美一区视频 | 久久av在线播放 | 九九免费在线观看 | 黄在线| 国产一区二区在线免费播放 | 99色在线| 国产精品理论片在线播放 | 日本黄网站 | 天天操夜夜摸 | 99久久精品午夜一区二区小说 | 国产中文字幕视频在线 | 99久热在线精品视频观看 | 精品在线亚洲视频 | 久久经典国产 | 成年人视频在线免费播放 | 麻豆国产精品永久免费视频 | 国产在线国偷精品产拍免费yy | 视频在线观看一区 | 中文字幕 国产精品 | 97色在线观看免费视频 | 美女视频国产 | 亚洲午夜电影网 | 99色人| www.五月天婷婷 | 91免费看黄 | 五月天婷婷综合 | 国产分类视频 | 亚洲国产成人精品在线 | 五月激情综合婷婷 | 天天躁日日躁狠狠躁av麻豆 | 最新在线你懂的 | 天天艹天天干天天 | 国产精品一区久久久久 | 天天干,天天射,天天操,天天摸 | 久久精品国产v日韩v亚洲 | 手机看片1042 | 天天操比 | 亚洲伦理一区 | 欧美精品网站 | 九九国产精品视频 | 麻豆视频免费 | 少妇bbw搡bbbb搡bbb | 在线日本看片免费人成视久网 | 国产一级二级视频 | 日本99精品 | 国产亚洲欧美日韩高清 | 国产综合激情 | 日韩av不卡播放 | 色网站在线免费 | 久久99免费 | 日韩av电影中文字幕在线观看 | 免费在线观看污 | 日韩精品在线免费观看 | 亚洲精品视频观看 | 欧美日韩一区二区三区视频 | 成人在线视频论坛 | 久久久久亚洲精品中文字幕 | 日韩不卡高清视频 | 久草新在线 | 激情在线网址 | 在线观看免费成人 | 国产精品久久视频 | 在线观看网站黄 | 99国内精品久久久久久久 | 日日夜夜精品免费视频 | 精品久久久久久综合日本 | 国产精品麻豆一区二区三区 | 欧美性生活大片 | 99国产精品视频免费观看一公开 | 免费亚洲精品 | 色五月色开心色婷婷色丁香 | 黄色大片网 | 久久视频这里有精品 | 成年人视频在线 | 国产又粗又猛又色 | 天天色综合天天 | 丁香六月婷 | 久久国产精品一区二区三区四区 | 亚洲最大av | 在线观看视频黄色 | 91视频88av | 日本最新一区二区三区 | 欧美一区二区三区不卡 | 日韩av高清在线观看 | 日本黄色免费电影网站 | 2019av在线视频 | 亚洲激情久久 | 国产美女精品视频 | 亚洲一级免费观看 | 久久久久在线观看 | 日韩午夜小视频 | 久久九九久久九九 | 国产精品二区在线 | 国产一区 在线播放 | 天天操伊人 | 91精品免费在线视频 | 黄色国产精品 | 在线观看国产中文字幕 | 玖草在线观看 | 成人av网站在线观看 | 精品在线观看一区二区 | 福利久久久 | 午夜精品久久久 | 久草观看视频 | 美女黄频免费 | 国产小视频在线观看免费 | 日韩午夜小视频 | 久久国产精品色av免费看 | 爱情影院aqdy鲁丝片二区 | 国产精品一区在线播放 | 99久久99久久精品 | 国产日韩精品一区二区三区 | 日韩最新中文字幕 | 中文免费 | 亚洲精品在线观看av | 又黄又爽又湿又无遮挡的在线视频 | 天天干天天操天天做 | 久久人人爽人人 | 黄色av电影免费观看 | 91在线麻豆 | 黄污在线看 | avav99| 五月天激情综合网 | 在线视频手机国产 | 国产免费一区二区三区网站免费 | 一区二区三区高清在线观看 | 超碰在线观看av.com | 超碰资源在线 | 午夜男人影院 | 亚州欧美视频 | 日韩在线免费观看视频 | 麻豆传媒视频在线播放 | 99热在线国产 | 久久视频国产精品免费视频在线 | av在线电影网站 | 亚洲一级片在线看 | 91最新视频在线观看 | 亚洲天堂网视频 | 精品女同一区二区三区在线观看 | 99性视频| 中文字幕久久久精品 | 91在线视频免费91 | 国产高清在线观看av | 在线看片一区 | 色婷婷av一区二 | 久久精品电影 | 一级黄色片毛片 | 99久久日韩精品视频免费在线观看 | 日本久久久亚洲精品 | 欧美黑人性爽 | 91成人午夜| 狠狠操夜夜操 | 99av国产精品欲麻豆 | 五月丁婷婷| 亚洲精品乱码久久久久久9色 | www178ccom视频在线 | 欧美日韩亚洲在线 | 婷婷av网| 国产免费av一区二区三区 | 国产尤物在线视频 | 欧美孕妇与黑人孕交 | 国产最新在线 | 久久久蜜桃一区二区 | 国产精品日韩欧美一区二区 | 日韩丝袜在线观看 | 国产亚洲成人网 | 久草在线免费资源站 | 91精品国产成人www | 天天操天天摸天天射 | 在线观看视频日韩 | 亚洲综合色站 | 国产午夜三级一区二区三 | 午夜视频在线观看一区二区三区 | 一区二区不卡高清 | 国产精品一区在线观看你懂的 | 国产精品久久久久久久久久新婚 | 麻豆国产视频 | 久久成人国产精品入口 | 精品在线观看视频 | 久久免费激情视频 | 亚洲 欧美 日韩 综合 | 中文字幕亚洲综合久久五月天色无吗'' | 在线中文字幕观看 | 综合在线观看 | 亚洲国产中文字幕 | 97国产大学生情侣酒店的特点 | 天天干天天操人体 | 男女拍拍免费视频 | 亚洲国产剧情av | 日韩剧情 | 久久视频| 久久69精品久久久久久久电影好 | 狠狠色丁香婷婷综合久小说久 | 久久香蕉国产 | 亚洲国产精品一区二区尤物区 | 国产99久久精品一区二区永久免费 | 日本中文在线 | 午夜丰满寂寞少妇精品 | 国产精品成人久久久 | 懂色av一区二区在线播放 | 久久亚洲热 | 日本黄网站| 在线色亚洲 | 欧美日韩久久久 | 欧美一区在线观看视频 | 在线免费黄网站 | 久久久久婷 | 日韩精品中文字幕av | 91高清视频 | 91香蕉视频720p | 国产在线一卡 | 91精品视频一区二区三区 | 国产精品一区二区 91 | 国产精品乱码久久久久久1区2区 | 国产成人高清av | 一级全黄毛片 | 伊人久久精品久久亚洲一区 | 国产一级视频在线观看 | 中文一区在线观看 | 亚洲精品婷婷 | 午夜精品久久一牛影视 | 中文字幕高清在线 | 久久成年人 | 国产91精品在线观看 | 国内精品久久久久影院男同志 | 一区二区三区在线免费播放 | 中文字幕 在线看 | 日韩美女免费线视频 | 97视频人人| 国产永久免费观看 | 国产精品一区二区三区免费视频 | 粉嫩av一区二区三区入口 | 最新不卡av | 视频福利在线 | 九九久久在线看 | 免费高清在线视频一区· | 精品国产一区二区三区噜噜噜 | 日本韩国精品在线 | 成人免费观看视频大全 | 成人在线观看资源 | 亚洲一区美女视频在线观看免费 | 免费试看一区 | 国产精品资源 | 一区二区三区在线播放 | 久久狠狠干 | 久久九九久久精品 | 精品国产一区二区三区噜噜噜 | 天堂中文在线播放 | 中文字幕免费在线 | 999国产精品视频 | av大全在线播放 | 深爱激情五月综合 | 欧美精品久久久久性色 | 国产一区电影在线观看 | 国产精品久久久久久久久久久久久久 | 久久婷婷亚洲 | 免费观看完整版无人区 | 自拍超碰在线 | 91精品国产福利在线观看 | 国产精品久久久久久a | 九色在线视频 | 国内丰满少妇猛烈精品播放 | 色综合久久88色综合天天 | 欧美日韩精品在线免费观看 | 99久久99久久精品免费 | 成人永久免费 | 91在线网址 | 国产精美视频 | 最近最新中文字幕 | 亚洲少妇久久 | 日本中文在线 | 日韩欧美视频一区二区 | 香蕉久久久久 | 国产毛片久久 | 日韩 国产 | 久久精品欧美一 | 久久免费播放视频 | 中文字幕中文字幕中文字幕 | 精品一二三四在线 | 岛国av在线免费 | 色小说av | 国产在线精品观看 | 亚洲激情在线视频 | 久久夜色精品国产欧美一区麻豆 | 国产精品久久久久一区 | 亚洲97在线 | 国产黄色av | 天天干天天在线 | 国产美女在线免费观看 | 日韩大片在线播放 | 韩国精品一区二区三区六区色诱 | 色婷婷啪啪免费在线电影观看 | 97香蕉视频| 99热在线国产 | 国产精品免费视频观看 | 久久99中文字幕 | 国产破处在线视频 | 97精品久久人人爽人人爽 | 久久99久久精品国产 | 日韩免费在线观看网站 | 国产对白av | 最近能播放的中文字幕 | 狠狠操影视 | 一级黄毛片| 久久久久观看 | 亚洲欧美视频在线观看 | 国产69精品久久久久久 | 伊人色播| 美女国产| 91视频在线免费看 | 国产在线理论片 | 国产亚洲资源 | 91麻豆看国产在线紧急地址 | 欧美日韩性视频在线 | 久久99亚洲网美利坚合众国 | 国产精品91一区 | 99精品毛片 | 中文字幕在线免费 | 成人黄色毛片 | 国产一区免费看 | 久久精品视频国产 | 免费看黄色小说的网站 | 中文久草 | 国产成人精品一区二 | 国产精品亚洲综合久久 | 亚洲精品国产成人 | 精品自拍sae8—视频 | 99人成在线观看视频 | 久久99国产精品二区护士 | 中文字幕在线观看第一区 | 亚洲影视资源 | www.夜夜操| 91视频传媒 | 中文字幕在线免费播放 | 91天天视频 | 九色91福利 | 久久五月天综合 | 国产精品嫩草在线 | 视频精品一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 91精品一区在线观看 | 免费观看一级成人毛片 | 四虎影视精品永久在线观看 | 国产成人免费观看久久久 | 波多野结衣在线视频免费观看 | 久久精品香蕉视频 | 碰碰影院 | 一区二区三区四区精品 | 奇米先锋 | 一区二区三区不卡在线 | 999久久| 久久99爱视频 | 国产精品视频永久免费播放 | 国产精品欧美久久久久无广告 | 日批视频国产 | 黄色在线观看网站 | 美女视频永久黄网站免费观看国产 | 亚洲欧美视频在线播放 | 国产精品高清在线 | 福利一区在线 | 精品久久久久久久久久久久 | 黄色软件在线看 | 97超碰福利久久精品 | 日韩视频免费观看高清完整版在线 | 久久精品国产精品亚洲精品 | 成人网444ppp| 日韩黄色在线观看 | 综合五月| av在线进入 | 日韩一区在线免费观看 | 99国内精品久久久久久久 | 国产视频手机在线 | 天天射天天拍 | 97色涩 | 日韩欧美v | 欧美激情视频免费看 | 91av片 | 黄色一级大片免费看 | 久久久久一区二区三区 | 成人久久18免费网站 | 日韩黄色一级电影 | 国产最新福利 | 日日天天av | 五月天久久久 | 亚洲精品免费观看 | 美女福利视频在线 | 丁香激情婷婷 | 五月天av在线 | 亚洲精品456在线播放乱码 | 夜夜干夜夜 | 国产不卡视频在线 | 婷婷久操 | 久久免费大片 | 人人插人人艹 | 国产免费一区二区三区最新6 | 国产毛片久久 | 精品国产aⅴ一区二区三区 在线直播av | 99精品视频精品精品视频 | 国产理论一区二区三区 | 久久久久久久网站 | 视频 天天草 | 女人高潮特级毛片 | 国产黄a三级三级三级三级三级 | 69国产盗摄一区二区三区五区 | 欧美精品在线观看免费 |