精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡AlexNet

人工智能 深度學習 開發(fā)工具
上周我們用PaddlePaddle和Tensorflow實現了圖像分類,分別用自己手寫的一個簡單的CNN網絡simple_cnn和LeNet-5的CNN網絡識別cifar-10數據集。

上周我們用PaddlePaddle和Tensorflow實現了圖像分類,分別用自己手寫的一個簡單的CNN網絡simple_cnn和LeNet-5的CNN網絡識別cifar-10數據集。在上周的實驗表現中,經過200次迭代后的LeNet-5的準確率為60%左右,這個結果差強人意,畢竟是二十年前寫的網絡結構,結果簡單,層數也很少,這一節(jié)中我們講講在2012年的Image比賽中大放異彩的AlexNet,并用AlexNet對cifar-10數據進行分類,對比上周的LeNet-5的效果。


什么是AlexNet?

   AlexNet在ILSVRC-2012的比賽中獲得top5錯誤率15.3%的突破(第二名為26.2%),其原理來源于2012年Alex的論文《ImageNet Classification with Deep Convolutional Neural Networks》,這篇論文是深度學習火爆發(fā)展的一個里程碑和分水嶺,加上硬件技術的發(fā)展,深度學習還會繼續(xù)火下去。

 


AlexNet網絡結構

  由于受限于當時的硬件設備,AlexNet在GPU粒度都做了設計,當時的GTX 580只有3G顯存,為了能讓模型在大量數據上跑起來,作者使用了兩個GPU并行,并對網絡結構做了切分,如下:

 

網絡結構

Input輸入層

輸入為224×224×3的三通道RGB圖像,為方便后續(xù)計算,實際操作中通過padding做預處理,把圖像變成227×227×3。

C1卷積層

該層由:卷積操作 + Max Pooling + LRN(后面詳細介紹它)組成。 

  • 卷積層:由96個feature map組成,每個feature map由11×11卷積核在stride=4下生成,輸出feature map為55×55×48×2,其中55=(227-11)/4+1,48為分在每個GPU上的feature map數,2為GPU個數; 
  • 激活函數:采用ReLU; 
  • Max Pooling:采用stride=2且核大小為3×3(文中實驗表明采用2×2的非重疊模式的Max Pooling相對更容易過擬合,在top 1和top 5下的錯誤率分別高0.4%和0.3%),輸出feature map為27×27×48×2,其中27=(55-3)/2+1,48為分在每個GPU上的feature map數,2為GPU個數; 
  • LRN:鄰居數設置為5做歸一化。 

最終輸出數據為歸一化后的:27×27×48×2。 

C2卷積層

該層由:卷積操作 + Max Pooling + LRN組成 

  • 卷積層:由256個feature map組成,每個feature map由5×5卷積核在stride=1下生成,為使輸入和卷積輸出大小一致,需要做參數為2的padding,輸出feature map為27×27×128×2,其中27=(27-5+2×2)/1+1,128為分在每個GPU上的feature map數,2為GPU個數; 
  • 激活函數:采用ReLU; 
  • Max Pooling:采用stride=2且核大小為3×3,輸出feature map為13×13×128×2,其中13=(27-3)/2+1,128為分在每個GPU上的feature map數,2為GPU個數; 
  • LRN:鄰居數設置為5做歸一化。 

最終輸出數據為歸一化后的:13×13×128×2。

C3卷積層

該層由:卷積操作 + LRN組成(注意,沒有Pooling層) 

  • 輸入為13×13×256,因為這一層兩個GPU會做通信(途中虛線交叉部分) 
  • 卷積層:之后由384個feature map組成,每個feature map由3×3卷積核在stride=1下生成,為使輸入和卷積輸出大小一致,需要做參數為1的padding,輸出feature map為13×13×192×2,其中13=(13-3+2×1)/1+1,192為分在每個GPU上的feature map數,2為GPU個數; 
  • 激活函數:采用ReLU; 

最終輸出數據為歸一化后的:13×13×192×2。

C4卷積層

該層由:卷積操作 + LRN組成(注意,沒有Pooling層) 

  • 卷積層:由384個feature map組成,每個feature map由3×3卷積核在stride=1下生成,為使輸入和卷積輸出大小一致,需要做參數為1的padding,輸出feature map為13×13×192×2,其中13=(13-3+2×1)/1+1,192為分在每個GPU上的feature map數,2為GPU個數; 
  • 激活函數:采用ReLU; 

最終輸出數據為歸一化后的:13×13×192×2。

C5卷積層

該層由:卷積操作 + Max Pooling組成 

  • 卷積層:由256個feature map組成,每個feature map由3×3卷積核在stride=1下生成,為使輸入和卷積輸出大小一致,需要做參數為1的padding,輸出feature map為13×13×128×2,其中13=(13-3+2×1)/1+1,128為分在每個GPU上的feature map數,2為GPU個數; 
  • 激活函數:采用ReLU; 
  • Max Pooling:采用stride=2且核大小為3×3,輸出feature map為6×6×128×2,其中6=(13-3)/2+1,128為分在每個GPU上的feature map數,2為GPU個數. 

