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

Keras TensorFlow教程:如何從零開發(fā)一個復(fù)雜深度學(xué)習(xí)模型

人工智能 深度學(xué)習(xí)
Keras 是提供一些高可用的 Python API ,能幫助你快速的構(gòu)建和訓(xùn)練自己的深度學(xué)習(xí)模型,它的后端是 TensorFlow 或者 Theano 。本文假設(shè)你已經(jīng)熟悉了 TensorFlow 和卷積神經(jīng)網(wǎng)絡(luò),如果,你還沒有熟悉,那么可以先看看這個10分鐘入門 TensorFlow 教程和卷積神經(jīng)網(wǎng)絡(luò)教程,然后再回來閱讀這個文章。

[[193126]]

Keras 是提供一些高可用的 Python API ,能幫助你快速的構(gòu)建和訓(xùn)練自己的深度學(xué)習(xí)模型,它的后端是 TensorFlow 或者 Theano 。本文假設(shè)你已經(jīng)熟悉了 TensorFlow 和卷積神經(jīng)網(wǎng)絡(luò),如果,你還沒有熟悉,那么可以先看看這個10分鐘入門 TensorFlow 教程卷積神經(jīng)網(wǎng)絡(luò)教程,然后再回來閱讀這個文章。

在這個教程中,我們將學(xué)習(xí)以下幾個方面:

1.為什么選擇 Keras?為什么 Keras 被認(rèn)為是深度學(xué)習(xí)的未來?

2.在Ubuntu上面一步一步安裝Keras。

3.Keras TensorFlow教程:Keras基礎(chǔ)知識。

4.了解 Keras 序列模型

    4.1 實際例子講解線性回歸問題

5.使用 Keras 保存和回復(fù)預(yù)訓(xùn)練的模型

6.Keras API

   6.1 使用Keras API開發(fā)VGG卷積神經(jīng)網(wǎng)絡(luò)

   6.2 使用Keras API構(gòu)建并運(yùn)行SqueezeNet卷積神經(jīng)網(wǎng)絡(luò)

1. 為什么選擇Keras?

Keras 是 Google 的一位工程師 François Chollet 開發(fā)的一個框架,可以幫助你在 Theano 上面進(jìn)行快速原型開發(fā)。后來,這被擴(kuò)展為 TensorFlow 也可以作為后端。并且最近,TensorFlow決定將其作為 contrib 文件中的一部分進(jìn)行提供。

Keras 被認(rèn)為是構(gòu)建神經(jīng)網(wǎng)絡(luò)的未來,以下是一些它流行的原因:

  1. 輕量級和快速開發(fā):Keras 的目的是在消除樣板代碼。幾行 Keras 代碼就能比原生的 TensorFlow 代碼實現(xiàn)更多的功能。你也可以很輕松的實現(xiàn) CNN 和 RNN,并且讓它們運(yùn)行在 CPU 或者 GPU 上面。
  2. 框架的“贏者”:Keras 是一個API,運(yùn)行在別的深度學(xué)習(xí)框架上面。這個框架可以是 TensorFlow 或者 Theano。Microsoft 也計劃讓 CNTK 作為 Keras 的一個后端。目前,神經(jīng)網(wǎng)絡(luò)框架世界是非常分散的,并且發(fā)展非常快。具體,你可以看看 Karpathy 的這個推文:

 

想象一下,我們每年都要去學(xué)習(xí)一個新的框架,這是多么的痛苦。到目前為止,TensorFlow 似乎成為了一種潮流,并且越來越多的框架開始為 Keras 提供支持,它可能會成為一種標(biāo)準(zhǔn)。

目前,Keras 是成長最快的一種深度學(xué)習(xí)框架。因為可以使用不同的深度學(xué)習(xí)框架作為后端,這也使得它成為了流行的一個很大的原因。你可以設(shè)想這樣一個場景,如果你閱讀到了一篇很有趣的論文,并且你想在你自己的數(shù)據(jù)集上面測試這個模型。讓我們再次假設(shè),你對TensorFlow 非常熟悉,但是對Theano了解的非常少。那么,你必須使用TensorFlow 對這個論文進(jìn)行復(fù)現(xiàn),但是這個周期是非常長的。但是,如果現(xiàn)在代碼是采用Keras寫的,那么你只要將后端修改為TensorFlow就可以使用代碼了。這將是對社區(qū)發(fā)展的一個巨大的推動作用。

2. 怎么安裝Keras,并且把TensorFlow作為后端

a) 依賴安裝

安裝 h5py,用于模型的保存和載入:

  1. pip install h5py 

還有一些依賴包也要安裝。

  1. pip install numpy scipy 
  2.  
  3. pip install pillow  

如果你還沒有安裝TensorFlow,那么你可以按照這個教程先去安裝TensorFlow。一旦,你安裝完成了 TensorFlow,你只需要使用 pip 很容易的安裝 Keras。

  1. sudo pip install keras 

使用以下命令來查看 Keras 版本。

  1. >>> import keras 
  2. Using TensorFlow backend. 
  3. >>> keras.__version__ 
  4. '2.0.4'  

一旦,Keras 被安裝完成,你需要去修改后端文件,也就是去確定,你需要 TensorFlow 作為后端,還是 Theano 作為后端,修改的配置文件位于 ~/.keras/keras.json 。具體配置如下:

  1.     "floatx""float32"
  2.     "epsilon": 1e-07, 
  3.     "backend""tensorflow"
  4.     "image_data_format""channels_last" 
  5.  

