国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        在 R 中使用 Keras 構建深度學習圖像分類器

        2022-08-11 10:32
        磐創AI
        關注

        介紹

        深度學習和人工智能的一個重要應用是圖像分類。圖像分類是根據圖像所包含的特定特征或特征對圖像進行標記的過程。該算法識別這些特征并利用它們來區分圖像并為它們分配標簽。

        卷積神經網絡 (CNN) 是深度學習圖像分類模型的主要構建塊,通常用于圖像識別、圖像分類、對象檢測和其他類似任務。

        Python 廣泛用于圖像分類問題。TensorFlow 和 Keras 是用于在 Python 中構建圖像分類器的兩個流行包。但是,這兩個庫也可以在 R 環境中使用。本文介紹了在 R 中使用 Keras 構建深度學習圖像分類器模型的分步方法。

        MNIST 時尚圖像分類器

        我們將構建一個圖像分類器,可以對服裝圖像進行分類,例如連衣裙、襯衫和夾克。

        我們將使用 Fashion MNIST 數據集,該數據集包含 70,000 張灰度圖像。每張圖像都是灰度 28 x 28 圖像,分為 10 個不同的類別。每個圖像都附有一個標簽。總共有十個標簽:

        · T恤/上衣

        · 褲子

        · 套衫

        · 裙子

        · 外套

        · 涼鞋

        · 襯衫

        · 運動鞋

        · 包

        · 踝靴

        讓我們首先導入所有必需的庫。

        library(keras)

        library(tidyverse)

        然后使用以下命令直接從 Keras 導入 Fashion MNIST 數據集。此外,將使用 60,000 張圖像來訓練模型,并使用 10,000 張圖像來評估模型對圖像進行分類的學習效果。

        fashion_mnist <- dataset_fashion_mnist()

        c(train_images, train_labels) %<-% fashion_mnist$train

        c(test_images, test_labels) %<-% fashion_mnist$test

        我們現在有四個數組:train_images 和 train_labels 數組包含訓練集,這是模型用來訓練的數據。該模型針對測試集進行驗證,包括 test_images 和 test_label 數組。

        每張圖片都是一個 28 x 28 的數組,像素值范圍從 0 到 255。標簽是從 0 到 9 的整數數組。這些與衣服的類別有關。之后,為每個圖像分配一個標簽。因為類名不包含在數據集中,我們將使用以下命令將它們保存在向量中,并在稍后繪制圖像時使用它們。

        class_names = c('T-shirt/top',

        'Trouser',

        'Pullover',

        'Dress',

        'Coat',

        'Sandal',

        'Shirt',

        'Sneaker',

        'Bag',

        'Ankle boot')

        在我們訓練模型之前,讓我們看一下數據集的格式。使用下面的命令,我們將打印訓練圖像和訓練標簽的尺寸,它們是 60,000 張圖像,每張 28 × 28 像素。

        dim(train_images)

        dim(train_labels)

        同樣,使用以下命令打印測試圖像和測試標簽的尺寸,即 10,000 張圖像,每張圖像的大小為 28 x 28 像素。

        dim(test_images)

        dim(test_labels)

        然后,我們將使用以下命令查看數據集中的示例圖像。

        options(repr.plot.width=7, repr.plot.height=7)

        sample_image <- as.data.frame(train_images[7, , ])

        colnames(sample_image) <- seq_len(ncol(sample_image))

        sample_image$y <- seq_len(nrow(sample_image))

        sample_image <- gather(sample_image, "x", "value", -y)

        sample_image$x <- as.integer(sample_image$x)

        ggplot(sample_image, aes(x = x, y = y, fill = value)) +

        geom_tile() + scale_fill_gradient(low = "white", high = "black", na.value = NA) +

        scale_y_reverse() + theme_minimal() + theme(panel.grid = element_blank()) +

        theme(aspect.ratio = 1) + xlab("") + ylab("")

        在訓練模型之前,必須對數據進行預處理。為了減少像素值,我們必須對數據進行歸一化。目前,所有圖像像素的值都在 0-255 之間,我們想要介于 0 和 1 之間的值。因此,我們將所有像素值除以 255.0 分為訓練集和測試集。

        train_images <- train_images / 255

        test_images <- test_images / 255

        為確保數據格式正確,讓我們查看訓練集中的前 30 張圖像。我們還將在每個圖像下方顯示類名。

        options(repr.plot.width=10, repr.plot.height=10)

        par(mfcol=c(10,10))

        par(mar=c(0, 0, 1.5, 0), xaxs='i', yaxs='i')

        for (i in 1:30) {

        img <- train_images[i, , ]

        img <- t(apply(img, 2, rev))

        image(1:28, 1:28, img, col = gray((0:255)/255), xaxt = 'n', yaxt = 'n',

        main = paste(class_names[train_labels[i] + 1]))}

        現在是時候建立我們的模型了。

        構建模型

        要構建神經網絡,我們需要如下配置模型的層:

        1.卷積或Conv2D層:卷積層從圖像或圖像的一部分中提取特征。我們在這里指定三個參數:

        · 過濾器——這是將在卷積中使用的過濾器的數量。例如,32 或 64。

        · 內核大小——卷積窗口的長度。例如 (3,3) 或 (4,4)。

        · 激活函數——例如,ReLU、Leaky ReLU、Tanh 和 Sigmoid。

        2.Pooling 或 MaxPooling2D 層:該層用于減小圖像的大小。

        3.Flatten Layer:該層將n維數組縮減為一維。

        4.Dense Layer:這一層是全連接的,這意味著當前層的所有神經元都鏈接到下一層。對于我們的模型,第一密集層有 128 個神經元,第二密集層有 10 個神經元。

        5.Dropout Layer:為了防止模型過擬合,該層忽略了一組神經元(隨機)。

        model <- keras_model_sequential()

        model %>%

        layer_conv_2d(filters = 32, kernel_size = c(3,3),

        activation = 'relu', input_shape = c(28, 28, 1)) %>%

        layer_max_pooling_2d(pool_size = c(2,2)) %>%

        layer_flatten() %>%

        layer_dense(units = 128, activation = 'relu') %>%

        layer_dropout(rate = 0.5) %>%

        layer_dense(units = 10, activation = 'softmax')

        在模型準備好進行訓練之前,需要進行一些額外的設置。這些是在模型的編譯步驟中添加的:

        1.損失函數——這個函數評估我們的算法如何有效地表示數據集。根據我們的數據集,我們可以從“categorical_cross_entropy”

        “binary_cross_entropy”和“sparse categorical_cross_entropy”等備選方案中進行選擇。

        2.優化器——有了這個,我們可以調整神經網絡的權重和學習率。我們可以從許多優化器中進行選擇,例如 Adam、AdaDelta、SGD 等。

        3.Metrics – 這些用于評估我們模型的性能。例如,準確度、均方誤差等。

        model %>% compile(

        loss = 'sparse_categorical_crossentropy',

        optimizer = 'adam',

        metrics = c('accuracy')

        我們模型層中的所有參數和形狀都可以使用“summary”函數查看,如下所示。

        summary(model)

        要開始訓練,我們將調用 fit 方法,它將使用訓練和測試數據以及以下輸入來擬合我們的模型:

        history % fit(x_train, train_labels, epochs = 20,verbose=2)

        1.Epochs – 整個數據集通過神經網絡向前和向后發送的次數。verbose – 查看我們輸出的選擇。例如,verbose = 0 不打印任何內容

        2.verbose = 1 打印進度條和每個 epoch 一行,verbose = 2 每個 epoch 打印一行。

        用 20 個 Epoch 運行模型后,我們得到了 97.36% 的訓練準確率。

        score % evaluate(x_train, train_labels)

        cat('Train loss:', score$loss, "n")

        cat('Train accuracy:', score$acc, "n")

        我們可以使用以下命令繪制精度損失圖以及 Epoch :

        plot(history)

        現在我們將看到模型在測試數據集上的表現:

        score % evaluate(x_test, test_labels)

        cat('Test loss:', score$loss, "n")

        cat('Test accuracy:', score$acc, "n")

        我們在測試數據集上獲得了 91.6% 的準確率。我們可以利用訓練好的模型對一些測試圖像進行預測。

        predictions % predict(x_test)

        我們從模型中得到預測,即測試集中每個圖像的標簽。我們來看第一個預測:

        predictions[1, ]

        預測是一組十個數字。這些表達了模特的“信心”。

        作為替代方案,我們還可以使用以下命令直接打印類預測:

        class_pred % predict_classes(x_test)

        class_pred[1:20]

        現在我們將繪制一些帶有他們預測的圖像。正確的預測是藍色的,而錯誤的預測是紅色的。

        options(repr.plot.width=7, repr.plot.height=7)

        par(mfcol=c(5,5))

        par(mar=c(0, 0, 1.5, 0), xaxs='i', yaxs='i')

        for (i in 1:25) {

        img <- test_images[i, , ]

        img <- t(apply(img, 2, rev))

        predicted_label <- which.max(predictions[i, ]) - 1

        true_label <- test_labels[i]

        if (predicted_label == true_label) { color <- 'blue' }

        else

        { color <- 'red' }

        image(1:28, 1:28, img, col = gray((0:255)/255), xaxt = 'n', yaxt = 'n',

        main = paste0(class_names[predicted_label + 1],

        "(",class_names[true_label + 1], ")"),col.main = color)}

        這就是在 R 中使用 Keras 進行圖像分類的方法!

        結論

        在本文中,我們學習了如何在 R 中使用 Keras 構建深度學習圖像分類器。該模型在測試數據上具有很高的準確性。但是,必須記住,準確度可能會根據訓練集而改變。因此,該模型不適用于與訓練圖像不同的圖像。

        以下是本文的一些主要內容:

        Tensorflow 和 Keras 都有官方的 R 支持。就像 Python 一樣,在 R 中設置和訓練模型很容易。本文中的方法可以應用于另一個圖像數據集進行分類,或者可以將訓練好的模型保存并部署為應用程序。

        image.png

               原文標題 : 在 R 中使用 Keras 構建深度學習圖像分類器

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 师宗县| jizzjizz视频| 91熟女视频| 永久免费看mv网站入口亚洲| 色窝窝一区| 夜夜夜影院| 灵山县| metart亚洲裸体中国| 寻甸| 人人干干| 黄总av| 黑人无码av| jizzjizz国产| 成人肏屄视频| 国产精品va| 99xa视频在线观看| 濮阳市| 老司机在线精品| 亚洲AV成人无码久久精品黑人| FUCK老富婆HD| 连平县| 欧美人妖性爱| 成人小说一区二区三区| 精品伊人久久久久7777人| 九九综合色| 曲阳县| 精品久久国产| 中文字幕日产av| a片入口| 3Pav图| 91高清视频在线| 精品国产精品三级精品AV网址| 91视频高清| 久草手机在线| 丁香五月天激情网| 77777AV| 五月综合视频| 一本色道久久综合无码人妻88| 国产女人18毛片18精品| 中文字幕A片无码免费看| 黑人一区|