自慰套教室~女子全员妊娠,精品无码国产自产拍在线观看蜜桃,亚洲国产精品成人精品无码区,久别的草原在线看视频免费

集團站切換校區

驗證碼已發送,請查收短信

復制成功
微信號:togogoi
添加微信好友, 詳細了解課程
已復制成功,如果自動跳轉微信失敗,請前往微信添加好友
打開微信
圖標

業界新聞

當前位置:首頁 > >業界新聞 > >

人工智能AI培訓_Tensorflow 2.0實現卷積神經網絡CNN對MNIST數字分類

發布時間: 2019-07-31 13:58:11

人工智能AI培訓_Tensorflow 2.0實現卷積神經網絡CNN對MNIST數字分類

本教程演示了如何訓練簡單的卷積?神經網絡CNN)來對MNIST數字進行分類。這個簡單的網絡將在MNIST測試集上實現99%以上的準確率。因為本教程使用Keras ?Sequential API,所以創建和訓練我們的模型只需幾行代碼。

注意:CNN使用GPU訓練更快。

?人工智能培訓

1. 導入TensorFlow

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
try:
    import tensorflow.keras as keras
except:
    import tensorflow.python.keras as keras

2. 下載預處理MNIST數據集

#下載預處理MNIST數據集
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
# 特征縮放[0, 1]區間
train_images, test_images = train_images / 255.0, test_images / 255.0

3. 創建卷積基數

下面6行代碼使用常見模式定義卷積基數: Conv2D MaxPooling2D層的堆棧。

作為輸入,CNN采用形狀的張量(image_height, image_width, color_channels),忽略批量大小。MNIST有一個顏色通道(因為圖像是灰度的),而彩色圖像有三個顏色通道(R,G,B)。在此示例中,我們將配置CNN以處理形狀(28,28,1)的輸入,這是MNIST圖像的格式,我們通過將參數input_shape傳遞給第一層來完成此操作。

#創建卷積基數
model = keras.models.Sequential()
model.add(keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(keras.layers.MaxPooling2D((2, 2)))
model.add(keras.layers.Conv2D(64, (3, 3), activation='relu'))
print(model.summary())

Model: "sequential"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

conv2d (Conv2D)     (None, 26, 26, 32)   320       

_________________________________________________________________

max_pooling2d (MaxPooling2D) (None, 13, 13, 32) 0         

_________________________________________________________________

conv2d_1 (Conv2D)   (None, 11, 11, 64)   18496     

_________________________________________________________________

max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)     0         

_________________________________________________________________

conv2d_2 (Conv2D)            (None, 3, 3, 64)          36928     

=================================================================

...

在上面,你可以看到每個Conv2DMaxPooling2D層的輸出都是3D張量的形狀(高度,寬度,通道),隨著我們在網絡中更深入,寬度和高度大小趨于縮小,每個Conv2D層的輸出通道的數由第一個參數(例如,3264)控制。通常,隨著寬度和高度的縮小,我們可以(計算地)在每個Conv2D層中添加更多輸出通道

4. 在頂部添加密集層

為了完成我們的模型,我們將最后的輸出張量從卷積基(形狀(3,3,64))饋送到一個或多個密集層中以執行分類。密集層將矢量作為輸入(1D),而當前輸出是3D張量。首先,我們將3D輸出展平(或展開)為1D,然后在頂部添加一個或多個Dense層。MINST10個輸出類,因此我們使用具有10輸出和softmax激活的最終Dense層。

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dense(10, activation='softmax'))
print(model.summary()) # 顯示模型的架構

Model: "sequential"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

conv2d (Conv2D)   (None, 26, 26, 32)    320       

_________________________________________________________________

max_pooling2d (MaxPooling2D) (None, 13, 13, 32)    0         

_________________________________________________________________

conv2d_1 (Conv2D)    (None, 11, 11, 64)    18496     

_________________________________________________________________

max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)  0         

_________________________________________________________________

conv2d_2 (Conv2D)  (None, 3, 3, 64)   36928     

_________________________________________________________________

flatten (Flatten)   (None, 576)   0         

_________________________________________________________________

dense (Dense)   (None, 64)    36928     

_________________________________________________________________

dense_1 (Dense)              (None, 10)                650       

=================================================================

...

從上面可以看出,在通過兩個密集層之前,我們的(3,3,64)輸出被展平為矢量(576)。

5. 編譯和訓練模型

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)

...

Epoch 5/5

60000/60000 [==============================] - 15s 258us/sample - loss: 0.0190 - accuracy: 0.9941

6. 評估模型

#評估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(test_acc)

10000/10000 [==============================] - 1s 92us/sample - loss: 0.0272 - accuracy: 0.9921

0.9921

如你所見,我們簡單的CNN已經達到了超過99%的測試精度,這幾行代碼還不錯。另一種編寫CNN的方式here(使用Keras Subclassing APIGradientTape)。

本實驗利用網上已有的北京房價數據集預測了北京的房價,實現了TensorFlow的線性回歸應用。

上一篇: 大數據培訓_Maven構建java工程操作hdfs實例

下一篇: Linux培訓老師警告運維們要十分注意的9個 Linux 命令

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>