請注意,參數(shù) image_data_format 是 channels_last ,也就是說這個后端是 TensorFlow。因為,在TensorFlow中圖像的存儲方式是[height, width, channels],但是在Theano中是完全不同的,也就是 [channels, height, width]。因此,如果你沒有正確的設(shè)置這個參數(shù),那么你模型的中間結(jié)果將是非常奇怪的。對于Theano來說,這個參數(shù)就是channels_first。

那么,至此你已經(jīng)準(zhǔn)備好了,使用Keras來構(gòu)建模型,并且把TensorFlow作為后端。

3. Keras基礎(chǔ)知識

在Keras中主要的數(shù)據(jù)結(jié)構(gòu)是 model ,該結(jié)構(gòu)定義了一個完整的圖。你可以向已經(jīng)存在的圖中加入任何的網(wǎng)絡(luò)結(jié)構(gòu)。

  1. import keras 

Keras 有兩種不同的建模方式:

  1. Sequential models:這種方法用于實現(xiàn)一些簡單的模型。你只需要向一些存在的模型中添加層就行了。
  2. Functional API:Keras的API是非常強(qiáng)大的,你可以利用這些API來構(gòu)造更加復(fù)雜的模型,比如多輸出模型,有向無環(huán)圖等等。

在本文的下一節(jié)中,我們將學(xué)習(xí)Keras的Sequential models 和 Functional API的理論和實例。

4. Keras Sequential models

在這一部分中,我將來介紹Keras Sequential models的理論。我將快速的解釋它是如何工作的,還會利用具體代碼來解釋。之后,我們將解決一個簡單的線性回歸問題,你可以在閱讀的同時運(yùn)行代碼,來加深印象。

以下代碼是如何開始導(dǎo)入和構(gòu)建序列模型。

  1. from keras.models import Sequential 
  2.  
  3. models = Sequential()  

接下來我們可以向模型中添加 Dense(full connected layer),Activation,Conv2D,MaxPooling2D函數(shù)。

  1. from keras.layers import Dense, Activation, Conv2D, MaxPooling2D, Flatten, Dropout 
  2. model.add(Conv2D(64, (3,3), activation='relu', input_shape = (100,100,32))) 
  3. # This ads a Convolutional layer with 64 filters of size 3 * 3 to the graph  

以下是如何將一些***的圖層添加到網(wǎng)絡(luò)中。我已經(jīng)在卷積神經(jīng)網(wǎng)絡(luò)教程中寫了很多關(guān)于圖層的描述。

1). 卷積層

這里我們使用一個卷積層,64個卷積核,維度是33的,之后采用 relu 激活函數(shù)進(jìn)行激活,輸入數(shù)據(jù)的維度是 `100100*32`。注意,如果是***個卷積層,那么必須加上輸入數(shù)據(jù)的維度,后面幾個這個參數(shù)可以省略。

  1. model.add(Conv2D(64, (3,3), activation='relu', input_shape = (100,100,32))) 

2). MaxPooling 層

指定圖層的類型,并且指定赤的大小,然后自動完成赤化操作,酷斃了!

  1. model.add(MaxPooling2D(pool_size=(2,2))) 

3). 全連接層

這個層在 Keras 中稱為被稱之為 Dense 層,我們只需要設(shè)置輸出層的維度,然后Keras就會幫助我們自動完成了。

  1. model.add(Dense(256, activation='relu')) 

4). Dropout

  1. model.add(Dropout(0.5)) 

5). 扁平層

  1. model.add(Flatten()) 

數(shù)據(jù)輸入

網(wǎng)絡(luò)的***層需要讀入訓(xùn)練數(shù)據(jù)。因此我們需要去制定輸入數(shù)據(jù)的維度。因此,input_shape參數(shù)被用于制定輸入數(shù)據(jù)的維度大小。

  1. model.add(Conv2D(32, (3,3), activation='relu', input_shape=(224, 224, 3))) 

在這個例子中,數(shù)據(jù)輸入的***層是一個卷積層,輸入數(shù)據(jù)的大小是 224*224*3 。

以上操作就幫助你利用序列模型構(gòu)建了一個模型。接下來,讓我們學(xué)習(xí)最重要的一個部分。一旦你指定了一個網(wǎng)絡(luò)架構(gòu),你還需要指定優(yōu)化器和損失函數(shù)。我們在Keras中使用compile函數(shù)來達(dá)到這個功能。比如,在下面的代碼中,我們使用 rmsprop 來作為優(yōu)化器,binary_crossentropy 來作為損失函數(shù)值。

  1. model.compile(loss='binary_crossentropy', optimizer='rmsprop'

如果你想要使用隨機(jī)梯度下降,那么你需要選擇合適的初始值和超參數(shù):

  1. from keras.optimizers import SGD 
  2.  
  3. sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True
  4.  
  5. model.compile(loss='categorical_crossentropy', optimizer=sgd)  

現(xiàn)在,我們已經(jīng)構(gòu)建完了模型。接下來,讓我們向模型中輸入數(shù)據(jù),在Keras中是通過 fit 函數(shù)來實現(xiàn)的。你也可以在該函數(shù)中指定 batch_size 和 epochs 來訓(xùn)練。

  1. model.fit(x_train, y_train, batch_size = 32, epochs = 10, validation_data(x_val, y_val)) 

***,我們使用 evaluate 函數(shù)來測試模型的性能。

  1. score = model.evaluate(x_test, y_test, batch_size = 32) 

這些就是使用序列模型在Keras中構(gòu)建神經(jīng)網(wǎng)絡(luò)的具體操作步驟。現(xiàn)在,我們來構(gòu)建一個簡單的線性回歸模型。

4.1 實際例子講解線性回歸問題

問題陳述

在線性回歸問題中,你可以得到很多的數(shù)據(jù)點,然后你需要使用一條直線去擬合這些離散點。在這個例子中,我們創(chuàng)建了100個離散點,然后用一條直線去擬合它們。

a) 創(chuàng)建訓(xùn)練數(shù)據(jù)

