SlideShare a Scribd company logo
Deep Learning
使用TensorFlow
張保榮 教授
國立高雄大學資訊工程學系
目錄
前言----------------------------------------------------------------------------------------P.3
Introduction of Deep Learning I ----------------------------------------------P.6
Step 1--------------------------------------------------------------------------------P.8
Step 2--------------------------------------------------------------------------------P.13
Step 3--------------------------------------------------------------------------------P.17
Introduction of Deep Learning II -----------------------------------------------P.20
Introduction of Deep Learning III ----------------------------------------------P.25
類神經網路建立 ------------------------------------------------------------------------
P.32
CNN ---------------------------------------------------------------------------------P.33
RNN ----------------------------------------------------------------------------------P.63
Keras實做手寫辨識-------------------------------------------------------------------P.85
什麼是Deep learning ?
TensorFlow是deep learning重要套件。
所以在開始之前,我們要先了解一下何謂Deep learning(深度學習)。
「簡單說,深度學習就是一個函數集,如此而已。」
─專攻語音辨識領域深度學習的台大電機系教授李宏毅
機器在學習,那人類要做什麼?
深度學習架構裡,人類要擔心的重點只有一個:「Gradient
Descent」。
我們可以把深度學習想像成有一百萬個學生同時在寫答案,他
們每個人都有不同的思考方式,最後每個人都交出一個不同的
數字。
將所有的答案跟標準答案相減之後(技術上稱為 loss),畫成
一條折線圖(或是複雜一點的 3D 圖),離標準答案最接近的
那個答案,就會在這張圖的最低點,深度學習的目標就是要找
到這個最低點。
最低點代表什麼呢?
代表寫出這個答案的學生,擁有最接近正確答案的思考方式,
接下來我們讓其他學生向這位學生學習,並繼續測試,是否都
能回答正確。
理論上,隨著測試次數越多,正確率就會越高,表示這個機器
已經通過測試,可以投入實戰分析了。
Introduction of Deep Learning I
Framework解釋
第一步:
Deep learning NN model的建立範例
手寫影像辨識
MNIST資料庫
(Mixed National Institute of Standards and Technology
database)
是一個歷史悠久的手寫數字(handwritten digits)資料集。
第二步:
Training Data
Learning Target
Loss
第三步:
How to pick the best function
Introduction of Deep Learning II
為什麼是“Deep”?
Introduction of Deep Learning III
開始 Model 的建立
在手寫數字辨識中,影像資料的部份就是存放成一個巨大的四
維numpy陣列(array),四個維度分別是每一筆資料、影像灰階
值、影像長、影像寬,陣列中的每一個數值都在0到1之間的浮
點數(float),代表了不同影像中各個位置正規化(normalization)
後0到255的灰階值。
每個影像每一格的數字所標記的資訊就存放在另一個陣列中。
程式的第一個部份
將手寫數字影像資料讀取出來,存成兩個陣列X跟Y。
再來就要建構深度學習的類神經網路(Artificial neural network)
架構。
可以使用模組提供的Sequential類別來建構網路架構,再將模組
提供的各個類神經網路層(layer)填進Sequential物件的網路架構,
就可以完成類神經網路架構的建置。
程式的第二個部份
建置完成後,只要呼叫compiler函式進行編譯,再接著呼叫fit函
式並傳入mini batch的數量等參數,就可以開始訓練了。 第一
個模型將使用到一個卷積層、一個池化層(Pooling layer)、一個
內部的完全連接層(Fully connected layer)、和一個以softmax輸
出結果的完全連接層。
程式的第三個部份
只要依次呼叫Sequential物件的add函式將Convolution2D、
MaxPooling2D、Dense等類神經網路層加入就可以了。設定之
後再呼叫compile函式設定loss function為
categorical_crossentropy、並使用adadelta最佳化工具。
程式的第四個部份
為了有資料進行模型訓練跟結果驗證(verify),我們將10,000筆
資料分成兩個部份,前8,000筆做為訓練資料,後2,000筆當成
驗證用的資料。把訓練資料X_train、Y_train和驗證資料X_test、
Y_test餵進fit函式,經過一些時間,就可以得到第一個深度學習
模型的結果了。
雖然深度學習的功能非常強大,但要改進深度學習的效果比傳統的機
器學習模型更難。
因為可以調整的設定和參數太多了,想要在這麼多參數選項中找到一
個最好的排列組合,目前沒有系統化的做法。另外深度學習網路就像
黑盒子(black box),人們不容易理解模型中各網路層的內涵,就無法
做出有效的調整。
TensorFlow中的TensorBoard工具提供了一個視覺化的介面,除了可
以呈視高維資料的分佈,還能方便人們了解各個參數的影響。
建立神經網路
CNN
CNN卷積神經網路
卷積神經網路(CNN)是常見的深度學習網路架構之一,因為網路架構中
的:
卷積層(Convolutional layer) 及 池化層(Pooling layer) ,
強化了模式辨識(Pattern recognition)及相鄰資料間的關係,使卷積神
經網路應用在影像、聲音等訊號類型的資料型態能得到很好的效果。
CNN的結構
主要分為:
○卷積層(Convolutional layer)
○線性整流層(Rectified Linear Units layer, ReLU layer)
○池化層(Pooling Layer)
CNN舉例說明 _ 判斷是O還是X
給CNN一張圖,讓他判斷是O還是X。
我們可以想到辨別圖片最簡單的方法,是直接用圈和叉的圖片
去比對新的圖片,看圖上的符號比較像哪個。
但電腦在比對這些圖片的時候非常刻板。在電腦看來,白色格
子的值為 1,黑色格子的值為 -1。
所以在比對圖片時,如果有任何一個格子的值不相等,電腦就
會認為兩張圖不一樣。
理想上,我們希望不管在平移、縮小、旋轉或變形等情況下,
電腦都能正確判斷符號。這時 CNN 就派上用場了。
特徵(feature)
比起比較整張圖片,藉由在相似的位置上比對大略特徵,CNNs
能更好地分辨兩張圖片是否相同。
卷積層(Convolutional layer)
要計算特徵和圖片局部的相符程度,只要將兩者各個像素上的
值相乘、再將總和除以像素的數量。如果兩個像素都是白色
( 1),乘積就是 1 * 1 = 1;如果都是黑色( -1),乘積就
是 (-1) * (-1) = 1。也就是說像素相符的乘積為 1,像素相異的
乘積為 -1。
以左上右下3*3矩陣做卷積
以左上右下3*3矩陣做卷積
以中間3*3矩陣做卷積
以右上左下3*3矩陣做卷積
池化(pooling)
池化是一個壓縮圖片並保留重要資訊的方法。
池化會在圖片上選取不同窗口(window),並在這個窗口範圍
中選擇一個最大值。
經過池化以後,包含的像素數量會降為原本的四分之一,但池
化後的圖片保留了每個範圍和各個特徵的相符程度。即是,池
化後的資訊更專注於圖片中是否存在相符的特徵,而非圖片中
哪裡存在這些特徵。這能幫助 CNN 判斷圖片中是否包含某項特
徵,而不必分心於特徵的位置。這解決了前面提到電腦非常死
板的問題。
池化(pooling)
線性整流層(Rectified Linear Unit,ReLU)
圖片上的所有負數轉為 0
深度學習
CNNs 還有一項技術——全連結層(fully connected layers)。此技
術會集合高階層中篩選過的圖片,並將這些特徵資訊轉化為票數。在
我們的例子裡有兩個選項:圈或叉。在傳統的神經網路架構中,全連
結層所扮演的角色是主要建構單元(primary building block)。
當我們對這個單元輸入圖片時,它會將所有像素的值當成一個一維清
單,而不是前面的二維矩陣。清單裡的每個值都可以決定圖片中的符
號是圈還是叉,不過這場選舉並不全然民主。由於某些值可以更好地
判別叉,有些則更適合用來判斷圈,這些值可以投的票數會比其他值
還多。所有值對不同選項所投下的票數,將會以權重(weight)或連
結強度(connection strength)的方式來表示。
所以每當 CNN 判斷一張新的圖片時,這張圖片會先經過許多低階層,
再抵達全連結層。在投票表決之後,擁有最高票數的選項將成為這張
圖片的類別。
換句話說,即是再加權後,投票決定最後的判斷為何
CNNs完整過程
CNN實作練習
CNN實作練習
建置一個CNN網路分辨手寫辨識字
CNN實作練習
建置一個CNN網路分辨手寫辨識字
引用函數並且從網路下載mnist 手寫數據庫
Code[ part 1]:
from __future__ import print_function
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
# number 1 to 10 data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義準確度函數
Code[ part 2]:
def compute_accuracy(v_xs, v_ys):
global prediction
y_pre = sess.run(prediction, feed_dict={xs: v_xs, keep_prob: 1})
correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys, keep_prob: 1})
return result
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義初始化變數 定義初始化變數
採用normal distribution , 標準差為0.1 採用常數 , 皆為為0.1
Code[ part 3]:
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)
Code[ part 4]:
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義conv 層 layer padding 方法採用"一樣“
movement代表移動的步數
Code[ part 5]:
def conv2d(x, W):
# stride [1, x_movement, y_movement, 1]
# Must have strides[0] = strides[3] = 1
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):
# stride [1, x_movement, y_movement, 1]
return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義placeholder
將圖片reshape, -1表示會自動算幾組
28,28,1 分別代表寬 高 channel數(像RGB的話就要改3)
Code[ part 6]:
# define placeholder for inputs to network
xs = tf.placeholder(tf.float32, [None, 784]) # 28x28
ys = tf.placeholder(tf.float32, [None, 10])
keep_prob = tf.placeholder(tf.float32)
x_image = tf.reshape(xs, [-1, 28, 28, 1])
# print(x_image.shape) # [n_samples, 28,28,1]
CNN實作練習
建置一個CNN網路分辨手寫辨識字
開始組裝神經網路
1:表示 input_size , 32:表示output_size ,所以這裡表示一張圖總共訓練出32個filter
max_pooling 就是2*2的矩陣中 挑出一個最大的數字 所以大小會變一半
Code[ part 7]:
## conv1 layer ##
W_conv1 = weight_variable([5,5,1,32]) # patch 5x5, in size 1, out size 32
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1) # output size 28x28x32
h_pool1 = max_pool_2x2(h_conv1) # output size 14x14x32
CNN實作練習
建置一個CNN網路分辨手寫辨識字
這裡表示 一張圖訓練出2個filter
Code[ part 8]:
## conv2 layer ##
W_conv2 = weight_variable([5,5, 32, 64]) # patch 5x5, in size 32, out size 64
b_conv2 = bias_variable([64])
h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) # output size 14x14x64
h_pool2 = max_pool_2x2(h_conv2) # output size 7x7x64
CNN實作練習
建置一個CNN網路分辨手寫辨識字
這裡將第2層max_pool 過後的神經元 全部攤平
Code[ part 9]:
## func1 layer ##
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])
# [n_samples, 7, 7, 64] ->> [n_samples, 7*7*64]
h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
CNN實作練習
建置一個CNN網路分辨手寫辨識字
倒數第二層為1024個神經元
最後一層為10個神經元
採用softmax當成最後一層的激活函數
Code[ part 10]:
## fc2 layer ##
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義loss function 以及 優化函數
Code[ part 11]:
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction),
reduction_indices=[1])) # loss
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
CNN實作練習
建置一個CNN網路分辨手寫辨識字
定義Sess 以及初始化
Code[ part 12]:
sess = tf.Session()
if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:
init = tf.initialize_all_variables()
else:
init = tf.global_variables_initializer()
sess.run(tf.initialize_all_variables())
CNN實作練習
建置一個CNN網路分辨手寫辨識字
開始訓練,dropout 0.5代表隨機隱藏掉一半神經元的資訊
科學家們發現這樣可以有效的減少過適(overfitting)
Code[ part 12]:
for i in range(10000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={xs: batch_xs, ys: batch_ys, keep_prob: 0.5})
if i % 50 == 0:
print(compute_accuracy( mnist.test.images[:1000], mnist.test.labels[:1000]))
完成! 按下綠色編譯按鈕,或是Shift + Enter
結果 準確率高達99%
RNN
RNN遞迴神經網絡
遞迴神經網路(RNN) 的目的是用來處理序列數據。
RNNs之所以稱為循環神經網路,即一個序列當前的輸出與前面的輸出
也有關。
具體的表現形式為網絡會對前面的信息進行記憶並應用於當前輸出的
計算中,即隱藏層之間的節點不再無連接而是有連接的,並且隱藏層
的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。
資料順序會影響結果
長短期記憶(Long Short-TermMemory, LSTM)
LSTM是一種含有LSTM區塊(blocks)或其他的一種類神經網路,它可以
記憶不定時間長度的數值,區塊中有一個gate能夠決定input是否重要到
能被記住及能不能被輸出output。
下圖可以看到
右邊的forget gate,當這產生值近似於零,將把區塊裡記住的值忘掉。
左上的output gate,他可以決定在區塊記憶中的output是否能輸出 。
左下的input,經過gate決定input是否能傳入區塊
RNN實作練習
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
引用函數並且從網路下載mnist 手寫數據庫
Code[ part 1]:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
參數設置
Code[ part 2]:
BATCH_SIZE = 100 # BATCH的大小,相當於一次處理50個image
TIME_STEP = 28 # 一個LSTM中,輸入序列的長度,image有28行
INPUT_SIZE = 28 # x_i 的向量長度,image有28列
LR = 0.01 # 學習率
NUM_UNITS = 100 # 多少個LTSM單元
ITERATIONS=8000 # 反覆運算次數
N_CLASSES=10 # 輸出大小,0-9十個數位的概率
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
定義 placeholders 以便接收x,y
Code[ part 3]:
train_x = tf.placeholder(tf.float32, [None, TIME_STEP * INPUT_SIZE])
# 維度是[BATCH_SIZE,TIME_STEP * INPUT_SIZE]
image = tf.reshape(train_x, [-1, TIME_STEP, INPUT_SIZE])
# 輸入的是二維資料,將其還原為三維,維度是[BATCH_SIZE, TIME_STEP,
INPUT_SIZE]
train_y = tf.placeholder(tf.int32, [None, N_CLASSES])
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
定義RNN(LSTM)結構
Code[ part 4]:
rnn_cell = tf.contrib.rnn.BasicLSTMCell(num_units=NUM_UNITS)
outputs,final_state = tf.nn.dynamic_rnn(
cell=rnn_cell, # 選擇傳入的cell
inputs=image, # 傳入的數據
initial_state=None, # 初始狀態
dtype=tf.float32, # 資料類型
time_major=False,
# False: (batch, time step, input); True: (time step, batch, input),這裡根據image結構選擇False
)
output = tf.layers.dense(inputs=outputs[:, -1, :], units=N_CLASSES)
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
計算loss、選擇優化方法、計算正確率、初始化計算圖中的變數
Code[ part 5]:
loss = tf.losses.softmax_cross_entropy(onehot_labels=train_y, logits=output) # 計算loss
train_op = tf.train.AdamOptimizer(LR).minimize(loss) #選擇優化方法
correct_prediction = tf.equal(tf.argmax(train_y, axis=1),tf.argmax(output, axis=1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction,‘float’)) #計算正確率
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # 初始化計算圖中的變數
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
開始訓練
Code[ part 6]:
for step in range(ITERATIONS):
x, y = mnist.train.next_batch(BATCH_SIZE)
test_x, test_y = mnist.test.next_batch(5000)
_, loss_ = sess.run([train_op, loss], {train_x: x, train_y: y})
if step % 500 == 0: # test(validation)
accuracy_ = sess.run(accuracy, {train_x: test_x, train_y: test_y})
print('train loss: %.4f' % loss_, '| test accuracy: %.2f' % accuracy_)
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
開始編譯
結果
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
如果再編譯一次呢?
出現了錯誤:
為什麼呢?
RNN實作練習
利用LSTM建置一個RNN網路分辨手寫辨識字
因為之前編譯的資料會留在記憶體裡面,所以再次編譯的讀取
程式會因為之前的資料而導致錯誤。
Q:那如何解決呢?
A:在最前面的地方加上” tf.reset_default_graph() ”就行了,
它會將先前的暫存和記憶體都清空。
Deep learning 的應用有什麼呢?
從基本的手寫文字辨識、物件識別、人臉辨識,到自
動化圖像描述(Image Captioning)、無人駕駛車(Self-
Driving Car),還有最新的馬賽克還原技術,都是深度
學習和影像辨識整合後的應用。
Tensorflow與MatLab的類神經網路工具比較
有何差異
Tensorflow是建造類神經網路的工具
建造類神經網路的工具很多,要用MatLab的套件當然也可以
如果開發者對MatLab比較熟悉的話當然也是好的選擇
而Tensorflow的優點是使用Python
Python有非常大量Open Source的資源可以使用
而相較於其他Python機器學習套件Tensorflow有內建的Computation Graph可以幫助
開發者建構神經網路
且Tensorflow是Google維護和更新,相較於其它套件更不用擔心無人維護的問題
由於使用者非常多,問題常常都可以在社群中得到解決
我對於其它套件都沒有涉略,也沒辦法每個都去把它學起來做比較
但每個套件都有他的優缺點,並沒有最好的工具,他們大多也都可以完成我們想要的
工作,但以目前大多數的神經網路開發著來說,多數人還是選擇使用Python
使用Keras做手寫辨識
與CNN和RNN一樣,我們從下載並讀取 mnist 資料
Keras實作練習
建置一個手寫辨識
首先匯入 Keras 及相關模組:
Code[ part 1]:
import numpy as np
import pandas as pd
import sys, os
from keras.utils import np_utils
from keras.datasets import mnist
np.random.seed(10)
Keras實作練習
建置一個手寫辨識
讀取與查看 mnist 資料
可知道 training data 共有 60,000 筆; testing data 共有 10,000 筆
Code[ part 2]:
(X_train_image, y_train_label), (X_test_image, y_test_label) = mnist.load_data()
print("t[Info] train data={:7,}".format(len(X_train_image)))
print("t[Info] test data={:7,}".format(len(X_test_image)))
print("t[Info] Shape of train data=%s" % (str(X_train_image.shape)))
print("t[Info] Shape of train label=%s" % (str(y_train_label.shape)))
Keras實作練習
建置一個手寫辨識
定應 plot_image 函數顯示數字影像
Code[ part 3]:
def isDisplayAvl():
return 'DISPLAY' in os.environ.keys()
import matplotlib.pyplot as plt
def plot_image(image):
fig = plt.gcf()
fig.set_size_inches(2,2)
plt.imshow(image, cmap='binary')
plt.show()
建立 plot_images_labels_predict() 函數
後續我們希望能很方便查看數字圖形, 所以我們建立了以下函數:
Code[ part 4]:
def plot_images_labels_predict(images, labels, prediction, idx, num=10):
fig = plt.gcf()
fig.set_size_inches(12, 14)
if num > 25: num = 25
for i in range(0, num):
ax=plt.subplot(5,5, 1+i)
ax.imshow(images[idx], cmap='binary')
title = "l=" + str(labels[idx])
if len(prediction) > 0:
title = "l={},p={}".format(str(labels[idx]), str(prediction[idx]))
else:
title = "l={}".format(str(labels[idx]))
ax.set_title(title, fontsize=10)
ax.set_xticks([]); ax.set_yticks([])
idx+=1
plt.show()
Keras實作練習
建置一個手寫辨識
顯示訓練結果
Code[ part 5]:
def show_train_history(train_history, train, validation):
plt.plot(train_history.history[train])
plt.plot(train_history.history[validation])
plt.title('Train History')
plt.ylabel(train)
plt.xlabel('Epoch')
plt.legend(['train', 'validation'], loc='upper left')
plt.show()
Keras實作練習
建置一個手寫辨識
首先將 image 以 reshape轉換為二維 ndarray並進行 normalization
Code[ part 6]:
x_Train = X_train_image.reshape(60000, 28*28).astype('float32')
x_Test = X_test_image.reshape(10000, 28*28).astype('float32')
print("t[Info] xTrain: %s" % (str(x_Train.shape)))
print("t[Info] xTest: %s" % (str(x_Test.shape)))
x_Train_norm = x_Train/255
x_Test_norm = x_Test/255
Keras實作練習
建置一個手寫辨識
建立模型
Code[ part 7]:
from keras.models import Sequential
from keras.layers import Dense
model = Sequential() # Build Linear Model
model.add(Dense(units=256, input_dim=784, kernel_initializer='normal', activation='relu')) #
Add Input/hidden layer
model.add(Dense(units=10, kernel_initializer='normal', activation='softmax')) # Add
Hidden/output layer
print("t[Info] Model summary:")
model.summary()
print("")
Keras實作練習
建置一個手寫辨識
定義訓練方式(compile)、開始訓練 、顯示出對與錯
Code[ part 8]:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
train_history = model.fit(x=x_Train_norm, y=y_TrainOneHot, validation_split=0.2,
epochs=10, batch_size=200, verbose=2)
if isDisplayAvl():
print("t[Info] Display accuracy pic")
show_train_history(train_history, 'acc', 'val_acc')
print("t[Info] Display loss pic")
show_train_history(train_history, 'loss', 'val_loss')
Keras實作練習
建置一個手寫辨識
評估模型準確率
Code[ part 9]:
scores = model.evaluate(x_Test_norm, y_TestOneHot)
print()
print("t[Info] Accuracy of testing data = {:2.1f}%".format(scores[1]*100.0))
Keras實作練習
建置一個手寫辨識
評估模型準確率 、進行預測
Code[ part 10]:
print("t[Info] Making prediction to x_Test_norm")
prediction = model.predict_classes(x_Test_norm) # Making prediction and save result to prediction
print()
print("t[Info] Show 10 prediction result (From 240):")
print("%sn" % (prediction[240:250]))
if isDisplayAvl():
plot_images_labels_predict(X_test_image, y_test_label, prediction, idx=240)
print("t[Info] Error analysis:")
for i in range(len(prediction)):
if prediction[i] != y_test_label[i]:
print("tAt %d'th: %d is with wrong prediction as %d!" % (i, y_test_label[i], prediction[i]))
print()
Keras實作練習
建置一個手寫辨識
使用 pandas crosstab 建立混淆矩陣 (Confusion matrix)
Code[ part 11]:
print("t[Info] Display Confusion Matrix:")
print("%sn" % pd.crosstab(y_test_label, prediction, rownames=['label'],
colnames=['predict']))
開始編譯!開始訓練!
準確率持續提高
參考資料:
http://ial.eecs.ucf.edu/Reading/Papers/TensorFlow_Tutorial.pdf
——UNIVERSITY OF CENTRAL FLORIDA
https://morvanzhou.github.io
——莫煩Python
http://www.cc.ntu.edu.tw/chinese/epaper/0041/20170620_4105.html
——NTU計算機及網路運算中心
https://brohrer.mcknote.com/zh-
Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html
——卷積神經網路的運作原理
http://darren1231.pixnet.net/blog/post/332753859-
tensorflow%E6%95%99%E5%AD%B8----
%E5%BB%BA%E7%BD%AE%E4%B8%80%E5%80%8Bcnn%E7%B6%B2%E8%
B7%AF%E5%88%86%E8%BE%A8%E6%89%8B%E5%AF%AB%E8%BE%A8%E
8%AD%98
——建置一個CNN網路分辨手寫辨識字
https://zh.wikipedia.org/wiki/%E9%95%B7%E7%9F%AD%E6%9C%9F%E8%A8%9
8%E6%86%B6
——維基百科
https://www.youtube.com/watch?v=xCGidAeyS4M
——ML Lecture 25: Recurrent Neural Network
http://www.cnblogs.com/sandy-t/p/6930608.html
——用tensorflow搭建RNN(LSTM)進行MNIST手寫數字辨識
https://puremonkey2010.blogspot.tw/2017/06/toolkit-keras-mnist.html