最終輸出數據為歸一化后的:6×6×128×2。

F6全連接層

該層為全連接層 + Dropout 

  • 使用4096個節(jié)點; 
  • 激活函數:采用ReLU; 
  • 采用參數為0.5的Dropout操作 

最終輸出數據為4096個神經元節(jié)點。

F7全連接層

該層為全連接層 + Dropout 

  • 使用4096個節(jié)點; 
  • 激活函數:采用ReLU; 
  • 采用參數為0.5的Dropout操作 

最終輸出為4096個神經元節(jié)點。

輸出層

該層為全連接層 + Softmax 

  • 使用1000個輸出的Softmax 

最終輸出為1000個分類。

 


 AlexNet的優(yōu)勢

1. 使用了ReLu激活函數

  ----原始Relu-----

  AlexNet引入了ReLU激活函數,這個函數是神經科學家Dayan、Abott在《Theoretical Neuroscience》一書中提出的更精確的激活模型。原始的Relu激活函數(可參見 Hinton論文:《Rectified Linear Units Improve Restricted Boltzmann Machines》)我們比較熟悉,即max(0,x)max(0,x),這個激活函數把負激活全部清零(模擬上面提到的稀疏性),這種做法在實踐中即保留了神經網絡的非線性能力,又加快了訓練速度。 
但是這個函數也有缺點:

  • 在原點不可微 
    反向傳播的梯度計算中會帶來麻煩,所以Charles Dugas等人又提出Softplus來模擬上述ReLu函數(可視作其平滑版): 
f(x)=log(1+ex)f(x)=log(1+ex)

         實際上它的導數就是一個

f(x)=11+ex(1)(1)f′(x)=11+e−x
  • 過稀疏性 

    當學習率設置不合理時,即使是一個很大的梯度,在經過ReLu單元并更新參數后該神經元可能永不被激活。

    ----Leaky ReLu---- 

  為了解決上述過稀疏性導致的大量神經元不被激活的問題,Leaky ReLu被提了出來:  

 

