You are on page 1of 187

Edge AI教案(PPT)系列之(3)

RNN時序性預測模型
&耐能Edge AI開發
By 高煥堂 團隊
歡迎光臨

Edge AI
開發者
俱樂部

網址: https://linktr.ee/Edge.AI
1 時間序列資料
與RNN模型
時間序列資料

介紹時間序列資料(數據)

• 時間序列資料(Times series data)意味著資料點是相互依


賴的。

• 時間( t ) 的資料依賴于時間( t-1 )的資料。例如股票價


格、對話等時間序列資料。
時間序列資料

以學校宿舍餐廳爲例

• 學校宿舍每天晚上都會供應晚餐。

• 其中,每天的晚餐的安排是有規律的,就是每周從星
期一到星期五不斷地循環。

• 如果昨天吃披薩,今天就是壽司;如果昨天吃壽司,
今天就會是鬆餅,非常有規律。如下圖:
以學校宿舍餐廳爲例

(t-1) (t)
圖片來源 --- https://docs.google.com/presentation/d/1hqYB3LRwg_-
ntptHxH18W1ax9kBwkaZ1Pa_s3L7R-2Y/edit#slide=id.g1e0528c0bb_0_48
時間序列資料

想一想…

• 如果您昨天不在宿舍裏吃晚餐,那麽您是否就無法推
測今天晚上將是什麽餐點?

• 當然可以的。因爲您可以利用前天晚上的餐點資料,
來預測昨天晚上的餐點。然後,也就能預測今晚的餐
點了。

• 所以,我們不只能利用昨天晚上的餐點來預測今晚的
餐點,而且還能利用今晚預測的結果,來進一步的明
天、後天的晚餐,等等。
時間序列資料

想一想…
時間序列資料

昨晚資料欠缺也沒關係的
時間序列資料

昨晚的預測,可以推論出今晚的預測值
於是得出:RNN( Recurrent Neural Network)網路
於是得出:RNN( Recurrent Neural Network)網路
時間序列資料

RNN的圖示

https://www.cs.toronto.edu/~tingwuwang/rnn_tutorial.pdf
時間序列資料

各種不同形式的RNN

https://calvinfeng.gitbook.io/machine-learning-notebook/supervised-learning/
時間序列資料

各種不同形式的RNN

https://calvinfeng.gitbook.io/machine-learning-notebook/supervised-learning/
其中的Output是可有可無的

https://blog.floydhub.com/a-beginners-guide-on-recurrent-neural-
networks-with-pytorch/
其中的Output是可有可無的

輸出
預測值

(t-5)餐點 (t-4)餐點 (t)餐點


複習:
2 RNN基本演算法
RNN基本演算法

以二進位加法是爲例

(011) 2 + (011) 2 = (110) 2


RNN基本演算法

以二進位加法是爲例

( 0 1 1 )2

( 0 1 1 )2

進位1
0
(t) (t-1) (t-2)
RNN基本演算法

以二進位加法是爲例

( 0 1 1 )2

( 0 1 1 )2

進位1 進位1
1 0
(t) (t-1) (t-2)
RNN基本演算法

以二進位加法是爲例

( 0 1 1 )2

( 0 1 1 )2

進位0 進位1
1 1 0
(t) (t-1) (t-2)
RNN基本演算法

以二進位加法是爲例

( 0 1 1 )2

( 0 1 1 )2

進位0 進位1
1 1 0
(t) (t-1) (t-2) [1, 1] t-2
[1, 1] t-1
[0, 0] t
y0

wo

wp
h0 h0

h1 h1

w
x0 x1

[1, 1] t-2
[1, 1] t-1
(011) 2 + (011) 2 = (110) 2 [0, 0] t
y0

wo

wp
h0 h0

h1 h1

w
[0, 0] (Initial) x0 x1

[1, 1] t-2
[1, 1] t-1
[0, 0] t
[ y0 ] (t-2)
y0

wo

wp
h0 h0

h1 h1

w
[0, 0] (Initial) x0 x1

[h0, h1] (t-2)


[1, 1] t-2
[1, 1] t-1
[0, 0] t
[ y0 ] (t-2)
y0

wo

wp
h0 h0

h1 h1

w
[0, 0] x0 x1

[h0, h1] (t-2)


[1, 1] t-2
[1, 1] t-1
[0, 0] t
[ y0 ] (t-2)
y0
[ y0 ] (t-1)
wo