More Related Content

What's hot

Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
hungchiayang1
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
hungchiayang1
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
hungchiayang1
 
Ch8 教學
Ch8 教學Ch8 教學
Ch8 教學
hungchiayang1
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
hungchiayang1
 
Sym py edu
Sym py eduSym py edu
Sym py edu
Alisha Smile
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
hungchiayang1
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
hungchiayang1
 
Math basic - v01
Math   basic - v01Math   basic - v01
Math basic - v01
ssuser5e7722
 
Sklearn basic - v01
Sklearn   basic - v01Sklearn   basic - v01
Sklearn basic - v01
ssuser5e7722
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
hungchiayang1
 
Hands-on tutorial of deep learning (Keras)
Hands-on tutorial of deep learning (Keras)Hands-on tutorial of deep learning (Keras)
Hands-on tutorial of deep learning (Keras)
Chun-Min Chang
 
Num py basic(1) - v01
Num py   basic(1) - v01Num py   basic(1) - v01
Num py basic(1) - v01
ssuser5e7722
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
Derek Lee
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
Derek Lee
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
hungchiayang1
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
hungchiayang1
 
Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
hungchiayang1
 
Appendix B 教學
Appendix B 教學Appendix B 教學
Appendix B 教學
hungchiayang1
 
Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
ssuser5e7722
 

