<strong id="33j4t"><kbd id="33j4t"></kbd></strong><span id="33j4t"><pre id="33j4t"></pre></span>
<em id="33j4t"></em>
    1. 您當前的位置:首頁 > IT編程 > Keras
      | C語言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 學術與代碼 | cnn卷積神經網絡 | gnn | 圖像修復 | Keras | 數據集 | Neo4j | 自然語言處理 | 深度學習 | 醫學CAD | 醫學影像 | 超參數 | pointnet |

      Keras實現vgg源代碼

      51自學網 2022-12-05 07:23:46
        Keras
      vgg16先卷積2次,池化,卷積2次,池化,卷積3次,池化,卷積3次,池化,然后全連接層。
      在這里插入圖片描述
      看看大概結構其實很容易發現規律,似乎有些代碼都是重復的,然后有些只是改個數字而已。具體怎么寫,下面進行詳細介紹。小伙伴們要特別注意代碼中一些數字和上圖結構中數字的關系噢,特別是64,128,256,512,4096,1000.很有規律的。仔細觀察你就會了
      
      from keras.models import Sequential
      from keras.layers.core import Flatten, Dense
      from keras.layers.convolutional import Conv2D, MaxPooling2D
      
      model = Sequential()
      model.add(Conv2D(64, (3, 3), padding = 'same', activation='relu', input_shape=(224, 224, 3)))
      model.add(Conv2D(64, (3, 3), padding = 'same', activation='relu'))
      model.add(MaxPooling2D((2, 2), strides=(2, 2)))
      
      model.add(Conv2D(128, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(128, (3, 3), padding = 'same', activation='relu'))
      model.add(MaxPooling2D((2, 2), strides=(2, 2)))
      
      model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(256, (3, 3), padding = 'same', activation='relu'))
      model.add(MaxPooling2D((2, 2), strides=(2, 2)))
      
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(MaxPooling2D((2, 2), strides=(2, 2)))
      
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(Conv2D(512, (3, 3), padding = 'same', activation='relu'))
      model.add(MaxPooling2D((2, 2), strides=(2, 2)))
      
      model.add(Flatten())
      model.add(Dense(4096, activation='relu'))
      model.add(Dense(4096, activation='relu'))
      model.add(Dense(1000, activation='softmax'))
      # 因為我們預測的寶可夢是5類,所以units=5,多分類一般用softmax,如果是二分類就是sigmoid
      model.summary()
      
      
      

      Sequential

      sequential就是實例化模型,創建一個 Sequential模型,可以通過 .add()的方法將各層添加到網絡中。

      Conv2D

      keras.layers.Conv2D(filters,
      kernel_size,
      strides=(1, 1),
      padding=‘valid’,
      data_format=None,
      dilation_rate=(1, 1),
      activation=None,
      use_bias=True,
      kernel_initializer=‘glorot_uniform’,
      bias_initializer=‘zeros’,
      kernel_regularizer=None,
      bias_regularizer=None,
      activity_regularizer=None,
      kernel_constraint=None,
      bias_constraint=None)

      該層創建了一個卷積核, 該卷積核對層輸入進行卷積, 以生成輸出張量。 如果 use_bias 為 True, 則會創建一個偏置向量并將其添加到輸出中。 最后,如果 activation 不是 None,它也會應用于輸出。

      當使用該層作為模型第一層時,需要提供 input_shape 參數。比如訓練樣本是(6000,28,28,1), 則input_shape=(28,28,1)
      介紹一些常用的參數設置:
      filters: 整數,輸出空間的維度 (即卷積中濾波器的數量)。
      kernel_size: 一個整數,或者 2 個整數表示的元組或列表, 指明 2D 卷積窗口的寬度和高度。 可以是一個整數,為所有空間維度指定相同的值。
      strides: 一個整數,或者 2 個整數表示的元組或列表, 指明卷積沿寬度和高度方向的步長。 可以是一個整數,為所有空間維度指定相同的值。 指定任何 stride 值 != 1 與指定 dilation_rate 值 != 1 兩者不兼容。
      padding: “valid” 或 “same” (大小寫敏感)。 valid padding就是不padding,而same padding就是指padding完尺寸與原來相同
      圖像識別一般來說都要padding,尤其是在圖片邊緣的特征重要的情況下。padding多少取決于我們需要的輸出是多少

      MaxPooling2D

      keras.layers.MaxPooling1D(pool_size=2,
      strides=None,
      padding=‘valid’,
      data_format=‘channels_last’)
      介紹一些常用的參數設置:
      該層是池化層,pool_size是最大池化的窗口大小。vgg16網絡很有特點,池化的size都是2,strides步長也都是2.
      padding: “valid” 或 “same” (大小寫敏感)。 valid padding就是不padding,而same padding就是指padding完尺寸與原來相同。

      Flatten

      這個其實很簡單了,功能呢就是相當于過渡一樣。舉個例子。前面是卷積池化,后面是全連接層,flatten意思是在這兩邊搭個橋,過渡過渡,把前面得到的數組展開得以輸入后面連接層。

      Dense

      顧名思義就是層的意思,這個呢是專門來做全連接層的。
      keras.layers.Dense(units,
      activation=None,
      use_bias=True,
      kernel_initializer=‘glorot_uniform’,
      bias_initializer=‘zeros’,
      kernel_regularizer=None,
      bias_regularizer=None,
      activity_regularizer=None,
      kernel_constraint=None,
      bias_constraint=None)

      介紹一些常用的參數設置:
      unit就是神經元了,vgg模型的全連接層第一層和第二層都是4096個單元,那這里units就是4096,激活函數activation為relu。

      訓練

      構建完網絡當然就是接著訓練咯。不過在訓練之前,要強調一下,注意上面代碼中首層卷積層輸入的維度224,224,3.這個維度是要和你的數據維度相同才能輸入進網絡。那么你的訓練數據肯定不止一個數據,因此你的X_train的shape應該是x,224,224,3.
      網絡的訓練還是比較簡單。

      
      # configure the model
      model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
      # 訓練器是Adam,定義損失函數,這是多分類的,二分類用binary_crossentropy,評估指標是準確率accuracy
      # train the model
      model.fit(X_train, y_train, epochs=10)
      
       

      訓練之前進行的一些配置。adam是優化器。同樣的還有其他的,loss就是選擇的損失函數啦,對于多分類選擇這個損失函數就是為了多分類任務的,然后選擇評價指標是準確率。至于其他的參數以及更多參數的選擇,大家可以到官網上查看。
      fit里面X_train, y_train要保證維度相同。epochs表示迭代的次數?梢远嘁稽c,幾十幾百都沒問題,只要你電腦給力。

      預測

      如果想要預測也很簡單。
      model.predict_classes(X_test)注意這里的X_test同樣的圖片維度也應該是224,224,3.也就是說如果你有多個圖片的話,shape應該是x,224,224,3.
      看到這,相信你可以自己搭建網絡進行識別圖像了?烊ピ囋嚢!
      (其實博主是坑你的,一般的電腦一下子fit全部數據就會爆內存,參數太多了,但是vgg16真的好用,小伙伴們可以嘗試刪減層數,降低模型復雜度,或者參考博主第二篇博客來進行vgg16的實戰以及網絡如何優化來實現vgg噢。)


      使用 Keras + CNN 識別 CIFAR-10 照片圖像
      用keras搭建的vgg16網絡
      51自學網,即我要自學網,自學EXCEL、自學PS、自學CAD、自學C語言、自學css3實例,是一個通過網絡自主學習工作技能的自學平臺,網友喜歡的軟件自學網站。
      京ICP備13026421號-1
      亚洲第一网站男人都懂2021,中文字幕无码久久精品,大胸美女又黄又w网站,全免费a级毛片免费看