TrainX 的數(shù)據(jù)范圍是 -1 到 1,TrainY 與 TrainX 的關(guān)系是3倍,并且我們加入了一些噪聲點。

  1. import keras 
  2.  
  3. from keras.models import Sequential 
  4.  
  5. from keras.layers import Dense 
  6.  
  7. import numpy as np 
  8.  
  9. trX = np.linspace(-1, 1, 101) 
  10.  
  11. trY = 3 * trX + np.random.randn(*trX.shape) * 0.33  

b) 構(gòu)建模型

首先我們需要構(gòu)建一個序列模型。我們需要的只是一個簡單的鏈接,因此我們只需要使用一個 Dense 層就夠了,然后用線性函數(shù)進(jìn)行激活。

  1. model = Sequential() 
  2.  
  3. model.add(Dense(input_dim=1, output_dim=1, init='uniform', activation='linear'))  

下面的代碼將設(shè)置輸入數(shù)據(jù) x,權(quán)重 w 和偏置項 b。然我們來看看具體的初始化工作。如下:

  1. weights = model.layers[0].get_weights() 
  2.  
  3. w_init = weights[0][0][0] 
  4.  
  5. b_init = weights[1][0] 
  6.  
  7. print('Linear regression model is initialized with weights w: %.2f, b: %.2f' % (w_init, b_init)) 
  8.  
  9. ## Linear regression model is initialized with weight w: -0.03, b: 0.00  

現(xiàn)在,我們可以l利用自己構(gòu)造的數(shù)據(jù) trX 和 trY 來訓(xùn)練這個線性模型,其中 trY 是 trX 的3倍。因此,權(quán)重 w 的值應(yīng)該是 3。

