iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
自我挑戰組

TensorFlow 2 30天自我養成計畫系列 第 22

[Day 22]今晚,我想來點TensorFlow加CNN手寫辨識數字

  • 分享至 

  • xImage
  •  
之前其實我們已經有用Keras建立好CNN,過程對筆者這種初學者來說還算好上手,但誠如[Day20]所說的,TensorFlow在一些使用方法較Keras複雜,今天我們來稍微研究一下與Keras相異之處囉!重複之處就不會再多做說明。

建立MNIST資料集步驟
如下圖所示:

其實步驟與Keras相同,就不多做說明。

資料預處理

  1. 鍵入程式碼,如下所示:

    可以發現TensorFlow所鍵入的指令會較為繁雜

建立共用函數

  1. 定義weight: 我們定義weight需輸入參數shape,所以會用此方法tf.truncated_normal初始化weight函數,再加上tf.Variable建立變數,這也是與Keras最大的差異,請鍵入以下指令:
def weight(shape):
    return tf.Variable(tf.truncated_normal(shape,stddev=0.1),
                       name = 'W')
  1. 定義bias
    bias為偏差,所以一樣建立常數tf.constant後,再鍵入tf.variable,如下所示:
def bias(shape):
    return tf.variable(tf.constant(0.1, shape=shape)
    ,name='b')
  1. 定義conv2d
    接下來我們為了要在卷積運算時做使用,我們要建立conv2d,如下所示:
def conv2d(x,W):
    return tf.nn.conv2d(x,W,strides=[1,1,1,1],
    padding='same')
  1. 建立max_pool_2X2
    建立此函數是為了要建立好持化層,如下所示:
def_pool_2X2(x):
    return tf.nn.max.pool(x, ksize=[1,2,2,1],
                         strides=[1,2,2,1],
                         padding='same'

可以發現雖然概念相同,但TensorFlow所需的設定更繁雜,明天再繼續囉!/images/emoticon/emoticon08.gif

Reference: 林大貴(2019):TensorFlow+Keras 深度學習人工智慧實務應用。新北市:博碩文化


上一篇
[Day 21]TensorFlow的實際應用
下一篇
[Day 23]TensorFlow 1與2的比較
系列文
TensorFlow 2 30天自我養成計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言