wp
h0 h0

h1 h1

w
[0, 0] x0 x1
[h0, h1] (t-2)
[1, 1] t-2
[h0, h1] (t-1) [1, 1] t-1
[0, 0] t
[ y0 ] (t-2)
y0
[ y0 ] (t-1)
wo

wp
h0 h0

h1 h1

w
[0, 0] x0 x1
[h0, h1] (t-2)
[1, 1] t-2
[h0, h1] (t-1) [1, 1] t-1
[0, 0] t
[ y0 ] (t-2)
y0
[ y0 ] (t-1)
wo
[ y0 ] (t )
wp
h0 h0

h1 h1

w
[0, 0] x0 x1
[h0, h1] (t-2)
[1, 1] t-2
[h0, h1] (t-1) [1, 1] t-1
[0, 0] t
RNN基本演算法

以二進位加法是爲例

[1, 1] t-2
輸入值(X) [1, 1] t-1
[0, 0] t
訓練RNN
3 -- 正向推演
正向推演(Feed forward)

以二進位加法是爲例

Ex. (011) 2 + (011) 2 =( 110)2


Ex. (011) 2 + (011) 2 = ( 1 1 0 ) 2
Ex. (011) 2 + (011) 2 = ( 1 1 0 ) 2
Ex. (011) 2 + (011) 2 = ( 1 1 0 ) 2
0 1 1

Ex. (011) 2 + (011) 2 = ( 1 1 0 ) 2


z0 0 z1 1 z2 1

wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
z0 0 z1 1 z2 1
Error0 Error1 Error2

wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
歡迎加入<AI設計IC(晶片)>
LINE討論群,請用手機掃描:

台灣AI高通量計算 研發中心

高煥堂 主任 邀請您
訓練RNN
4 -- 反向傳播
0 0 0 1 0 1
y0 y1 y2 Error
=1
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 1 0 1
y0 y1 y2 Error
=1
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 1 0 1
y0 y1 Error y2 Error
=1 =1
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 1 0 1
y0 y1 Error y2 Error
=1 =1
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 .2 1 0.15 1
y0 y1 Error y2 Error
= 0.8 = 0.85
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 .2 1 0.15 1
y0 y1 Error y2 Error
= 0.8 = 0.85
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 .2 1 0.15 1
y0 y1 Error y2 Error
= 0.8 = 0.85
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 .2 1 0.15 1
y0 y1 Error y2 Error
= 0.8 = 0.85
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
0 0 0 .3 1 0.25 1
y0 y1 Error y2 Error
= 0.7 = 0.75
wo wo wo

wp wp
Hidden Hidden Hidden

w w w
x0 x1 x2 x3 x4 x5
1 1 1 1 0 0
訓練RNN模型

(011) 2 + (011) 2 = (110) 2

[1, 1] t-2
[1, 1] t-1
[0, 0] t

輸入值(X)
訓練RNN模型

(011) 2 + (011) 2 = (110)


2

[1, 1] t-2 [0] t-2


[1, 1] t-1 [1] t-1
[0, 0] t [1] t

輸入值(X) 目標值(T)
訓練RNN模型

以二進位加法是爲例

T[0] = [[0], [1], [1]]

目標值(T)

X[0] = [[1, 1] , [1, 1], [0, 0]]

輸入值(X)
RNN醫療應用
5 -- 搭配NLP模型
5.1
簡介NLP在醫療上的應用
• NLP

• 自然語言處理(NLP:Natural Language
Processing)是人工智慧的一項分支,它使電腦能够
理解和解釋人類的語音和文句,更善解人意。

• 它的工作流程是:NLP系統首先“整理”文本資料
集,將資料組織爲更具邏輯性的形式,例如將文本
(Text)分解爲較小的語義單元(Token)。幷轉換爲向
量,讓NLP系統更易于探索資料裏潜藏的規律。
1. 將Text分解成Sentences:

# txx01.py
import nltk
from nltk import sent_tokenize
nltk.download('punkt')

text = "My joints feel so pain. I have heart flutters, and


irregular heartbeats(arrhythmias). "
ss = sent_tokenize(text)
print(ss)

# End
此程式輸出:

['My joints feel so pain.', 'I have heart flutters, and


irregular heartbeats(arrhythmias).']
2. 將分解出來的Sentences,存入檔案裏:

# txx02.py
import nltk
from nltk import sent_tokenize

nltk.download('punkt')
text1 = "My joints feel so pain. I have heart flutters, and
irregular heartbeats(arrhythmias). "
text2 = "I have a little bit abdominal pain."
text3 = "I usually feel a lack of energy."
ss1 = sent_tokenize(text1)
ss2 = sent_tokenize(text2)
ss3 = sent_tokenize(text3)
……
2. 將分解出來的Sentences,存入檔案裏:

……
with open('c:/oopc/myText.txt', 'w') as the_file:
for i in range(len(ss1)):
the_file.write(ss1[i]+'\n')
for i in range(len(ss2)):
the_file.write(ss2[i]+'\n')
for i in range(len(ss3)):
the_file.write(ss3[i]+'\n')
此程式誕生一個檔案:
檔案的內容:
3. 將Sentence分解出Words:

# txx03.py
import nltk
#from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize

text = 'I have heart flutters, and irregular


heartbeats(arrhythmias).'
print(word_tokenize(text))

# End
此程式輸出:

['I', 'have', 'heart', 'flutters', ',', 'and', 'irregular',


'heartbeats', '(', 'arrhythmias', ')', '.']
4. 將Text裡的各Word出現頻率,計算出來:

# txx04.py
import nltk
#from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize

with open ('c:/oopc/myText.txt', "r") as myfile:


data=myfile.read().replace('\n', ' ')

data = data.split(' ')


fdist1 = nltk.FreqDist(data)
print (fdist1.most_common(50))

# End
此程式輸出:
5. 將Word(中英文)轉換出向量(Word2Vec):
# BERT範例程式
import os

# 設置預訓練模型的路徑
pretrained_path = 'c:\oopc\chinese_L-12_H-768_A-12'
config_path = os.path.join(pretrained_path, 'bert_config.json')
checkpoint_path = os.path.join(pretrained_path, 'bert_model.ckpt')
vocab_path = os.path.join(pretrained_path, 'vocab.txt')

# 構建字典
from keras_bert import load_vocabulary
token_dict = load_vocabulary(vocab_path)

# Tokenization
from keras_bert import Tokenizer
tokenizer = Tokenizer(token_dict)
# 繼續(Continued)
# (接續上頁)
# 載入預訓練模型
from keras_bert import load_trained_model_from_checkpoint
model = load_trained_model_from_checkpoint(config_path,
checkpoint_path)
text = ‘我關節痛'
tokens = tokenizer.tokenize(text)
indices, segments = tokenizer.encode(first=text, max_len=512)
print(indices[:10])
print(segments[:10])

# 提取特徵
import numpy as np
predicts = model.predict([np.array([indices]), np.array([segments])])[0]
for i, token in enumerate(tokens):
print(token, predicts[i].tolist()[:5])

# End
BERT 模型的使用主要有兩種用途:

• 當作文本特徵提取的工具,類似Word2vec模型一樣

• 作爲一個可訓練的層,後面可接入客制化的網路,做遷移學習
• BERT可以很好的解决sentence-level的建模問
題,例如:Next Sentence Prediction的預訓練
任務,像詩詞對句的Fine-tuning應用情境。如
下:
5.2
BERT應用于Medicare
BERT應用于Medicare

• BERT is pre-trained on a large corpus of unlabelled


text including the entire Wikipedia(that’s 2,500 million
words!) and Book Corpus (800 million words).

• Once the contextual word embeddings is trained, a


signal linear layer classification model is trained for
tacking named-entity recognition (NER), de-
identification (de-ID) task or sentiment classification.
https://arxiv.org/ftp/arxiv/papers/2005/2005.12833.pdf

• 醫療資料挖掘發展迅速,然而過去許多醫療數據(如
電子病歷資料)仍然以自然語言文本形式存在。

• 由于自然人的學習能力有限,因此通過NLP來輔助
匯集醫療知識和資料挖掘的工作,然後將知識提煉
出來,萃取有用資訊,最終形成AI智慧。
• https://www.researchgate.net/publication/341668475_Med-
BERT_pre-trained_contextualized_embeddings_on_large-
scale_structured_electronic_health_records_for_disease_prediction
• One way to improve the word accuracies is to use
NLP (Natural Language Processing) techniques to
replace incorrect words with correct ones. In this
blog, we will use a spell checker and BERT (pre-
trained NLP model) to improve OCR accuracy.

• BERT models can be used for a variety of NLP


tasks, including sentence prediction, sentence
classification, and missing word prediction.

https://global.hitachi-solutions.com/blog/nlp-in-healthcare
範例:命名實體識別(NER:Name Entity Recognition)

生物NER,是從生物醫學文本中識別出指定類型的名稱,比如
基因、蛋白質、核糖核酸、去氧核糖核酸、疾病、細胞、藥物
的名稱等。

由于生物醫學文獻的規模龐大,各種專有名詞不斷涌現,一個
專有名詞往往有很多同義詞,而且普遍存在大量的縮寫詞,人
工識別費時費力,因此如何對命名實體進行識別就變得尤爲重
要。

命名實體識別是文本挖掘系統中的一個重要的基礎步驟,命名
實體識別的準確程度是其他文本挖掘技術如信息提取或文本分
類等的先决條件。
5.3
以血鐵沉積分類器爲例
6. 將剛才<血鐵沉積症>的Named-Entities(即Words)
出現頻率,以及向量,做爲AI模型的X空間資料。
7. 繼續貼上分類標簽(Class Label),就成爲一個AI分類
模行了:
• 這個AI模型:來學習人類專家的果因性智慧。

Y:
X: 各器官
血鐵沉積 W&B
血鐵沉積
症狀 程度
6項症狀 血鐵沉積
(果) 程度(因)
• 這個果因性AI模型,搭配其他Regression因果性AI
模型,成爲美好的組合:

• 一個做因果性思考,另一個做果因性思考。

• 常常可以幫助人類更多。
5.4
分類器與RNN的完美組合
X W&B
Y
X Y

W&B

器官 輸血量 排鐵劑量 器官
狀態(t-1) (t-1) (t-1) 狀態(t)
X :輸入(層)特徵

Y :輸出(層)特徵

W&B
Y :輸出(層)特徵

X :輸入(層)特徵
Y:輸出特徵(t)

X:輸入特徵(t)
Y:器官狀態(t-1) Y:輸出特徵(t)

器官 器官
狀態(t-2) 狀態(t-1)
輸血量 輸血量
(t-2) 排鐵劑量 (t-1)
(t-2) 排鐵劑量
(t-1)
Y:輸出特徵(t-1)

Y:輸出特徵(t)
H層
(t-2)

X:輸入特徵(t-2) X:輸入特徵(t-1)
Y:輸出特徵(t-1) Y:輸出特徵(t)

H層
H層(t-1)
(t-2)

X:輸入特徵(t-2) X:輸入特徵(t-1)
Y:輸出特徵(t-1) Y:輸出特徵(t)

初期H值

X:輸入特徵(t-2) X:輸入特徵(t-1)
器官
狀態

H值

初期H值

輸血量 排鐵劑量
上述模型背後的Assumption:

• 果:各器官因輸血而受到影響。

• 因:輸血方案。

• 人的期望:從果追溯其因,然後提出來改善因,就
能改變果。
于是,人機共舞模式是:

• AI基于單純回歸模型:找出因果性,就
• 能提出風險預警,來幫助人類。

• 人的任務:基于AI的預警,從果追溯其
• 真正的因,然後改善因,來改變果。
它的主要Limitations是:

• 單純回歸模型:AI找出的只是相關性,
• 不一定是真正的<因果性>。

• 真正的因果性:仍完全依賴于人類專家。
改善的途徑之一是:

• 增添幾個搭配的AI模型:來學習人類專家的果因性智
慧。

• 例如,讓AI像人類專家一樣,從輸血前的ECG心電
圖,可以删除患者心悸是來自心臟機能萎縮之因,就
能更確定患者心悸,主要是源于輸血之因。
PS.

• 樸素的Regression Model只依賴資料相關性,幷無法
像人類一樣進行<果因性>推論。

• 此時,可以建立監督式學習的AI模型,這模型的輸入
值代表AI可以觀察到的果。

• 而人類專家在模型裏貼上標簽(Label)來代表人類專家
心中認定的因。然後讓機器學習,AI就可學會了人類
專家的果因性推理了。
可參閱這本書:
如果縮小上述模的範圍:

※ 新的Assumption:

• 果:因輸血而出現的血鐵沉積症狀,如:心悸、關節
痛、疲倦、體重消失等。

• 因:輸血方案。

• 人的期望:從果追溯其因,然後提出來改善因,就能
改變果。
Y:血鐵沉積症狀(t-1) Y:血鐵沉積症狀(t)

初期H值

輸血量 排鐵劑量 輸血量 排鐵劑量


(t-2) (t-2) (t-1) (t-1)
血鐵沉積
症狀

H值

初期H值

輸血量 排鐵劑量
練習一下:

• 增添一個搭配的AI模型:來學習人類專家的果因性智
慧。

Y:
X: 各器官
血鐵沉積 W&B
血鐵沉積
症狀 程度
6項症狀 血鐵沉積
(果) 程度(因)
模型-1

模型-2
RNN設計範例
6 -- 以血鐵沉積爲例
以血鐵沉積爲例

• 長期輸血會導致過多的鐵質累積在體內,造成身體嚴重的
傷害,尤其是心臟與肝臟,甚至可能造成生命的危險。

• 例如,一位長期輸血者的時序性數據,如下:
Hidden
初期值
wp
[0,0,0,0]

4 1 2
wp
[0,0,0,0]

4 1 2
wp
[0,0,0,0]

4 1 2
[0.6, 0.5, wp
0.6, 0.4]

2 1 0
[0.6, 0.5, wp
0.6, 0.4]

2 1 0
wp
[0,0,0,0]

4 1 2
[0.5, 0.7, wp
0.3, 0.6]

3 2 0
[0.5, 0.7, wp
0.3, 0.6]

3 2 0
[0.5, 0.7, wp
0.3, 0.6]

3 2 0
RNN模型設計範例

此模型的輸入值與目標值

T[0] = [[2], [3], [4]]

目標值(T)

X[0] = [[4,1,2] , [2,1,0], [3,2,0]]

輸入值(X)
7 範例實現
-- 血鐵沉積RNN模型
-- 使用Pytorch
使用Pytorch

• 在這個步驟裡,會使用到Pytorch建模框架。

Toolchain
Toolchain 推論引擎
推論引擎
Pytorch
Pytorch (優化器)
(優化器) (Emulator)
(Emulator)

*.onnx 耐能標準
耐能標準
*.onnx
*.onnx *.onnx
*.onnx
使用Pytorch

延續上一小節的血鐵沉積RNN範例
使用Pytorch

延續上一小節的血鐵沉積RNN範例
many to many
many to one
many to one
many to one

• 上圖也相當於:
詳細的權重(W),表示如下圖:
h0
設定 h[ ]
h1 初值爲0
h2
h3

x0 x1 x2 x0 x1 x2 x0 x1 x2
h0
設定 h[ ]
h1 初值爲0
h2
h3
wp

w
x0 x1 x2 x0 x1 x2 x0 x1 x2
wp
h0
h1 y
h2
h3
w
x0 x1 x2 x0 x1 x2
wp
h0
h1 y
h2
h3
w
x0 x1 x2
Delta&
Error
h0 wo
h1 y
h2
h3
Delta& Delta&
Error Error
h0 wo
h1 y
h2
h3
Delta& Delta&
Error Error
wp
h0
h1
h2
h3
wh
x0 x1 x2
Delta& Delta&
Error Error
wp
h0
h1
h2
h3
w
x0 x1 x2
Delta&
Error

w
x0 x1 x2
使用Pytorch

撰寫Python程式

定義
RNN模型
撰寫Python程式
準備
訓練資料

建立
RNN模型

設定
反向傳播參數
撰寫Python代碼

• 訓練1000回合:
撰寫Python代碼

匯出
*.onnx檔案
使用Pytorch

輸出測試結果:
使用Pytorch

匯出*.onnx檔案
也將模型存入*.onnx檔案裡

Toolchain 推論引擎
Pytorch
(優化器) (Emulator)

*.onnx 耐能標準
*.onnx
8 優化模型:
使用耐能Toolchain
使用Toolchain
• 在上一小節,已經使用Pytorch建立一個RNN時序性
• 預測模型了。並且匯出為rnn.onnx模型檔案。

• 接下來,就繼續對這個模型,來進行優化,然後輸出
耐能(Kneron)的標準ONNX檔案。於此,將它取名為:
rnn_opt.onnx。
使用Toolchain
• 將模型優化,然後輸出標準ONNX檔案
8.1

準備2支小程式
使用Toolchain
• 在這個步驟,需要使用到耐能公司提供的Toolchain
工具箱。關於如何安裝及使用耐能Toolchain,請您
閱讀這份文件:

• 若需要,可來信索取
Email:misoo.tw@gmail.com
使用Toolchain
• 在這份文件裡,有詳細的範例指引您快速安裝
Docker Desktop。

• 然後匯入耐能提供的Toolchain鏡像(Docker Image)。

• 就能在Docker容器(Container)裡使用Toolchain,來
將上述的rnn.onnx模型進行優化動作了。
使用Toolchain
• 只要依循這份文件裡的範例:

• 就會看到2支已經寫好的小程式:

1、StartDocker.bat
2、Owl777_convert.py
使用Toolchain
• 就可以把它們複用(Reuse)過來。

• 於是,把它們複製到 c/Users/misoo/ox/目
錄區裡:
使用Toolchain
• 其中的StartDocker.bat是一個Windows的批
次檔(Batch File)。

• 其內容為:
使用Toolchain
• 它是用來快速(便捷)啟動Docker容器。

• 您不需要去更改它,待會兒直接使用即可。
使用Toolchain
• 接下來,需要來修改Owl777_convert.py程式碼。

• 請開啟(可使用Widows記事本或Python Shell)其中
的Owl777_convet.py程式檔。如下:
使用Toolchain
• 然後,只要更改上圖的紅色框框裡的’檔案
名稱’即可。如下:
使用Toolchain
• 最後,把它存檔。也可以更改檔名。

• 例如,取個新檔名(mfcc_convert.py),如下:
8.2

展開優化動作
快捷啟動Docker容器

• 使用檔案總管,瀏覽到上圖裡的c:/Users/misoo/ox/
目錄區,並點選<StartDocker>批次檔,就會執行
它,就啟動 Docker如下:
展開<優化>過程,並輸出結果

• 剛才已經寫完了mfcc_convert.py程式。並且放置於
c:/Users/misoo/ox/目錄區裡,如下:
展開<優化>過程,並輸出結果

• 接下來,將c:/Users/misoo/ox/目錄區裡的
rnn_convert.py程式複製到/workspace/目錄區裡,
使用下述的命令:

cp /docker_mount/rnn_convert.py .

• 請留意:尾巴有一個句點( . ),句點前要有空格。
如下:
展開<優化>過程,並輸出結果

• 於是,就把這支App複製到/data1/目錄區裡了。
展開<優化>過程,並輸出結果

• 最後,就來執行這支App,使用下述的命令:

python /data1/rnn_convert.py

• 於是,展開<優化>過程,如下畫面:
生成了耐能的
標準onnx檔案,
這是input_name
(下一小節會用到)
展開<優化>過程,並輸出結果

• 這樣就便捷地進行<優化>,而生成了mfcc_opt.onnx
檔案,並且放置於c:/Users/misoo/ox/目錄區裡。

• 如下:
使用Toolchain
• 將模型優化,然後輸出標準ONNX檔案
展開<優化>過程,並輸出結果

• 於是,模型優化成功了。

• 現在,請您先關閉(close)這個命令列視窗。也就是
關閉了Docker容器。
9 進行推論
--使用onnxruntime
或ktc.inference
推論引擎
進行推論
• 將模型優化,然後輸出標準ONNX檔案
進行推論

• 例如,可以在Windows空間裡進行推論。也可
以Docker容器裡進行推論。也可以在耐能KL520
硬體設備裡進行推論。
9.1

準備推論(預測)
-- 撰寫一支App
撰寫一支App,來引導推論

• 接下來,基於上一節已經優化的rnn_opt.onnx來進行
推論;並且輸出預測(Predict)結果。

• 於是,就來寫一支Python程式,它將啟動onnxruntime
推論引擎,及載入rnn_opt.onnx模型。

• 本範例,將在Windows空間裡進行推論。這支
程式內容如下:
rnn_app.py程式碼

載入
rnn_opt.onnx
rnn_app.py程式碼 準備
測試資料

展開推論
輸出推論結果,如下:
進行推論

• 於是,完成了很棒的推論。

• 展現了很不錯的時序性預測威力。
9.2

下一步…
下一步:在KL520、KL570實體設備裡推論
THANK YOU

請繼續閱讀
下一集
歡迎
來信索取<本文裡的範例程式碼>
Email:misoo.tw@gmail.com

台灣AI高通量計算 研發中心

高煥堂 團隊
THANK YOU

高煥堂 教授

You might also like