我們使用簡單的梯度下降來作為優(yōu)化器,均方誤差(MSE)作為損失值。如下:

  1. model.compile(optimizer='sgd', loss='mse'

***,我們使用 fit 函數(shù)來輸入數(shù)據(jù)。

  1. model.fit(trX, trY, nb_epoch=200, verbose=1) 

在經(jīng)過訓(xùn)練之后,我們再次打印權(quán)重:

  1. weights = model.layers[0].get_weights() 
  2.  
  3. w_final = weights[0][0][0] 
  4.  
  5. b_final = weights[1][0] 
  6.  
  7. print('Linear regression model is trained to have weight w: %.2f, b: %.2f' % (w_final, b_final)) 
  8.  
  9. ##Linear regression model is trained to have weight w: 2.94, b: 0.08  

正如你所看到的,在運(yùn)行 200 輪之后,現(xiàn)在權(quán)重非常接近于 3。你可以將運(yùn)行的輪數(shù)修改為區(qū)間 [100, 300] 之間,然后觀察輸出結(jié)構(gòu)有什么變化。現(xiàn)在,你已經(jīng)學(xué)會了利用很少的代碼來構(gòu)建一個線性回歸模型,如果要構(gòu)建一個相同的模型,在 TensorFlow 中需要用到更多的代碼。

5. 使用 Keras 保存和回復(fù)預(yù)訓(xùn)練的模型

HDF5 二進(jìn)制格式

一旦你利用Keras完成了訓(xùn)練,你可以將你的網(wǎng)絡(luò)保存在HDF5里面。當(dāng)然,你需要先安裝 h5py。HDF5 格式非常適合存儲大量的數(shù)字收,并從 numpy 處理這些數(shù)據(jù)。比如,我們可以輕松的將存儲在磁盤上的多TB數(shù)據(jù)集進(jìn)行切片,就好像他們是真正的 numpy 數(shù)組一樣。你還可以將多個數(shù)據(jù)集存儲在單個文件中,遍歷他們或者查看 .shape 和 .dtype 屬性。

如果你需要信心,那么告訴你,NASA也在使用 HDF5 進(jìn)行數(shù)據(jù)存儲。h5py 是python對HDF5 C API 的封裝。幾乎你可以用C在HDF5上面進(jìn)行的任何操作都可以用python在h5py上面操作。

保存權(quán)重

如果你要保存訓(xùn)練好的權(quán)重,那么你可以直接使用 save_weights 函數(shù)。

  1. model.save_weights("my_model.h5"

載入預(yù)訓(xùn)練權(quán)重

如果你想要載入以前訓(xùn)練好的模型,那么你可以使用 load_weights 函數(shù)。

  1. model.load_weights('my_model_weights.h5'

6. Keras API

如果對于簡單的模型和問題,那么序列模型是非常好的方式。但是如果你要構(gòu)建一個現(xiàn)實世界中復(fù)雜的網(wǎng)絡(luò),那么你就需要知道一些功能性的API,在很多流行的神經(jīng)網(wǎng)絡(luò)中,我們都有一個最小的網(wǎng)絡(luò)結(jié)構(gòu),完整的模型是根據(jù)這些最小的模型進(jìn)行疊加完成的。這些基礎(chǔ)的API可以讓你一層一層的構(gòu)建模型。因此,你只需要很少的代碼就可以來構(gòu)建一個完整的復(fù)雜神經(jīng)網(wǎng)絡(luò)。

讓我們來看看它是如何工作的。首先,你需要導(dǎo)入一些包。

  1. from keras.models import Model 

現(xiàn)在,你需要去指定輸入數(shù)據(jù),而不是在順序模型中,在***的 fit 函數(shù)中輸入數(shù)據(jù)。這是序列模型和這些功能性的API之間最顯著的區(qū)別之一。我們使用 input() 函數(shù)來申明一個 1*28*28 的張量。

  1. from keras.layers import Input 
  2.  
  3. ## First, define the vision modules 
  4.  
  5. digit_input = Input(shape=(1, 28, 28))  

現(xiàn)在,讓我們來利用API設(shè)計一個卷積層,我們需要指定要在在哪個層使用卷積網(wǎng)絡(luò),具體代碼這樣操作:

  1. x = Conv2D(64, (3, 3))(digit_input) 
  2.  
  3. x = Conv2D(64, (3, 3))(x) 
  4.  
  5. x = MaxPooling2D((2, 2))(x) 
  6.  
  7. out = Flatten()(x)  

***,我們對于指定的輸入和輸出數(shù)據(jù)來構(gòu)建一個模型。

  1. vision_model = Model(digit_input, out

當(dāng)然,我們還需要指定損失函數(shù),優(yōu)化器等等。但這些和我們在序列模型中的操作一樣,你可以使用 fit 函數(shù)和 compile 函數(shù)來進(jìn)行操作。

接下來,讓我們來構(gòu)建一個vgg-16模型,這是一個很大很“老”的模型,但是由于它的簡潔性,它是一個很好的學(xué)習(xí)模型。

6.1 使用Keras API開發(fā)VGG卷積神經(jīng)網(wǎng)絡(luò)

VGG:

VGG卷積神經(jīng)網(wǎng)絡(luò)是牛津大學(xué)在2014年提出來的模型。當(dāng)這個模型被提出時,由于它的簡潔性和實用性,馬上成為了當(dāng)時***的卷積神經(jīng)網(wǎng)絡(luò)模型。它在圖像分類和目標(biāo)檢測任務(wù)中都表現(xiàn)出非常好的結(jié)果。在2014年的ILSVRC比賽中,VGG 在Top-5中取得了92.3%的正確率。 該模型有一些變種,其中***的當(dāng)然是 vgg-16,這是一個擁有16層的模型。你可以看到它需要維度是 224*224*3 的輸入數(shù)據(jù)。

 

Vgg 16 architecture

讓我們來寫一個獨立的函數(shù)來完整實現(xiàn)這個模型。

  1. img_input = Input(shape=input_shape) 
  2. # Block 1 
  3. x = Conv2D(64, (3, 3), activation='relu', padding='same'name='block1_conv1')(img_input) 
  4. x = Conv2D(64, (3, 3), activation='relu', padding='same'name='block1_conv2')(x) 
  5. x = MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool')(x) 
  6.  
  7. # Block 2 
  8. x = Conv2D(128, (3, 3), activation='relu', padding='same'name='block2_conv1')(x) 
  9. x = Conv2D(128, (3, 3), activation='relu', padding='same'name='block2_conv2')(x) 
  10. x = MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool')(x) 
  11.  
  12. # Block 3 
  13. x = Conv2D(256, (3, 3), activation='relu', padding='same'name='block3_conv1')(x) 
  14. x = Conv2D(256, (3, 3), activation='relu', padding='same'name='block3_conv2')(x) 
  15. x = Conv2D(256, (3, 3), activation='relu', padding='same'name='block3_conv3')(x) 
  16. x = MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool')(x) 
  17.  
  18. # Block 4 
  19. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block4_conv1')(x) 
  20. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block4_conv2')(x) 
  21. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block4_conv3')(x) 
  22. x = MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool')(x) 
  23.  
  24. # Block 5 
  25. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block5_conv1')(x) 
  26. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block5_conv2')(x) 
  27. x = Conv2D(512, (3, 3), activation='relu', padding='same'name='block5_conv3')(x) 
  28. x = MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool')(x) 
  29.  
  30. x = Flatten(name='flatten')(x) 
  31. x = Dense(4096, activation='relu'name='fc1')(x) 
  32. x = Dense(4096, activation='relu'name='fc2')(x) 
  33. x = Dense(classes, activation='softmax'name='predictions')(x) 

 

我們可以將這個完整的模型,命名為 vgg16.py。

在這個例子中,我們來運(yùn)行 imageNet 數(shù)據(jù)集中的某一些數(shù)據(jù)來進(jìn)行測試。具體代碼如下:

  1. model = applications.VGG16(weights='imagenet'
  2. img = image.load_img('cat.jpeg', target_size=(224, 224)) 
  3. x = image.img_to_array(img) 
  4. x = np.expand_dims(x, axis=0) 
  5. x = preprocess_input(x) 
  6. preds = model.predict(x) 
  7. for results in decode_predictions(preds): 
  8.     for result in results: 
  9.         print('Probability %0.2f%% => [%s]' % (100*result[2], result[1])) 

[[193127]] 

正如你在圖中看到的,模型會對圖片中的物體進(jìn)行一個識別預(yù)測。

我們通過API構(gòu)建了一個VGG模型,但是由于VGG是一個很簡單的模型,所以并沒有完全將API的能力開發(fā)出來。接下來,我們通過構(gòu)建一個 SqueezeNet模型,來展示API的真正能力。

6.2 使用Keras API構(gòu)建并運(yùn)行SqueezeNet卷積神經(jīng)網(wǎng)絡(luò)

SequeezeNet 是一個非常了不起的網(wǎng)絡(luò)架構(gòu),它的顯著點不在于對正確性有多少的提高,而是減少了計算量。當(dāng)SequeezeNet的正確性和AlexNet接近時,但是ImageNet上面的預(yù)訓(xùn)練模型的存儲量小于5 MB,這對于在現(xiàn)實世界中使用CNN是非常有利的。SqueezeNet模型引入了一個 Fire模型,它由交替的 Squeeze 和 Expand 模塊組成。

 

SqueezeNet fire module

現(xiàn)在,我們對 fire 模型進(jìn)行多次復(fù)制,從而來構(gòu)建完整的網(wǎng)絡(luò)模型,具體如下:

 

為了去構(gòu)建這個網(wǎng)絡(luò),我們將利用API的功能首先來構(gòu)建一個單獨的 fire 模塊。

  1. # Squeeze part of fire module with 1 * 1 convolutions, followed by Relu 
  2. x = Convolution2D(squeeze, (1, 1), padding='valid'name='fire2/squeeze1x1')(x) 
  3. x = Activation('relu'name='fire2/relu_squeeze1x1')(x) 
  4.  
  5. #Expand part has two portions, left uses 1 * 1 convolutions and is called expand1x1  
  6. left = Convolution2D(expand, (1, 1), padding='valid'name='fire2/expand1x1')(x) 
  7. left = Activation('relu'name='fire2/relu_expand1x1')(left
  8.  
  9. #Right part uses 3 * 3 convolutions and is called expand3x3, both of these are follow#ed by Relu layer, Note that both receive x as input as designed.  
  10. right = Convolution2D(expand, (3, 3), padding='same'name='fire2/expand3x3')(x) 
  11. right = Activation('relu'name='fire2/relu_expand3x3')(right
  12.  
  13. # Final output of Fire Module is concatenation of left and right.  
  14. x = concatenate([leftright], axis=3, name='fire2/concat' 

為了重用這些代碼,我們可以將它們轉(zhuǎn)換成一個函數(shù):

  1. sq1x1 = "squeeze1x1" 
  2. exp1x1 = "expand1x1" 
  3. exp3x3 = "expand3x3" 
  4. relu = "relu_" 
  5. WEIGHTS_PATH = "https://github.com/rcmalli/keras-squeezenet/releases/download/v1.0/squeezenet_weights_tf_dim_ordering_tf_kernels.h5" 

模塊化處理

  1. sq1x1 = "squeeze1x1" 
  2. exp1x1 = "expand1x1" 
  3. exp3x3 = "expand3x3" 
  4. relu = "relu_" 
  5.  
  6. def fire_module(x, fire_id, squeeze=16, expand=64): 
  7.    s_id = 'fire' + str(fire_id) + '/' 
  8.    x = Convolution2D(squeeze, (1, 1), padding='valid'name=s_id + sq1x1)(x) 
  9.    x = Activation('relu'name=s_id + relu + sq1x1)(x) 
  10.  
  11.    left = Convolution2D(expand, (1, 1), padding='valid'name=s_id + exp1x1)(x) 
  12.    left = Activation('relu'name=s_id + relu + exp1x1)(left
  13.  
  14.    right = Convolution2D(expand, (3, 3), padding='same'name=s_id + exp3x3)(x) 
  15.    right = Activation('relu'name=s_id + relu + exp3x3)(right
  16.  
  17.    x = concatenate([leftright], axis=3, name=s_id + 'concat' 

現(xiàn)在,我們可以利用我們構(gòu)建好的單獨的 fire 模塊,來構(gòu)建完整的模型。

  1. x = Convolution2D(64, (3, 3), strides=(2, 2), padding='valid'name='conv1')(img_input) 
  2. x = Activation('relu'name='relu_conv1')(x) 
  3. x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool1')(x) 
  4.  
  5. x = fire_module(x, fire_id=2, squeeze=16, expand=64) 
  6. x = fire_module(x, fire_id=3, squeeze=16, expand=64) 
  7. x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool3')(x) 
  8.  
  9. x = fire_module(x, fire_id=4, squeeze=32, expand=128) 
  10. x = fire_module(x, fire_id=5, squeeze=32, expand=128) 
  11. x = MaxPooling2D(pool_size=(3, 3), strides=(2, 2), name='pool5')(x) 
  12.  
  13. x = fire_module(x, fire_id=6, squeeze=48, expand=192) 
  14. x = fire_module(x, fire_id=7, squeeze=48, expand=192) 
  15. x = fire_module(x, fire_id=8, squeeze=64, expand=256) 
  16. x = fire_module(x, fire_id=9, squeeze=64, expand=256) 
  17. x = Dropout(0.5, name='drop9')(x) 
  18.  
  19. x = Convolution2D(classes, (1, 1), padding='valid'name='conv10')(x) 
  20. x = Activation('relu'name='relu_conv10')(x) 
  21. x = GlobalAveragePooling2D()(x) 
  22. out = Activation('softmax'name='loss')(x) 
  23.  
  24. model = Model(inputs, outname='squeezenet' 

完整的網(wǎng)絡(luò)模型我們放置在 squeezenet.py 文件里。我們應(yīng)該先下載 imageNet 預(yù)訓(xùn)練模型,然后在我們自己的數(shù)據(jù)集上面進(jìn)行訓(xùn)練和測試。下面的代碼就是實現(xiàn)了這個功能:

  1. import numpy as np 
  2. from keras_squeezenet import SqueezeNet 
  3. from keras.applications.imagenet_utils import preprocess_input, decode_predictions 
  4. from keras.preprocessing import image 
  5.  
  6. model = SqueezeNet() 
  7.  
  8. img = image.load_img('pexels-photo-280207.jpeg', target_size=(227, 227)) 
  9. x = image.img_to_array(img) 
  10. x = np.expand_dims(x, axis=0) 
  11. x = preprocess_input(x) 
  12.  
  13. preds = model.predict(x) 
  14. all_results = decode_predictions(preds) 
  15. for results in all_results: 
  16.   for result in results: 
  17.     print('Probability %0.2f%% => [%s]' % (100*result[2], result[1]))  

對于相同的一幅圖預(yù)測,我們可以得到如下的預(yù)測概率。

[[193128]] 

至此,我們的Keras TensorFlow教程就結(jié)束了。希望可以幫到你 。

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2021-09-02 08:02:50

深度學(xué)習(xí)Kubernetes集群管理

2017-07-24 13:37:42

深度學(xué)習(xí)KerasTensorFlow

2018-10-15 10:08:53

程序員技能深度學(xué)習(xí)

2020-09-24 11:46:03

Promise

2019-06-10 15:00:27

node命令行前端

2025-06-17 07:28:51

2017-08-16 10:57:52

深度學(xué)習(xí)TensorFlowNLP

2020-05-14 14:45:33

深度學(xué)習(xí) PyTorch人工智能

2017-12-01 15:24:04

TensorFlow深度學(xué)習(xí)教程

2022-05-06 12:13:55

模型AI

2023-05-14 22:35:24

TensorFlowKeras深度學(xué)習(xí)

2024-06-13 08:36:11

2025-10-24 10:34:55

2025-06-17 08:10:00

智能指針C++代碼

2018-12-10 08:10:39

2014-09-25 09:51:29

Android App個人博客

2018-07-03 15:59:14

KerasPyTorch深度學(xué)習(xí)

2025-10-24 10:41:33

2018-03-23 10:00:34

PythonTensorFlow神經(jīng)網(wǎng)絡(luò)

2021-11-02 09:40:50

TensorFlow機(jī)器學(xué)習(xí)人工智能
點贊
收藏

51CTO技術(shù)棧公眾號

国产精欧美一区二区三区| 亚洲综合在线视频| 欧美成在线视频| 色免费在线视频| 亚洲av成人精品毛片| 亚洲欧美亚洲| 欧美日韩国产免费一区二区| 欧美一区二区视频在线| 久久精品国产亚洲av高清色欲| 黑人巨大精品| 久久久噜噜噜久久人人看| 欧美大荫蒂xxx| 韩国三级与黑人| a视频在线播放| 狠狠色狠狠色综合日日91app| 一区二区成人av| 久草精品在线播放| 免费看黄网站在线观看| 91精品精品| 欧美精品一二三| 亚洲精品不卡| 亚洲精品一区二区二区| 国际精品欧美精品| 在线观看国产精品网站| 青青影院一区二区三区四区| 国产精品777777| 免费欧美一区| 色香蕉成人二区免费| 欧美精品亚洲精品| 国产一卡二卡三卡| 精品久久一区| 欧美日韩在线播放三区四区| 一区二区成人国产精品| 国产精品久久久久久久久久久久久久久久 | 一区二区三区日| 99精品在线| 91精品国产综合久久福利| 精品日韩在线播放| 精品久久久久成人码免费动漫| 欧美激情综合| 亚洲成人中文字幕| 男女超爽视频免费播放| 免费在线视频你懂得| 老色鬼久久亚洲一区二区| 一区二区三区四区在线观看视频| 亚洲这里只有精品| 亚洲图片88| 狠狠色丁香久久婷婷综| 欧美二区在线播放| 中出视频在线观看| 亚洲不卡系列| 亚洲色图制服丝袜| 99国内精品久久久久久久软件| 国产一级一级片| 一区二区导航| 欧美一区二区三区视频免费播放| 欧美视频免费看欧美视频| 精品美女视频在线观看免费软件 | 制服 丝袜 综合 日韩 欧美| 欧美xnxx| 亚洲一区二区三区四区在线观看| 欧美高清一区二区| 国产模特av私拍大尺度| 国产精品久久久久9999高清| 最近更新的2019中文字幕| 少妇欧美激情一区二区三区| 波多野结衣亚洲| 亚洲乱码日产精品bd| 欧美精品久久久| www天堂在线| 日日噜噜夜夜狠狠视频欧美人| 久久久91精品国产| 国产精品毛片一区二区| 欧美a级大片在线| 色偷偷一区二区三区| 欧美一级爱爱视频| 超碰免费97在线观看| 福利电影一区二区| 国产日韩换脸av一区在线观看| 亚洲黄色一区二区| 亚洲91精品| 亚洲全黄一级网站| 日本wwwwwww| 9.1麻豆精品| 91久久精品日日躁夜夜躁欧美| www.日本三级| 在线观看免费网站黄| 91免费视频网| 国产精品国产一区二区| 国产精品热久久| 视频在线观看91| 国内偷自视频区视频综合| 国产极品美女在线| 久久国产精品亚洲人一区二区三区| 日韩www在线| 久久久久久无码精品人妻一区二区| 你懂得影院夜精品a| 精品久久久久久久久久国产 | 成人在线手机视频| 色婷婷精品视频| 亚洲国产成人久久综合| 日韩精品――色哟哟| 四虎成人精品一区二区免费网站| 蜜桃传媒麻豆第一区在线观看| 欧美猛交ⅹxxx乱大交视频| a级片在线观看| 精品久久ai| 亚洲第一福利网| 亚洲区 欧美区| 国产95亚洲| 欧美一级在线免费| 亚洲一区二区偷拍| 国产在线视频欧美一区| 这里只有精品99re| 中文字幕中文在线| www.久久久久爱免| 欧美一区二区三区爱爱| 在线观看视频在线观看| 日韩国产在线不卡视频| 日韩视频一区二区三区在线播放| 国产乱码一区二区三区四区| 99久久久成人国产精品| 欧美一区二区三区人| 久久aaaa片一区二区| 一区二区三区视频免费视频观看网站| 欧美一二三区精品| 午夜性福利视频| 国产精品1luya在线播放| 亚洲高清免费观看高清完整版| 国产视频久久久久久| 亚洲小说图片视频| 在线播放国产一区中文字幕剧情欧美 | 一区二区日韩在线观看| 国模少妇一区二区三区| 114国产精品久久免费观看| 国产美女免费看| 国产sm精品调教视频网站| 春色成人在线视频| 肉丝一区二区| 国产精品白丝在线| 久久久久久久9| 女厕盗摄一区二区三区| 在线观看91精品国产入口| 精品久久久99| 黄色欧美网站| 综合网中文字幕| 91aaa在线观看| 国产精品普通话对白| 国产精品亚洲片夜色在线| 99在线观看免费| 久久亚洲精品小早川怜子| 亚洲日本欧美在线| 第一av在线| 91官网在线观看| 亚洲女人在线观看| 网友自拍一区| 久久亚洲春色中文字幕| 天天干天天干天天干天天| 久久99精品久久久久久动态图| 国产精品日本一区二区| 丁香婷婷在线| 亚洲午夜av在线| 五月婷婷之婷婷| 台湾色综合娱乐中文网| 久久久国产在线视频| 国产又爽又黄的视频| 精品一二三四在线| 免费日韩av电影| av片在线观看免费| 欧美亚洲国产一区二区三区 | av7777777| av在线播放一区二区| 亚洲男人天堂网站| 久久精品这里只有精品| 日本不卡中文字幕| 91在线精品观看| 色婷婷中文字幕| 亚洲视频你懂的| www.色偷偷.com| 日韩高清成人在线| 久久久久久久久久国产| 一区二区三区www污污污网站| 久久久久亚洲综合| 9久久9毛片又大又硬又粗| 亚洲五码在线| 美女性感视频久久久| 中文字幕在线观看免费| 26uuu另类欧美| 男人插女人视频在线观看| 欧美三级一区| 精品国产区一区二区三区在线观看| 久久亚洲精品石原莉奈| 99久久99久久精品国产片果冻| 日韩人妻一区二区三区蜜桃视频| 亚洲a∨精品一区二区三区导航| 亚洲国产小视频在线观看| 国产亚洲小视频| 国产电影一区在线| 欧美日韩dvd| 精品999日本久久久影院| 久久精品成人一区二区三区| 在线观看中文字幕2021| 中文在线免费一区三区高中清不卡| 国内外成人免费激情视频| 五月国产精品| 日韩免费观看网站| 外国精品视频在线观看| 午夜视频久久久久久| 国产一线在线观看| 在线成人欧美| 国内一区在线| 超碰在线公开| 国产丝袜一区二区三区免费视频| 国产精品久久久久久久妇| 99国产精品一区| 女人喷潮完整视频| 欧美理论在线播放| 国产精品中文字幕在线观看| 四虎久久免费| 日韩午夜三级在线| 国产一级一级片| 99精品视频一区| 国产成人在线小视频| 91综合久久爱com| 午夜精品一区二区三区在线播放| 视频污在线观看| 精品久久久久久国产| 午夜时刻免费入口| 青青草国产成人av片免费| 亚洲一区影院| 2020最新国产精品| 欧亚精品在线观看| 中国日本在线视频中文字幕| 日韩一区二区三区电影| 日本亚洲欧美在线| 日本一区二区视频在线观看| 黄色一级片免费的| 国产精品theporn| 欧美成人一区二区在线| 日韩大陆av| 久久人人爽人人| 伦理片一区二区三区| 欧美夫妻性生活| 激情五月色婷婷| 欧美高清在线一区二区| 韩国三级与黑人| 国产精品亚洲欧美| 一区二区不卡在线| 欧美人成在线观看ccc36| 国产在线观看91精品一区| 成人性生交大片免费看在线播放| 国产丝袜一区二区三区| 国产精品一二三四五区| 欧美日韩国产一区中文午夜| 国产成人免费在线观看视频| 成人黄色一级视频| 亚洲这里只有精品| 性久久久久久| 777久久精品一区二区三区无码| 国产精品免费99久久久| 99视频在线播放| 成人黄色免费网站| 7777精品久久久久久| 欧美精品日韩少妇| 亚洲免费中文字幕| 亚洲黄色小说网址| 欧美日韩亚洲综合| 国产又黄又爽又色| 一区二区三区在线不卡| 18精品爽国产三级网站| 95精品视频在线| 成人三级做爰av| 看片的网站亚洲| 国产成人久久婷婷精品流白浆| 亚洲婷婷免费| 影音先锋男人的网站| 精品国产一区二区三区小蝌蚪| 国产精品夜夜夜一区二区三区尤| 午夜无码国产理论在线| 国精产品一区一区三区有限在线| 欧洲美女少妇精品| 国产亚洲欧美日韩精品| 亚洲欧美日韩综合在线| 日韩美女视频一区二区在线观看| 这里只有精品国产| 精品国产鲁一鲁一区二区张丽 | 久久久pmvav| 日韩三级视频在线看| 在线观看视频中文字幕| 91国产视频在线观看| 久久99精品波多结衣一区| 性欧美xxxx大乳国产app| 高清不卡一区二区三区| 成人在线视频www| 日韩av123| 成人福利视频| 日韩欧美一卡二卡| 亚洲不卡在线视频| 色综合天天综合| 丰满岳乱妇一区二区| 国产亚洲午夜| 日本www在线视频| 日韩一区二区三免费高清在线观看| 欧美在线一二三四区| 在线天堂一区av电影| 亚洲一区有码| 国产日韩精品综合网站| 看片一区二区| 亚洲国产一区在线观看| 欧美性xxxx69| 国产精品一区二区三区av麻| www.久久艹| 日韩欧美一区二区三区免费观看 | 久久伊人色综合| 日本在线观看视频| 中文字幕精品久久| 国产精品无码在线播放 | 国产精品∨欧美精品v日韩精品| 碰碰在线视频| 538国产精品一区二区在线| 综合另类专区| 欧美伦理91i| 高潮在线视频| 久久久久国产一区二区三区| 电影k8一区二区三区久久| 青青久久av北条麻妃黑人| 国产另类xxxxhd高清| 国产欧美一区二区三区视频| 亚洲网站三级| 狠狠爱一区二区三区| 精品一区毛片| 亚洲乱码一区二区三区三上悠亚| 91精品一区国产高清在线gif | 久久久久久久久久久久久9999| 九九热精品视频在线观看| 天堂资源在线亚洲资源| 91高清一区| 日韩精品在线中文字幕| 亚洲综合三区| 亚洲精品自拍网| 成人黄色av网站在线| 久久久久久久久久久久久久久| 中文字幕制服丝袜一区二区三区| 欧美成人免费看| 欧美性猛交xxxx免费看久久久| 一区二区三区www污污污网站| 日韩欧美在线123| 欧美伦理影视网| 久久亚洲综合国产精品99麻豆精品福利 | 国产日韩欧美制服另类| 色哟哟一一国产精品| 亚洲第一成年网| 国产九色在线播放九色| 日本精品一区二区三区高清 | 国产午夜精品无码| 在线国产电影不卡| av中文字幕免费在线观看| 亚洲精品天天看| 在线中文字幕-区二区三区四区 | 天堂网视频在线| 欧美一级片在线| 黄色av免费在线看| 色综合导航网站| 成人全视频免费观看在线看| 国产精品久久亚洲7777| 99精品视频在线观看播放| 久久久久久久久久久99| 蜜臀av国产精品久久久久| 毛茸茸free性熟hd| 亚洲美腿欧美偷拍| 中文字幕一区二区人妻视频| 欧美成人a∨高清免费观看| 福利视频在线导航| 91福利视频网| 日韩精品成人| 亚洲永久激情精品| 日韩电影一区二区三区| 少妇精品无码一区二区三区| 综合久久综合久久| 中文字幕av网站| 亚洲欧美日本另类| 波多一区二区| 91在线在线观看| 91精品一区二区三区综合在线爱 | 久久国产视频网| 30一40一50老女人毛片| 午夜精品一区二区三区免费视频| 国产精品视频无码| 最近2019中文字幕大全第二页| 欧美xxxx做受欧美护士| 久久综合给合久久狠狠色| 极品少妇一区二区三区| 亚洲一区二区中文字幕在线观看| 国产精品人人做人人爽人人添| 中国a一片一级一片| 亚洲欧美一区二区激情| 激情黄产视频在线免费观看| 国产精品一区二区a| 欧美视频在线观看| 国产又粗又猛又爽又黄|