What's hot (20)

Ch12 教學
Ch12 教學Ch12 教學
Ch12 教學
 
Ch6 教學
Ch6 教學Ch6 教學
Ch6 教學
 
Ch10 習題
Ch10 習題Ch10 習題
Ch10 習題
 
Ch8 教學
Ch8 教學Ch8 教學
Ch8 教學
 
Ch5 教學
Ch5 教學Ch5 教學
Ch5 教學
 
Sym py edu
Sym py eduSym py edu
Sym py edu
 
Ch9 範例
Ch9 範例Ch9 範例
Ch9 範例
 
Ch10 範例
Ch10 範例Ch10 範例
Ch10 範例
 
Math basic - v01
Math   basic - v01Math   basic - v01
Math basic - v01
 
Sklearn basic - v01
Sklearn   basic - v01Sklearn   basic - v01
Sklearn basic - v01
 
Ch7 教學
Ch7 教學Ch7 教學
Ch7 教學
 
Hands-on tutorial of deep learning (Keras)
Hands-on tutorial of deep learning (Keras)Hands-on tutorial of deep learning (Keras)
Hands-on tutorial of deep learning (Keras)
 
Num py basic(1) - v01
Num py   basic(1) - v01Num py   basic(1) - v01
Num py basic(1) - v01
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
Ch12 範例
Ch12 範例Ch12 範例
Ch12 範例
 
