tensorflow圖像識別入門實戰:使用LeNet5模型實現貓狗分類

2021-01-07 編程高手傑瑞

LeNet5介紹

LeNet-5是一種高效的卷積神經網絡,在論文《Gradient-Based Learning Applied to Document Recognition》中 有詳細的解釋,它在大家熟知的手寫數字識別項目中它得到廣泛地使用。該網絡一共有7層,依次為:卷積層、池化層、卷積層、池化層、全連接層、全連接層(輸出層)。

分類訓練的準備工作

準備數據集設計網絡結構數據集的準備傑瑞在前一篇文章中已經講過了,所以在本篇文章中就不再闡述了,今天主要寫一下網絡結構的設計。今天教程中所使用的模型是LeNet-5模型,如上圖,想必大家已經知道該網絡的大概結構了吧?現在要做的就是用python代碼實現上圖中的網絡結構。

主要函數:

tf.nn.conv2d()

tf.nn.max_pool()

tf.nn.lrn()

tf.nn.conv2d()函數主要用來進行卷積操作,tf.nn.max_pool()函數主要用來進行池化操作,tf.nn.lrn()用來對數據進行歸一化。

代碼實踐

tf.nn.conv2d()的參數:input, filter

傑瑞一個batch的數據形狀為[?, 64*64],所以在數據進入網絡之前必須要將數據形狀改變成[?, 64, 64, 1]。因為tf.nn.conv2d()函數第一個參數input需要[batch_size,圖片高度,圖片寬度,圖片深度]形狀的tensor。

filter就是我們用來進行卷積操作的卷積核,實際上它也是一個tensor,我們通過tf.Variable()函數來定義它,以下是定義卷積核的代碼:

卷積完成之後我們就可以與偏執量一起求和了,最後經過一個激活函數Relu作為池化層的輸入。

池化層

池化層我們通過tf.nn.max_pool()函數來實現,第一個參數就是需要池化的輸入,第二個參數是池化窗口的大小,這裡設置為[1, 3, 3, 1],第三個參數是步長,這裡設置為[1, 1, 1, 1]。

池化過後我們需要進行局部響應歸一化,把反映響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,說白了就是將明顯「特徵」放大,不明顯「特徵」減小。

剩下的5層的創建和上面兩層的創建步驟差不多,所以就不重複解釋了,直接把代碼貼上來:

以上圖片中的代碼按順序排列構成LeNet-5網絡結構。

損失函數與優化方法

傑瑞使用tf.nn.softmax_cross_entropy_with_logits()方法計算交叉熵,並使用tf.train.AdamOptimizer()方法實現梯度下降較小損失值。

開啟會話進行訓練

這裡我們直接開啟會話進行訓練,在下圖中可以看到損失值的變化:

關注《高手傑瑞》,每天更新哦!