f(x)={ax(x<0)x(x>=0)(2)(2)f(x)={ax(x<0)x(x>=0)

 

   其中αα是人工制定的較小值(如:0.1),它一定程度保留了負激活信息。

  還有很多其他的對于ReLu函數的改進,如Parametric ReLu,Randomized ReLu等,此處就不再展開講了。

 

2. Local Response Normalization 局部響應均值

  LRN利用相鄰feature map做特征顯著化,文中實驗表明可以降低錯誤率,公式如下:

bix,y=aix,y(k+αmin(N1,i+n/2)j=max(0,in/2)(aix,y)2)βbx,yi=ax,yi(k+α⋅∑j=max(0,i−n/2)min(N−1,i+n/2)(ax,yi)2)β

  公式的直觀解釋如下:

 

  由于 αα都是經過了RELU的輸出,所以一定是大于0的,函數1(k+αx2)β1(k+α∑x2)β,取文中參數的圖像如下(橫坐標為x2∑x2):

 

 

  • x2∑x2值較小時,即當前節(jié)點和其鄰居節(jié)點輸出值差距不明顯且大家的輸出值都不太大,可以認為此時特征間競爭激烈,該函數可以使原本差距不大的輸出產生顯著性差異且此時函數輸出不飽和
  • x2∑x2 值較大時,說明特征本身有顯著性差別但輸出值太大容易過擬合,該函數可以令最終輸出接近0從而緩解過擬合提高了模型泛化性。

3. Dropout

  Dropout是文章亮點之一,屬于提高模型泛化性的方法,操作比較簡單,以一定概率隨機讓某些神經元輸出設置為0,既不參與前向傳播也不參與反向傳播,也可以從正則化角度去看待它。(關于深度學習的正則化年初的時候在公司做過一個分享,下次直接把pdf放出來)

  從模型集成的角度來看:

  

  無Dropout網絡: 

Yn=WnXn1Yn=WnXn−1

Xn=F(Yn)Xn=F(Yn)

  有Dropout網絡:

Yn=WnXn1Yn=WnXn−1

dn1Bernoulli(p)dn−1∼Bernoulli(p)

Xn=dn1F(Yn)Xn=dn−1⊙F(Yn)

   其中pp為Dropout的概率(如p=0.5,即讓50%的神經元隨機失活),nn為所在的層。

  它是極端情況下的Bagging,由于在每步訓練中,神經元會以某種概率隨機被置為無效,相當于是參數共享的新網絡結構,每個模型為了使損失降低會盡可能學最“本質”的特征,“本質”可以理解為由更加獨立的、和其他神經元相關性弱的、泛化能力強的神經元提取出來的特征;而如果采用類似SGD的方式訓練,每步迭代都會選取不同的數據集,這樣整個網絡相當于是用不同數據集學習的多個模型的集成組合。

 


用PaddlePaddle實現AlexNet

1. 網絡結構(alexnet.py)

  這次我寫了兩個alextnet,一個加上了局部均值歸一化LRN,一個沒有加LRN,對比效果如何

 1 #coding:utf-8
 2 '''
 3 Created by huxiaoman 2017.12.5
 4 alexnet.py:alexnet網絡結構
 5 '''
 6 
 7 import paddle.v2 as paddle
 8 import os
 9 
10 with_gpu = os.getenv('WITH_GPU', '0') != '1'
11 
12 def alexnet_lrn(img):
13     conv1 = paddle.layer.img_conv(
14         input=img,
15         filter_size=11,
16         num_channels=3,
17         num_filters=96,
18         stride=4,
19         padding=1)
20     cmrnorm1 = paddle.layer.img_cmrnorm(
21         input=conv1, size=5, scale=0.0001, power=0.75)
22     pool1 = paddle.layer.img_pool(input=cmrnorm1, pool_size=3, stride=2)
23 
24     conv2 = paddle.layer.img_conv(
25         input=pool1,
26         filter_size=5,
27         num_filters=256,
28         stride=1,
29         padding=2,
30         groups=1)
31     cmrnorm2 = paddle.layer.img_cmrnorm(
32         input=conv2, size=5, scale=0.0001, power=0.75)
33     pool2 = paddle.layer.img_pool(input=cmrnorm2, pool_size=3, stride=2)
34 
35     pool3 = paddle.networks.img_conv_group(
36         input=pool2,
37         pool_size=3,
38         pool_stride=2,
39         conv_num_filter=[384, 384, 256],
40         conv_filter_size=3,
41         pool_type=paddle.pooling.Max())
42 
43     fc1 = paddle.layer.fc(
44         input=pool3,
45         size=4096,
46         act=paddle.activation.Relu(),
47         layer_attr=paddle.attr.Extra(drop_rate=0.5))
48     fc2 = paddle.layer.fc(
49         input=fc1,
50         size=4096,
51         act=paddle.activation.Relu(),
52         layer_attr=paddle.attr.Extra(drop_rate=0.5))
53     return fc2
54 
55 def alexnet(img):
56     conv1 = paddle.layer.img_conv(
57         input=img,
58         filter_size=11,
59         num_channels=3,
60         num_filters=96,
61         stride=4,
62         padding=1)
63     cmrnorm1 = paddle.layer.img_cmrnorm(
64         input=conv1, size=5, scale=0.0001, power=0.75)
65     pool1 = paddle.layer.img_pool(input=cmrnorm1, pool_size=3, stride=2)
66 
67     conv2 = paddle.layer.img_conv(
68         input=pool1,
69         filter_size=5,
70         num_filters=256,
71         stride=1,
72         padding=2,
73         groups=1)
74     cmrnorm2 = paddle.layer.img_cmrnorm(
75         input=conv2, size=5, scale=0.0001, power=0.75)
76     pool2 = paddle.layer.img_pool(input=cmrnorm2, pool_size=3, stride=2)
77 
78     pool3 = paddle.networks.img_conv_group(
79         input=pool2,
80         pool_size=3,
81         pool_stride=2,
82         conv_num_filter=[384, 384, 256],
83         conv_filter_size=3,
84         pool_type=paddle.pooling.Max())
85 
86     fc1 = paddle.layer.fc(
87         input=pool3,
88         size=4096,
89         act=paddle.activation.Relu(),
90         layer_attr=paddle.attr.Extra(drop_rate=0.5))
91     fc2 = paddle.layer.fc(
92         input=fc1,
93         size=4096,
94         act=paddle.activation.Relu(),
95         layer_attr=paddle.attr.Extra(drop_rate=0.5))
96     return fc3

 

2.訓練代碼(train_alexnet.py

 
  1 #coding:utf-8
  2 '''
  3 Created by huxiaoman 2017.12.5
  4 train_alexnet.py:訓練alexnet對cifar10數據集進行分類
  5 '''
  6 
  7 import sys, os
  8 import paddle.v2 as paddle
  9 
 10 #alex模型為不帶LRN的
 11 from alexnet import alexnet
 12 #alexnet_lrn為帶有l(wèi)rn的
 13 #from alextnet import alexnet_lrn
 14 with_gpu = os.getenv('WITH_GPU', '0') != '1'
 15 
 16 
 17 def main():
 18     datadim = 3 * 32 * 32
 19     classdim = 10
 20 
 21     # PaddlePaddle init
 22     paddle.init(use_gpu=with_gpu, trainer_count=7)
 23 
 24     image = paddle.layer.data(
 25         name="image", type=paddle.data_type.dense_vector(datadim))
 26 
 27     # Add neural network config
 28     # option 1. resnet
 29     # net = resnet_cifar10(image, depth=32)
 30     # option 2. vgg
 31     #net = alexnet_lrn(image)
 32     net = alexnet(image)
 33     out = paddle.layer.fc(
 34         input=net, size=classdim, act=paddle.activation.Softmax())
 35 
 36     lbl = paddle.layer.data(
 37         name="label", type=paddle.data_type.integer_value(classdim))
 38     cost = paddle.layer.classification_cost(input=out, label=lbl)
 39 
 40     # Create parameters
 41     parameters = paddle.parameters.create(cost)
 42 
 43     # Create optimizer
 44     momentum_optimizer = paddle.optimizer.Momentum(
 45         momentum=0.9,
 46         regularization=paddle.optimizer.L2Regularization(rate=0.0002 * 128),
 47         learning_rate=0.1 / 128.0,
 48         learning_rate_decay_a=0.1,
 49         learning_rate_decay_b=50000 * 100,
 50         learning_rate_schedule='discexp')
 51 
 52     # End batch and end pass event handler
 53     def event_handler(event):
 54         if isinstance(event, paddle.event.EndIteration):
 55             if event.batch_id % 100 == 0:
 56                 print "\nPass %d, Batch %d, Cost %f, %s" % (
 57                     event.pass_id, event.batch_id, event.cost, event.metrics)
 58             else:
 59                 sys.stdout.write('.')
 60                 sys.stdout.flush()
 61         if isinstance(event, paddle.event.EndPass):
 62             # save parameters
 63             with open('params_pass_%d.tar' % event.pass_id, 'w') as f:
 64                 parameters.to_tar(f)
 65 
 66             result = trainer.test(
 67                 reader=paddle.batch(
 68                     paddle.dataset.cifar.test10(), batch_size=128),
 69                 feeding={'image': 0,
 70                          'label': 1})
 71             print "\nTest with Pass %d, %s" % (event.pass_id, result.metrics)
 72 
 73     # Create trainer
 74     trainer = paddle.trainer.SGD(
 75         cost=cost, parameters=parameters, update_equation=momentum_optimizer)
 76 
 77     # Save the inference topology to protobuf.
 78     inference_topology = paddle.topology.Topology(layers=out)
 79     with open("inference_topology.pkl", 'wb') as f:
 80         inference_topology.serialize_for_inference(f)
 81 
 82     trainer.train(
 83         reader=paddle.batch(
 84             paddle.reader.shuffle(
 85                 paddle.dataset.cifar.train10(), buf_size=50000),
 86             batch_size=128),
 87         num_passes=200,
 88         event_handler=event_handler,
 89         feeding={'image': 0,
 90                  'label': 1})
 91 
 92     # inference
 93     from PIL import Image
 94     import numpy as np
 95     import os
 96 
 97     def load_image(file):
 98         im = Image.open(file)
 99         im = im.resize((32, 32), Image.ANTIALIAS)
100         im = np.array(im).astype(np.float32)
101         im = im.transpose((2, 0, 1))  # CHW
102         im = im[(2, 1, 0), :, :]  # BGR
103         im = im.flatten()
104         im = im / 255.0
105         return im
106 
107     test_data = []
108     cur_dir = os.path.dirname(os.path.realpath(__file__))
109     test_data.append((load_image(cur_dir + '/image/dog.png'), ))
110 
111     probs = paddle.infer(
112         output_layer=out, parameters=parameters, input=test_data)
113     lab = np.argsort(-probs)  # probs and lab are the results of one batch data
114     print "Label of image/dog.png is: %d" % lab[0][0]
115 
116 
117 if __name__ == '__main__':
118     main()
 

用Tensorflow實現AlexNet

1. 網絡結構

 
  1 def inference(images):
  2   '''
  3   Alexnet模型
  4   輸入:images的tensor
  5   返回:Alexnet的最后一層卷積層
  6   '''
  7   parameters = []
  8   # conv1
  9   with tf.name_scope('conv1') as scope:
 10     kernel = tf.Variable(tf.truncated_normal([11, 11, 3, 64], dtype=tf.float32,
 11                                              stddev=1e-1), name='weights')
 12     conv = tf.nn.conv2d(images, kernel, [1, 4, 4, 1], padding='SAME')
 13     biases = tf.Variable(tf.constant(0.0, shape=[64], dtype=tf.float32),
 14                          trainable=True, name='biases')
 15     bias = tf.nn.bias_add(conv, biases)
 16     conv1 = tf.nn.relu(bias, name=scope)
 17     print_activations(conv1)
 18     parameters += [kernel, biases]
 19 
 20   # lrn1
 21   with tf.name_scope('lrn1') as scope:
 22     lrn1 = tf.nn.local_response_normalization(conv1,
 23                                               alpha=1e-4,
 24                                               beta=0.75,
 25                                               depth_radius=2,
 26                                               bias=2.0)
 27 
 28   # pool1
 29   pool1 = tf.nn.max_pool(lrn1,
 30                          ksize=[1, 3, 3, 1],
 31                          strides=[1, 2, 2, 1],
 32                          padding='VALID',
 33                          name='pool1')
 34   print_activations(pool1)
 35 
 36   # conv2
 37   with tf.name_scope('conv2') as scope:
 38     kernel = tf.Variable(tf.truncated_normal([5, 5, 64, 192], dtype=tf.float32,
 39                                              stddev=1e-1), name='weights')
 40     conv = tf.nn.conv2d(pool1, kernel, [1, 1, 1, 1], padding='SAME')
 41     biases = tf.Variable(tf.constant(0.0, shape=[192], dtype=tf.float32),
 42                          trainable=True, name='biases')
 43     bias = tf.nn.bias_add(conv, biases)
 44     conv2 = tf.nn.relu(bias, name=scope)
 45     parameters += [kernel, biases]
 46   print_activations(conv2)
 47 
 48   # lrn2
 49   with tf.name_scope('lrn2') as scope:
 50     lrn2 = tf.nn.local_response_normalization(conv2,
 51                                               alpha=1e-4,
 52                                               beta=0.75,
 53                                               depth_radius=2,
 54                                               bias=2.0)
 55 
 56   # pool2
 57   pool2 = tf.nn.max_pool(lrn2,
 58                          ksize=[1, 3, 3, 1],
 59                          strides=[1, 2, 2, 1],
 60                          padding='VALID',
 61                          name='pool2')
 62   print_activations(pool2)
 63 
 64   # conv3
 65   with tf.name_scope('conv3') as scope:
 66     kernel = tf.Variable(tf.truncated_normal([3, 3, 192, 384],
 67                                              dtype=tf.float32,
 68                                              stddev=1e-1), name='weights')
 69     conv = tf.nn.conv2d(pool2, kernel, [1, 1, 1, 1], padding='SAME')
 70     biases = tf.Variable(tf.constant(0.0, shape=[384], dtype=tf.float32),
 71                          trainable=True, name='biases')
 72     bias = tf.nn.bias_add(conv, biases)
 73     conv3 = tf.nn.relu(bias, name=scope)
 74     parameters += [kernel, biases]
 75     print_activations(conv3)
 76 
 77   # conv4
 78   with tf.name_scope('conv4') as scope:
 79     kernel = tf.Variable(tf.truncated_normal([3, 3, 384, 256],
 80                                              dtype=tf.float32,
 81                                              stddev=1e-1), name='weights')
 82     conv = tf.nn.conv2d(conv3, kernel, [1, 1, 1, 1], padding='SAME')
 83     biases = tf.Variable(tf.constant(0.0, shape=[256], dtype=tf.float32),
 84                          trainable=True, name='biases')
 85     bias = tf.nn.bias_add(conv, biases)
 86     conv4 = tf.nn.relu(bias, name=scope)
 87     parameters += [kernel, biases]
 88     print_activations(conv4)
 89 
 90   # conv5
 91   with tf.name_scope('conv5') as scope:
 92     kernel = tf.Variable(tf.truncated_normal([3, 3, 256, 256],
 93                                              dtype=tf.float32,
 94                                              stddev=1e-1), name='weights')
 95     conv = tf.nn.conv2d(conv4, kernel, [1, 1, 1, 1], padding='SAME')
 96     biases = tf.Variable(tf.constant(0.0, shape=[256], dtype=tf.float32),
 97                          trainable=True, name='biases')
 98     bias = tf.nn.bias_add(conv, biases)
 99     conv5 = tf.nn.relu(bias, name=scope)
100     parameters += [kernel, biases]
101     print_activations(conv5)
102 
103   # pool5
104   pool5 = tf.nn.max_pool(conv5,
105                          ksize=[1, 3, 3, 1],
106                          strides=[1, 2, 2, 1],
107                          padding='VALID',
108                          name='pool5')
109   print_activations(pool5)
110 
111   return pool5, parameters

 

  完整代碼可見:alexnet_tf.py 

 


實驗結果對比

  三個代碼跑完后,對比了一下實驗結果,如圖所示:

 

  可以看到,在batch_size,num_epochs,devices和thread數都相同的條件下,加了LRN的paddlepaddle版的alexnet網絡結果效果最好,而時間最短的是不加LRN的alexnet,在時間和精度上都比較平均的是tensorflow版的alexnet,當然,tf版的同樣加了LRN,所以LRN對于實驗效果還是有一定提升的。

 


總結

  AlexNet在圖像分類中是一個比較重要的網絡,在學習的過程中不僅要學會寫網絡結構,知道每一層的結構,更重要的是得知道為什么要這樣設計,這樣設計有什么好處,如果對某些參數進行一些調整結果會有什么變化?為什么會產生這樣的變化。在實際應用中,如果需要對網絡結構做一些調整,應該如何調整使得網絡更適合我們的實際數據?這些才是我們關心的。也是面試中常常會考察的點。昨天面試了一位工作五年的算法工程師,問道他在項目中用的模型是alexnet,對于alexnet的網絡結構并不是非常清楚,如果要改網絡結構也不知道如何改,這樣其實不好,僅僅把模型跑通只是第一步,后續(xù)還有很多工作要做,這也是作為算法工程師的價值體現之一。本文對于alexnet的網絡結構參考我之前的領導寫的文章,如過有什么不懂的可以留言。

 

 ps:為了方便大家及時看到我的更新,我搞了一個公眾號,以后文章會同步發(fā)布與公眾號和博客園,這樣大家就能及時收到通知啦,有不懂的問題也可以在公眾號留言,這樣我能夠及時看到并回復。(公眾號剛開始做,做的比較粗糙,里面還沒有東西 = =,后期會慢慢完善~~)

可以通過掃下面的二維碼或者直接搜公眾號:CharlotteDataMining 就可以了,謝謝關注^_^

  

 

參考文獻

1.AlexNet: http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

我的博客即將同步至騰訊云+社區(qū),邀請大家一同入駐。

責任編輯:張燕妮 來源: www.cnblogs.com
相關推薦

2018-04-16 11:30:32

深度學習

2018-04-17 09:40:22

深度學習

2018-04-09 10:20:32

深度學習

2018-04-18 09:39:07

深度學習

2018-03-26 20:14:32

深度學習

2018-04-04 10:19:32

深度學習

2018-04-02 10:45:11

深度學習PaddlePaddl手寫數字識別

2017-08-10 15:31:57

Apache Spar TensorFlow

2018-03-26 20:07:25

深度學習

2018-03-26 21:31:30

深度學習

2018-03-26 21:26:50

深度學習

2018-03-26 20:04:16

深度學習

2018-03-26 20:00:32

深度學習

2017-12-01 15:24:04

TensorFlow深度學習教程

2017-05-22 13:15:45

TensorFlow深度學習

2018-04-03 11:20:00

深度學習

2017-05-12 16:25:44

深度學習圖像補全tensorflow

2018-02-07 16:13:00

深度學習

2018-03-09 22:56:52

PaddlePaddl

2018-12-12 09:12:54

深度學習百度PaddlePaddl
點贊
收藏

51CTO技術棧公眾號

91成人看片片| 91视频在线看| 精品自拍视频在线观看| 美女伦理水蜜桃4| 原纱央莉成人av片| 国产精品美女久久福利网站| 99久久99| 波多野结衣视频网址| 91精品国产成人观看| 精品国产网站在线观看| 日韩欧美一区二| av中文字幕在线| 国产成人精品三级麻豆| 欧美伊久线香蕉线新在线| 91久久久久久久久久久久久久| 欧美高清一级片| 色网综合在线观看| 成人高清dvd| 邻居大乳一区二区三区| 国产乱码精品1区2区3区| 午夜精品久久久久久久99黑人 | 欧美美女福利视频| 香蕉乱码成人久久天堂爱免费| 先锋影音网一区| 秋霞网一区二区| 精品一区二区影视| 日本高清视频一区| 久久久久香蕉视频| 97人人精品| 亚洲午夜精品久久久久久性色| 苍井空张开腿实干12次| 国内自拍亚洲| 色综合天天综合在线视频| 9191国产视频| 在线观看h片| 久久这里都是精品| 成人精品网站在线观看| 国产精华7777777| 亚洲影视在线| 国语自产精品视频在免费| 亚洲综合视频网站| 成人高清av| 亚洲天堂av综合网| 免费观看一级一片| 亚洲国产aⅴ精品一区二区| 欧美日韩国产成人在线91| 欧美私人情侣网站| 欧美激情网站| 亚洲一区二区成人在线观看| 97超碰人人爱| 免费av网站在线看| 国产精品久久一级| 亚洲春色在线视频| 成人在线高清视频| 日本一区二区综合亚洲| 欧美中日韩免费视频| 台湾av在线二三区观看| 成人看片黄a免费看在线| 91九色在线观看| 精品人妻少妇AV无码专区 | wwwxxx色| 亚洲电影一区| 精品国产乱码久久久久久蜜臀| 美女被艹视频网站| 免费观看性欧美大片无片| 91精品国产综合久久久蜜臀图片| 五月天开心婷婷| 99视频有精品高清视频| 欧美一区二区私人影院日本| 在线免费黄色小视频| 国产一区二区三区国产精品| 91精品啪在线观看国产60岁| 极品人妻一区二区| 911亚洲精品| 亚洲精品福利资源站| 黑丝av在线播放| 免费看成人吃奶视频在线| 国产小视频91| 91久久久久久久久久久久久久| 亚洲a在线视频| 欧美精品在线观看91| 国产一级片播放| 国产模特精品视频久久久久| 国产成人午夜视频网址| 一级片在线免费观看视频| 国产一区美女在线| 国内精品二区| 成人高清网站| ㊣最新国产の精品bt伙计久久| 乱熟女高潮一区二区在线| 鲁鲁在线中文| 欧美日韩国产一级| 国产视频精品视频| 国产探花一区在线观看| 精品国产欧美成人夜夜嗨| 欧美人妻一区二区| 免播放器亚洲| 91久久久久久| 深夜影院在线观看| 中文字幕永久在线不卡| 性一交一乱一伧国产女士spa| 芒果视频成人app| 欧美军同video69gay| 日韩黄色一区二区| 日韩精品一区二区三区免费观影| 久久久影视精品| 中文字幕永久在线观看| 丁香另类激情小说| 亚洲欧美影院| 国产伦子伦对白在线播放观看| 欧美优质美女网站| 国产大尺度视频| 成人直播大秀| 91福利视频在线观看| 97国产精品久久久| 久久久久久9999| 91视频 - 88av| 国产精品久久久久久久久免费高清 | 亚洲免费小视频| 无码人妻aⅴ一区二区三区日本| 永久免费网站在线| 91黄色免费网站| 国产国语老龄妇女a片| 国产精品99视频| 欧美洲成人男女午夜视频| 精品人妻无码一区二区色欲产成人| 久久在线免费观看| 成人免费在线网| 国产精品久久久久久久久久久久久久久 | 亚洲视频一二三四| 最新亚洲精品| 777777777亚洲妇女| jizz国产视频| 亚洲四区在线观看| 三级视频中文字幕| 国产一区二区三区四区五区传媒 | 国产激情精品久久久第一区二区| 水蜜桃一区二区| 朝桐光一区二区| 亚洲欧美激情视频| xxxx.国产| 99国产精品一区| 久久久久久久久久网| 动漫av一区| 欧美激情区在线播放| 国产极品999| 亚洲男人天堂av| 日本一区二区三区在线免费观看| 欧美a级成人淫片免费看| 国产精品精品视频一区二区三区| 精品成人一区二区三区免费视频| 欧美日韩性视频| 右手影院亚洲欧美| 乱人伦精品视频在线观看| 极品尤物一区二区三区| 黄色在线免费观看网站| 日韩大陆欧美高清视频区| 欧美日韩乱国产| 91麻豆福利精品推荐| 免费在线观看的av网站| 国产传媒欧美日韩成人精品大片| 日韩美女视频中文字幕| 韩国中文字幕2020精品| 欧美中文字幕不卡| 日韩av片在线免费观看| 九色综合狠狠综合久久| 国产免费xxx| 成午夜精品一区二区三区软件| 性亚洲最疯狂xxxx高清| 欧洲一区av| 欧美性受xxxx黑人xyx| 色老板免费视频| 国产mv日韩mv欧美| 欧美亚洲精品一区二区| 国产成人手机高清在线观看网站| 国产精品丝袜久久久久久不卡| 男人天堂久久久| 精品少妇一区二区三区在线视频| 国产无遮无挡120秒| 97久久超碰精品国产| 538在线视频观看| 91精品麻豆| 欧美成人一二三| 日韩专区第一页| 日本道色综合久久| 日韩精品123区| 高清不卡在线观看av| 午夜精品久久久久久久无码| 国语产色综合| 99在线国产| 日韩av中字| 欧美成人精品一区二区三区| 人妻少妇精品无码专区| 欧美色电影在线| 国产精品日日夜夜| 中文子幕无线码一区tr| 免费观看污网站| 老司机精品久久| 国产成人亚洲综合无码| 国产伦精品一区二区三区千人斩 | 国产欧美日本一区二区三区| 成年人网站av| 久久国产精品毛片| 欧美少妇在线观看| 欧美特黄一级大片| 国产嫩草一区二区三区在线观看| 国产精品久久久久久吹潮| 国语自产偷拍精品视频偷| 国产青青草在线| 精品99一区二区| 97超碰人人草| 91国产福利在线| 国产第一页在线播放| 欧美激情综合网| 在线 丝袜 欧美 日韩 制服| 国产精品中文字幕一区二区三区| 玩弄japan白嫩少妇hd| 尤物在线精品| 日本老太婆做爰视频| 成人激情在线| 麻豆精品传媒视频| 国产精品自在线拍| 91原创国产| 97色婷婷成人综合在线观看| 国产91精品网站| 黄毛片在线观看| 欧美激情小视频| 成人欧美在线| 日韩中文字幕在线视频播放| 久久综合九色综合久| 亚洲精品999| 日韩一级免费视频| 精品欧美久久久| 国产福利资源在线| 91精品久久久久久蜜臀| 自拍偷拍第八页| 91黄视频在线观看| 天天干天天操天天爱| 欧美午夜激情在线| 亚洲免费在线观看av| 亚洲h在线观看| 国产极品美女高潮无套嗷嗷叫酒店 | 91麻豆精品国产91久久久资源速度 | 成年人网站免费在线观看| 成人美女视频在线看| 久久久久亚洲AV成人网人人小说| 国产在线精品视频| 日本高清免费观看| 国产麻豆精品在线观看| 91在线第一页| 国产成人av一区二区三区在线 | 91人人澡人人爽人人精品| 久久久精品性| 色一情一乱一伦一区二区三区日本| 免费久久99精品国产自在现线| 无码aⅴ精品一区二区三区浪潮| 亚洲视频大全| 老熟妇仑乱视频一区二区 | 国产精品久久久久一区二区| 国产区高清在线| 亚洲网站在线播放| 国产在线视频网址| 在线日韩av观看| 日本精品一区二区三区在线播放| 色婷婷综合久久久久| 麻豆av在线免费看| 久久99国产综合精品女同| 蜜桃成人365av| 欧美在线不卡区| 日韩精品免费观看视频| 成人a在线视频| 98视频精品全部国产| 久久草视频在线看| 青青草国产成人a∨下载安卓| 艳色歌舞团一区二区三区| 中文字幕免费一区二区| 阿v天堂2017| 日韩精品视频网站| 超碰91在线播放| 成人av电影免费观看| 小早川怜子久久精品中文字幕| 中文字幕亚洲一区二区va在线| 久久久国产成人| 日韩欧美在线观看| 亚洲天堂免费av| 欧美精品一区二| 国产对白叫床清晰在线播放| 久久亚洲一区二区三区四区五区高 | 91麻豆免费在线观看| 青青草华人在线视频| 一区二区三区欧美久久| youjizz在线视频| 欧美丰满美乳xxx高潮www| 男人天堂网在线视频| 在线观看日韩av| 在线视频国产区| 国产va免费精品高清在线观看| 久久丁香四色| 奇米视频888战线精品播放| 亚洲先锋影音| 999香蕉视频| 粉嫩嫩av羞羞动漫久久久| 国产精品成人无码免费| 亚洲电影激情视频网站| 亚洲一卡二卡在线观看| 亚洲第一中文字幕| 国内外激情在线| 日本午夜在线亚洲.国产| 日韩精品视频中文字幕| 性欧美精品一区二区三区在线播放| 午夜天堂精品久久久久| 午夜两性免费视频| 91视频免费观看| 18精品爽视频在线观看| 欧美日韩色综合| 全色精品综合影院| 午夜精品一区二区三区av| 亚洲国产天堂| 色一情一乱一伦一区二区三区| 99精品视频网| 日本少妇一级片| 亚洲日本va在线观看| 中文字幕一区二区人妻| 亚洲免费av网址| 嗯啊主人调教在线播放视频 | 国产一区二区电影在线观看| 国产精品久久中文字幕| 国产成人自拍在线| chinese全程对白| 欧美日韩性生活| 一广人看www在线观看免费视频| 日本国产欧美一区二区三区| 黄色欧美在线| 999一区二区三区| 国产精品1区2区3区在线观看| 亚洲女人久久久| 欧美精品久久天天躁| √天堂资源地址在线官网| 国产精品久久久av| 精品一区二区三区在线 | 日韩精品免费在线观看| 成人影音在线| 国产伦精品一区二区三| 在线日韩欧美| 中文字幕免费高清视频| 性欧美疯狂xxxxbbbb| 天天干天天操av| 3344国产精品免费看| 人体久久天天| 人妻有码中文字幕| 久久精品人人做| 真实的国产乱xxxx在线91| 中文字幕亚洲天堂| 伊人国产精品| 麻豆一区二区三区在线观看| 国产福利一区二区三区视频在线| 青娱乐国产盛宴| 亚洲成**性毛茸茸| 英国三级经典在线观看| 欧美色图亚洲自拍| 视频精品一区二区| 男人天堂资源网| 日韩一级二级三级精品视频| 青草视频在线免费直播| 国产尤物91| 嫩草成人www欧美| 国产日韩精品中文字无码| 91精品欧美一区二区三区综合在 | 亚洲第一搞黄网站| 亚洲色图狠狠干| 国产精品久久久久久久久影视| 99re6这里只有精品| 亚洲国产欧美91| 激情成人中文字幕| 国产福利小视频在线| 91中文精品字幕在线视频| 国产一区日韩欧美| 日韩精品卡通动漫网站| 欧美久久久久久蜜桃| 国产美女情趣调教h一区二区| 久热这里只精品99re8久| 青青草国产成人av片免费| 欧美成人一二三区| 亚洲精品中文字幕女同| 亚洲精品大片| 久久久久久久久久网| 国产精品―色哟哟| 日本黄色大片视频| 国产精品偷伦视频免费观看国产| 欧美不卡视频| 日本二区在线观看| 日韩免费高清视频| 欧美xxx网站| 在线视频精品一区| 97超碰欧美中文字幕| 一级黄色大片免费| 韩国三级电影久久久久久| 99久久久国产精品美女| 人妻无码一区二区三区| 91精品麻豆日日躁夜夜躁|