深度學習入門:Tensorflow實戰Digit Recognizer(一)

2021-02-21 kaggle數據分析

Tensorflow是當前GitHub上最活躍的機器學習項目,本文是Tensorflow實戰Digit Recognizer系列文章的第一篇,介紹如何在MNIST數據集上快速跑出一個模型。

我們在學習一門新的程式語言的時候,第一個項目都是「Hello word」。MNIST在圖像識別領域的地位正如「Hello world」在程式設計師心中的地位,本文將手把手教會大家利用Tensorflow實現一個簡單的Softmax回歸模型,快速完成Kaggle的入門賽Digit Recognizer。

1.Introduction1.1 Digit Recognizer競賽

Digit Recognizer競賽是Kaggle平臺舉辦的新手入門級別的比賽,幫助我們快速入門計算機視覺(CV,Computer Vision)。 
比賽用MNIST數據集,MNIST (「Modified National Institute of Standards and Technology」) 是計算機視覺領域非常著名的數據集,收集了大量的手寫數字,參賽者選手需要通過機器學習算法來識別手寫數字圖片,包括0~9一共10個數字。

1.2 Tensorflow簡介

TensorFlow™ 是一個採用數據流圖(data flow graphs),用於數值計算的開源軟體庫。Google在2015年將Tensorflow開源後,收到業界的追捧而成為當前最為流行的深度學習庫。

Tensorflow的安裝請參考另外一篇文章:深度學習環境搭建。

2.Competition2.1 數據預處理

正則化 
像素點用0~255的數字來表示,為了提高神經網絡的優化SGD的準確性,對數據進行正則化處理。

train_df = train_df.applymap(lambda x: x/255.0).astype(np.float32)test = test.applymap(lambda x: x/255.0).astype(np.float32)

OneHot編碼 
訓練數據集的標籤是0~9的數字,為了方便Softmax分類,調用pandas庫的get_dummies方法轉化為Onehot編碼方式。

label = pd.get_dummies(train['label'])

驗證集劃分 
將數據集劃分為8:2的訓練集和驗證集。

x_train, x_valid, y_train, y_valid = train_test_split(train_df, label, test_size=0.2, random_state=2017)

2.2 Tensorflow回歸模型預測MNIST2.2.1 Softmax回歸模型

定義模型參數

Tensorflow中的Variable表示一個可以修改的張量,可以用於計算輸入值,也可以在計算中被修改。對於Softmax回歸模型中,我們需要定義的權重值w和偏置量b。我們想要784維的輸入像素乘以w得到一個10維的值,所以w的維度是(784,10),b的維度是(10)。

W = tf.Variable(tf.zeros([784,10]))b = tf.Variable(tf.zeros([10]))

定義模型變量

Tensorflow中的placeholder表示一個佔位符,我們可以在Tensorflow運行時輸入這個值。我們定義輸入的像素x和輸入的正確標籤y。

x = tf.placeholder("float", [None, 784])y = tf.placeholder("float", [None,10])

實現模型

Tensorflow已經實現的很多的運算,我們只需要簡單的一行代碼就可以實現我們的函數。

yhat = tf.nn.softmax(tf.matmul(x,W) + b)

這行代碼實現的了我們的Softmax函數。

2.2.2 訓練模型計算Cost Function

我們用交叉熵(cross-entropy),計算損失函數。

cross_entropy = -tf.reduce_sum(y*tf.log(yhat))

首先計算預測的yhat,用tf.lag(yhat)求對數,再乘上正確的標籤y。最後用tf.reduce_sum計算張量元素的和。

實現反向傳播算法

Tensorflow訓練算法非常容易,它對常規的函數已經內置了求導函數,因此可以自動幫我們實現反向傳播算法。

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

我們定義梯度下降算法來最小化cross_entropy,步長為0.01。

模型訓練

訓練之前初始化全局variables,再以64個訓練樣本為mini-batch,訓練我們的模型。