相關焦點

  • TensorFlow圖像分類教程
    (本文使用預先標記好的數據以提高效率)訓練:將標記好的數據(圖像)提供給模型。有一個工具將隨機抓取一批圖像,使用模型猜測每種花的類型,測試猜測的準確性,重複執行,直到使用了大部分訓練數據為止。最後一批未被使用的圖像用於計算該訓練模型的準確性。分類:在新的圖像上使用模型。例如,輸入:IMG207.JPG,輸出:雛菊。這個步驟快速簡單,且衡量的代價小。
  • 基於TensorFlow的深度學習實戰
    毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網絡模型變得非常簡單。TensorFlow簡介如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網絡。深度學習讓我們能夠以極高的準確性構建複雜的應用程式。
  • OpenCV+Tensorflow實現實時人臉識別演示
    ,它跟其他人臉識別模型最大的一個不同就是它不是一個中間層輸出,而是直接在歐幾裡德低維空間嵌入生成人臉特徵,這個對以後的各種識別、分類、相似度比較都非常方便。FaceNet網絡設計目標任務有如下1.驗證-驗證是否為同一張臉2.識別-識別是否為同一個人3.聚類-發現人臉具有相同之處的人關於什麼是神經網絡嵌入,這個解釋比較複雜,簡單的說神經網絡的嵌入學習可以幫助我們把離散變量表示為連續的向量,在低維空間找到最近鄰,tensorflow中的word2vec就是用了嵌入。
  • 【官方教程】TensorFlow在圖像識別中的應用
    一系列的模型不斷展現了性能的提升,每次都刷新了業界的最好成績:QuocNet, AlexNet, Inception(GoogLeNet), BN-Inception-v2。谷歌的以及其它的研究員已經發表了論文解釋這些模型,但是那些結果仍然很難被重現。我們正在準備發布代碼,在最新的模型Inception-v3 上運行圖像識別任務。
  • 深度學習入門:Tensorflow實戰Digit Recognizer(一)
    Tensorflow是當前GitHub上最活躍的機器學習項目,本文是Tensorflow實戰Digit Recognizer系列文章的第一篇,介紹如何在
  • 使用Python+Tensorflow的CNN技術快速識別驗證碼
    目前,在圖像識別和視覺分析研究中,卷積神經網絡(CNN)技術的使用越來越多。Tensorflow 是由 Google 團隊開發的神經網絡模塊,短短幾年間, 就已經有很多次版本的更新。最近我也在自學Tensorflow,想通過卷積神經網絡快速識別整塊驗證碼(不分割字符)。期間也碰到許多問題,諸如軟體安裝,Tensorflow版本差異等。
  • 機器學習進階筆記| 利用TensorFlow實現智能數字識別
    TensorFlow完全開源,任何人都可以使用,可以在小到一部智慧型手機、大到數千臺數據中心伺服器的各種設備上運行。目錄1. Mnist數字識別項目介紹2. 準備工作申請一臺UCloud雲主機配置Tensorflow環境3.
  • 圖像分類任務中,Tensorflow 與 Keras 到底哪個更厲害?
    讓我們看看這個問題在圖像分類的實際應用中的答案。在此之前,先介紹Keras和Tensorflow這兩個術語,幫助你在10分鐘內構建強大的圖像分類器。TensorflowTensorflow是開發深度學習模型最常用的庫。它是有史以來最好的庫,在日常實驗中被許多極客選擇。
  • 可能是史上最全的Tensorflow學習資源匯總
    2)從Tensorflow基礎知識到有趣的項目應用:https://github.com/pkmital/tensorflow_tutorials同樣是適合新手的教程,從安裝到項目實戰,教你搭建一個屬於自己的神經網絡。
  • TensorFlow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 基於TensorFlow和Keras的圖像識別
    TensorFlow/KerasTensorFlow是Google Brain團隊創建的一個Python開源庫,它包含許多算法和模型,能夠實現深度神經網絡,用於圖像識別/分類和自然語言處理等場景。TensorFlow是一個功能強大的框架,通過實現一系列處理節點來運行,每個節點代表一個數學運算,整個系列節點被稱為「圖」。
  • 基於OpenCV與tensorflow實現實時手勢識別
    公眾號【OpenCV學堂】,致力於計算機視覺開發技術傳播,原創技術文章200+的,涉及OpenCV開發、tensorflow開發、模型解析與訓練、傳統圖像處理算法解析,對圖像與視覺感興趣的強烈推薦關注!
  • TensorFlow開發者證書 中文手冊
    要獲得證書需要理解如何使用計算機視覺、卷積神經網絡、自然語言處理以及真實世界的圖像數據和策略來構建TensorFlow模型。用深層神經網絡和卷積神經網絡建立圖像識別、目標檢測、文本識別算法使用不同尺寸的真實圖像通過卷積提取體現特徵,理解計算機如何「看到」信息,繪製損失和精度曲線嘗試防止過擬合的策略,包括數據增強和dropout
  • Tensorflow官方視頻課程-深度學習工具 TensorFlow入門
    課程首頁    https://cn.udacity.com/course/intro-to-tensorflow-for-deep-learning--ud187 你將學到什麼    課程 1 什麼是人工智慧和機器學習?
  • Tensorflow實戰系列:手把手教你使用LSTM進行文本分類(附完整代碼)
    【導讀】專知小組計劃近期推出Tensorflow實戰系列,計劃教大家手把手實戰各項子任務。
  • 深度學習筆記13:Tensorflow實戰之手寫mnist手寫數字識別
    數據挖掘與機器學習,R與Python,理論與實踐並行。個人公眾號:數據科學家養成記 (微信ID:louwill12)前文傳送門:深度學習筆記1:利用numpy從零搭建一個神經網絡深度學習筆記2:手寫一個單隱層的神經網絡深度學習筆記3:手動搭建深度神經網絡(DNN)深度學習筆記4:深度神經網絡的正則化深度學習筆記5:正則化與dropout
  • TF2.0深度學習實戰(一):分類問題之手寫數字識別
    手寫數字識別是一個非常經典的圖像分類任務,經常被作為深度學習入門的第一個指導案例。相當於我們學程式語言時,編寫的第一個程序「Hello World !」。不一樣的是,入門深度學習,需要有一定量的理論基礎。手寫數字識別是基於MNIST數據集的一個圖像分類任務,目的是通過搭建深度神經網絡,實現對手寫數字的識別(分類)。
  • 圖像分類:一個更魯棒的場景分類模型
    如何根據圖像的視覺內容為圖像賦予一個語義類別(例如,教室、街道等)是圖像場景分類的目標,也是圖像檢索、圖像內容分析和目標識別等問題的基礎。但由於圖片的尺度、角度、光照等因素的多樣性以及場景定義的複雜性,場景分類一直是計算機視覺中的一個挑戰性問題。本次任務從400萬張網際網路圖片中精選出8萬張圖片,分屬於80個日常場景類別,例如航站樓、足球場等。每個場景類別包含600-1100張圖片。
  • tensorflow機器學習模型的跨平臺上線
    作者:劉建平編輯:黃俊嘉在用PMML實現機器學習模型的跨平臺上線中,我們討論了使用PMML文件來實現跨平臺模型上線的方法