在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁(yè) > 博客 > 熱文 | 卷積神經(jīng)網(wǎng)絡(luò)入門案例,輕松實(shí)現(xiàn)花朵分類(2)

            熱文 | 卷積神經(jīng)網(wǎng)絡(luò)入門案例,輕松實(shí)現(xiàn)花朵分類(2)

            發(fā)布人:AI科技大本營(yíng) 時(shí)間:2021-05-15 來源:工程師 發(fā)布文章

            構(gòu)建模型

            常見卷積神經(jīng)網(wǎng)絡(luò)(CNN),主要由幾個(gè) 卷積層Conv2D 和 池化層MaxPooling2D 層組成。卷積層與池化層的疊加實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的特征提取,最后連接全連接層實(shí)現(xiàn)分類。

            特征提取——卷積層與池化層

            實(shí)現(xiàn)分類——全連接層

            CNN 的輸入是張量 (Tensor) 形式的 (image_height, image_width, color_channels),包含了圖像高度、寬度及顏色信息。通常圖像使用 RGB 色彩模式,color_channels 為 (R,G,B) 分別對(duì)應(yīng) RGB 的三個(gè)顏色通道,即:image_height 和 image_width 根據(jù)圖像的像素高度、寬度決定color_channels是3,對(duì)應(yīng)RGB的3通道。

            花朵數(shù)據(jù)集中的圖片,形狀是 (180, 180, 3),我們可以在聲明第一層時(shí)將形狀賦值給參數(shù) input_shape 。

            num_classes = 5
            model = Sequential([
              layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
              layers.Conv2D(16, 3, padding='same', activation='relu'),
              layers.MaxPooling2D(),
              layers.Conv2D(32, 3, padding='same', activation='relu'),
              layers.MaxPooling2D(),
              layers.Conv2D(64, 3, padding='same', activation='relu'),
              layers.MaxPooling2D(),
              layers.Flatten(),
              layers.Dense(128, activation='relu'),
              layers.Dense(num_classes)
            ])

            該模型由三個(gè)卷積塊組成,每個(gè)卷積塊中包括2D卷積層+最大池化層。最后有一個(gè)全連接層,有128個(gè)單元,可以通過relu激活功能激活該層。

            編譯模型

            model.compile(optimizer='adam',
                          loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                          metrics=['accuracy'])

            查看一下網(wǎng)絡(luò)模型:tf.keras.utils.plot_model(model) ,或者用這樣方式看看:model.summary()

            3.png

            訓(xùn)練模型

            這里我們輸入準(zhǔn)備好的訓(xùn)練集數(shù)據(jù)(包括圖像、對(duì)應(yīng)的標(biāo)簽),測(cè)試集的數(shù)據(jù)(包括圖像、對(duì)應(yīng)的標(biāo)簽),模型一共訓(xùn)練10次。

            epochs=10
            history = model.fit(
              train_ds,
              validation_data=val_ds,
              epochs=epochs
            )

            下圖是訓(xùn)練過程的截圖:

            4.png

            通常loss越小越好,對(duì)了解釋下什么是loss;簡(jiǎn)單來說是 模型預(yù)測(cè)值 和 真實(shí)值 的相差的值,反映模型預(yù)測(cè)的結(jié)果和真實(shí)值的相差程度;通常準(zhǔn)確度accuracy 越高,模型效果越好。

            評(píng)估模型

            在訓(xùn)練和驗(yàn)證集上創(chuàng)建損失和準(zhǔn)確性圖。

            acc = history.history['accuracy']
            val_acc = history.history['val_accuracy']
            loss = history.history['loss']
            val_loss = history.history['val_loss']
            epochs_range = range(epochs)
            plt.figure(figsize=(8, 8))
            plt.subplot(1, 2, 1)
            plt.plot(epochs_range, acc, label='Training Accuracy')
            plt.plot(epochs_range, val_acc, label='Validation Accuracy')
            plt.legend(loc='lower right')
            plt.title('Training and Validation Accuracy')
            plt.subplot(1, 2, 2)
            plt.plot(epochs_range, loss, label='Training Loss')
            plt.plot(epochs_range, val_loss, label='Validation Loss')
            plt.legend(loc='upper right')
            plt.title('Training and Validation Loss')
            plt.show()

            5.png

            從圖中可以看出,訓(xùn)練精度和驗(yàn)證精度相差很大,模型僅在驗(yàn)證集上獲得了約60%的精度。

            訓(xùn)練精度隨時(shí)間增長(zhǎng),而驗(yàn)證精度在訓(xùn)練過程中停滯在60%左右。訓(xùn)練和驗(yàn)證準(zhǔn)確性之間的準(zhǔn)確性差異很明顯,這是過擬合的標(biāo)志。

            可能過擬合出現(xiàn)的原因 :當(dāng)訓(xùn)練示例數(shù)量很少時(shí),像這次的只有3000多張圖片,該模型有時(shí)會(huì)從訓(xùn)練示例中的噪音或不必要的細(xì)節(jié)中學(xué)習(xí),從而模型在新示例上的性能產(chǎn)生負(fù)面影響。 

            使用模型

            通常使用 model.predict( )  函數(shù)進(jìn)行預(yù)測(cè)。 

            優(yōu)化模型、重新構(gòu)建模型、訓(xùn)練模型、使用模型

            這里的優(yōu)化模型,主要是針對(duì)模型出現(xiàn)“過擬合”的問題。

            過擬合

            模型將過度擬合訓(xùn)練數(shù)據(jù),在訓(xùn)練集上達(dá)到較高的準(zhǔn)確性,但在未見的數(shù)據(jù)(測(cè)試集)上得到比較低的準(zhǔn)確性;模型的“泛化能力”不足。

            我們訓(xùn)練模型的主要目的,也是希望模型在未見數(shù)據(jù)的預(yù)測(cè)上能有較高的準(zhǔn)確性;解決過擬合問題是比較重要的。

            解決過擬合的思路

            使用更完整的訓(xùn)練數(shù)據(jù)。(最好的解決方案)

            使用正則化之類的技術(shù)。

            簡(jiǎn)化神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

            使用更完整的訓(xùn)練數(shù)據(jù),數(shù)據(jù)集應(yīng)涵蓋模型應(yīng)處理的所有輸入范圍。僅當(dāng)涉及新的有趣案例時(shí),其他數(shù)據(jù)才有用。

            比如:在訓(xùn)練集的花朵圖片都是近距離拍攝的,測(cè)試集的花朵有部分是遠(yuǎn)距離拍攝,訓(xùn)練出來的模型,自然在測(cè)試集的準(zhǔn)確度不高了;如果一開始在訓(xùn)練集也包含部分遠(yuǎn)距離的花朵圖片,那么模型在測(cè)試集時(shí)準(zhǔn)確度會(huì)較高,基本和訓(xùn)練集的準(zhǔn)確度接近。

            使用正規(guī)化等技術(shù),這些限制了模型可以存儲(chǔ)的信息的數(shù)量和類型。如果一個(gè)網(wǎng)絡(luò)只能記住少量的模式,優(yōu)化過程將迫使它專注于最突出的模式,這些模式更有可能很好地概括。

            簡(jiǎn)化神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),如果訓(xùn)練集比較小,網(wǎng)絡(luò)結(jié)構(gòu)又十分復(fù)雜,使得模型過度擬合訓(xùn)練數(shù)據(jù),這時(shí)需要考慮簡(jiǎn)化模型了。減少一些神經(jīng)元數(shù)量,或減少一些網(wǎng)絡(luò)層。

            結(jié)合上面的例子,使用數(shù)據(jù)增強(qiáng)和正則化技術(shù),來優(yōu)化網(wǎng)絡(luò)。

            數(shù)據(jù)增強(qiáng)

            通過對(duì)已有的訓(xùn)練集圖片 隨機(jī)轉(zhuǎn)換(反轉(zhuǎn)、旋轉(zhuǎn)、縮放等),來生成其它訓(xùn)練數(shù)據(jù)。這有助于將模型暴露在數(shù)據(jù)的更多方面,并更好地概括。

            這里使用 tf.layers.experimental.preprocessing 層實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)。

            data_augmentation = keras.Sequential(
              [
                layers.experimental.preprocessing.RandomFlip("horizontal", 
                                                             input_shape=(img_height, 
                                                                          img_width,
                                                                          3)),
                layers.experimental.preprocessing.RandomRotation(0.1),
                layers.experimental.preprocessing.RandomZoom(0.1),
              ]
            )

            RandomFlip("horizontal", input_shape=(img_height,  img_width, 3)) 指定輸入圖片,并對(duì)圖片進(jìn)行隨機(jī)水平反轉(zhuǎn)

            RandomRotation(0.1) 對(duì)圖片進(jìn)行隨機(jī)旋轉(zhuǎn)

            RandomZoom(0.1)     對(duì)圖片進(jìn)行隨機(jī)縮放

            通過將數(shù)據(jù)增強(qiáng)應(yīng)用到同一圖像中幾次來可視化幾個(gè)增強(qiáng)示例的外觀:

            plt.figure(figsize=(10, 10))
            for images, _ in train_ds.take(1):
              for i in range(9):
                augmented_images = data_augmentation(images)
                ax = plt.subplot(3, 3, i + 1)
                plt.imshow(augmented_images[0].numpy().astype("uint8"))
                plt.axis("off")

            7.png

            *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。

            單片機(jī)相關(guān)文章:單片機(jī)教程


            單片機(jī)相關(guān)文章:單片機(jī)視頻教程


            單片機(jī)相關(guān)文章:單片機(jī)工作原理


            汽車防盜機(jī)相關(guān)文章:汽車防盜機(jī)原理


            關(guān)鍵詞: AI

            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