Ppt 1-50
Ppt 1-50Ppt 1-50
Ppt 1-50
 
Ch11 教學
Ch11 教學Ch11 教學
Ch11 教學
 
Appendix B 教學
Appendix B 教學Appendix B 教學
Appendix B 教學
 
Num py basic(2) - v01
Num py   basic(2) - v01Num py   basic(2) - v01
Num py basic(2) - v01
 

Similar to 2017 9-12 Deep Learning / Tensorflow

Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
家雋 莊
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
jhao niu
 
李泽帆_如何创造一门上万人使用的语言 TWEB
李泽帆_如何创造一门上万人使用的语言 TWEB李泽帆_如何创造一门上万人使用的语言 TWEB
李泽帆_如何创造一门上万人使用的语言 TWEB
泽帆 李
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计
Hengyi
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
March Liu
 
在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。
Chih-Hsuan Kuo
 
数据结构回顾
数据结构回顾数据结构回顾
数据结构回顾
Zehua HONG
 
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用FLASH开发者交流会
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
Will Zhou
 
TENSORFLOW深度學習講座講義(很硬的課程)
TENSORFLOW深度學習講座講義(很硬的課程)TENSORFLOW深度學習講座講義(很硬的課程)
TENSORFLOW深度學習講座講義(很硬的課程)
NTC.im(Notch Training Center)
 
Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)
ChengHui Weng
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
Chun-Ming Chang
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
Chun-Min Chang
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
台灣資料科學年會
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
Chong-Kuan Chen
 