tf.global_variables_initializer().run()train_size = x_train.shape[0]batch = 64for i in range(1000):    start = i*batch % train_size    end = (i+1)*batch % train_size        #print(start, end)    if start > end:        start = 0    batch_x = x_train[start:end]    batch_y = y_train[start:end]      sess.run(train_step,feed_dict={x:batch_x,y_:batch_y})

模型評估

完成模型訓練後,我們需要對模型的性能進行評估,觀察模型的性能是否符合我們的需求。

correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))print(accuracy.eval({x: x_valid, y_: y_valid}))

output:0.91

結束語

我們用Tensorflow實現了Softmax回歸模型,並在MNIST數據集上取得約91%的成績。雖然這個成績比傳統的機器學習算法表現更差,但是,我們對Tensorflow的運行有了一個直觀的認識。在後面的幾篇文章中,我們將用Tensorflow實現更高級的算法,實現可以商用的算法,準確高達99.8%。

公眾號後臺回覆:digit,下載代碼,我用的的python3.5,tensorflow1.4。

(小編最近在刷Toxic比賽,前幾天有個朋友加微信的請再發一次消息,我回你。)

相關焦點

  • 基於TensorFlow的深度學習實戰
    毫不誇張得說,TensorFlow的流行讓深度學習門檻變得越來越低,只要你有Python和機器學習基礎,入門和使用神經網絡模型變得非常簡單。TensorFlow簡介如前所述,TensorFlow是一個深度學習庫,使用這一框架,可以用來構建和測試深度神經網絡。深度學習讓我們能夠以極高的準確性構建複雜的應用程式。
  • 深度學習筆記7:Tensorflow入門
    個人公眾號:數據科學家養成記 (微信ID:louwill12)前文傳送門:深度學習筆記1:利用numpy從零搭建一個神經網絡深度學習筆記2:手寫一個單隱層的神經網絡深度學習筆記3:手動搭建深度神經網絡(DNN)深度學習筆記4:深度神經網絡的正則化深度學習筆記5:正則化與dropout
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    【導讀】麻省理工學院發布一系列深度學習視頻課和代碼實戰,今天給大家介紹的是研究科學家Lex Fridman整理的常用的深度學習七個基本框架實戰,
  • 深度學習筆記13:Tensorflow實戰之手寫mnist手寫數字識別
    作者:魯偉一個數據科學踐行者的學習日記。
  • 最熱門的深度學習框架TensorFlow入門必備書籍
    但進入機器學習和人工智慧領域並不是一件簡單的事情,目前市場上有許多大量的學習資源,許多開發者和想要進入的愛好者往往很難找到適合自己的發展路徑。其實,早在 2015 年底,谷歌就開源了內部使用的深度學習框架 TensorFlow 。眾多研究表明,Tensorflow 是研究深度學習的首選平臺。
  • 從Fashion-Mnist開始,入門Tensorflow與深度學習
    從今天開始,我們進行機器學習領域的最後一塊拼圖——深度學習的學習之旅,以及Tensorflow這個工具的使用。而基於多層級神經網絡的深度學習算法也正是如此。所以,從這個方面來說,深度學習的發展和興起很大程度上是源於人類對自身發展出的智能進行逆向開發的過程。既然人類擁有的我們所謂的智能,很自然的我們就會探索我們這種智能是如何產生的。如果這個過程可以量化並實體化成一套程序放入機器中運行,那麼很自然的,這樣的機器也會理論上和我們人類擁有同樣的智能。
  • 可能是史上最全的Tensorflow學習資源匯總
    的安裝、Tensorflow的語法、基本操作、CNN的一些原理和項目實戰等。,一步步帶你從入門到精通,是初學者學習Tensorflow的最佳教程。2)從Tensorflow基礎知識到有趣的項目應用:https://github.com/pkmital/tensorflow_tutorials同樣是適合新手的教程,從安裝到項目實戰,教你搭建一個屬於自己的神經網絡。
  • TensorFlow 中文資源全集,學習路徑推薦
    入門教程,簡單的模型學習和運行。實戰項目,根據自己的需求進行開發。Mac:https://tensorflow.google.cn/install/install_macWindows:https://tensorflow.google.cn/install/install_windowsLinux:https://tensorflow.google.cn/install/install_linux入門教程官方入門教程
  • 深度學習筆記8:利用Tensorflow搭建神經網絡
    作者:魯偉 一個數據科學踐行者的學習日記。
  • 基於TensorFlow2.0的中文深度學習開源書來了!GitHub趨勢日榜第一
    主要介紹神經網絡的核心理論和共性知識,助於理解深度學習的本質。第四部分是10-15章。主要介紹常見的算法與模型。除此之外,每個章節裡的內容編排也是理論與實戰相結合。「精靈寶可夢數據集」和目錄排版來看,似乎有一絲致敬臺大李宏毅老師的感覺。
  • TensorFlow極速入門
    作者孟曉龍,2016年加入Qunar,目前在去哪兒網機票事業部擔任算法工程師。熱衷於深度學習技術的探索,對新事物有著強烈的好奇心。一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • Tensorflow 全網最全學習資料匯總之Tensorflow 的入門與安裝【2】
    《TensorFlow學習筆記1:入門》連結:http://www.jeyzhang.com/tensorflow-learning-notes.html本文與上一篇的行文思路基本一致,首先概括了TensorFlow的特性,然後介紹了graph、session、variable 等基本概念的含義,以具體代碼的形式針對每個概念給出了進一步的解釋
  • 寫給純小白的深度學習環境搭建寶典:pytorch+tensorflow
    每天給小編五分鐘,小編用自己的代碼,讓你輕鬆學習人工智慧。本文將手把手帶你快速搭建你自己的深度學習環境,然後實現自己的第一個深度學習程序。野蠻智能,小白也能看懂的人工智慧。精講深度學習RNN三大核心點,三分鐘掌握循環神經網絡進行簡單了解。下面進入實戰環節。
  • 推薦| ThoughtWorks 大牛教你入門 Tensorflow
    谷歌深度學習系統 TensorFlow 在工程師圈中引起了很大反響,其開源大大降低了深度學習在各行業中的應用難度,深度神經網絡在很多傳統機器學習數據集上體現出優勢。但如何將深度學習技術,實現圖片識別、文本分析等模型,運用到實際的系統中,還有很多要做的事情。
  • TFLearn:為TensorFlow提供更高級別的API 的深度學習庫
    TFlearn是一個基於Tensorflow構建的模塊化透明深度學習庫。它旨在為TensorFlow提供更高級別的API,以促進和加速實驗,同時保持完全透明並與之兼容。TFLearn功能包括:通過教程和示例,易於使用和理解用於實現深度神經網絡的高級API。
  • 安裝TensorFlow 2.0 preview進行深度學習(附Jupyter Notebook)
    TensorFlow是最流行的深度學習框架之一,大家期待已久的TensorFlow 2.0現在出了Preview版本,並且可以直接通過pip安裝。目前的TensorFlow 2.0 Preview版本可能會包含一些bug,並且不能保證和最終的2.0 Release版一致。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • Keras TensorFlow教程:如何從零開發一個複雜深度學習模型
    本文假設你已經熟悉了 TensorFlow 和卷積神經網絡,如果,你還沒有熟悉,那麼可以先看看這個[10分鐘入門 TensorFlow 教程](http://cv-tricks.com/artificial-intelligence/deep-learning/deep-learning-frameworks/tensorflow-tutorial/)和[卷積神經網絡教程](http://cv-tricks.com
  • 谷歌雲官方:一小時掌握深度學習和 TensorFlow(視頻+50PPT)
    材料有兩部分,是面向工程師的實用型講解,分別為只有 3 小時的忙人和只有 1 小時的超級忙人準備。新智元節選後者,讓你在 2017 春節來臨前,拿出 1 小時學會 TensorFlow 和深度學習。另外,視頻也方便已經是熟手的你複習,說不定還能從中得到新的啟示。