ncuma_SymPy符號運算套件.pptx
ncuma_SymPy符號運算套件.pptxncuma_SymPy符號運算套件.pptx
ncuma_SymPy符號運算套件.pptx
NCU MCL
 
R intro 20140716-basic
R intro 20140716-basicR intro 20140716-basic
R intro 20140716-basic
Kevin Chun-Hsien Hsu
 
用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning
家弘 周
 

Similar to 2017 9-12 Deep Learning / Tensorflow (20)

Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
李泽帆_如何创造一门上万人使用的语言 TWEB
李泽帆_如何创造一门上万人使用的语言 TWEB李泽帆_如何创造一门上万人使用的语言 TWEB
李泽帆_如何创造一门上万人使用的语言 TWEB
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Ch12
Ch12Ch12
Ch12
 
在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。在開始工作以前,我以為我會寫扣。
在開始工作以前,我以為我會寫扣。
 
数据结构回顾
数据结构回顾数据结构回顾
数据结构回顾
 
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
详解AS3的内存管理机制,有效释放FLASH内存,减少资源占用
 
Learning python in the motion picture industry by will zhou
Learning python in the motion picture industry   by will zhouLearning python in the motion picture industry   by will zhou
Learning python in the motion picture industry by will zhou
 
TENSORFLOW深度學習講座講義(很硬的課程)
TENSORFLOW深度學習講座講義(很硬的課程)TENSORFLOW深度學習講座講義(很硬的課程)
TENSORFLOW深度學習講座講義(很硬的課程)
 
Ch1
Ch1Ch1
Ch1
 
Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享HITCON CTF 2014 BambooFox 解題心得分享
HITCON CTF 2014 BambooFox 解題心得分享
 
ncuma_SymPy符號運算套件.pptx
ncuma_SymPy符號運算套件.pptxncuma_SymPy符號運算套件.pptx
ncuma_SymPy符號運算套件.pptx
 
R intro 20140716-basic
R intro 20140716-basicR intro 20140716-basic
R intro 20140716-basic
 
用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning用 Keras 玩 Machine Learning
用 Keras 玩 Machine Learning
 

2017 9-12 Deep Learning / Tensorflow