終於進入到DL的世界,我們重點是放在ML因此不會詳談DL的各種演算法,只會簡單用keras介紹遞迴神經網路Recurrent Neural Network,RNN與卷積神經網路Convolutional Neural Network,CNN,替同學將來想要繼續深造DL打地基。
在說明原理之前,先觀察一張圖:
看到了嗎?中間那個h是隱藏層hidden的縮寫,x是輸入層input,o是輸出層output。hidden接受前一層輸入和自己遞迴到輸出層。右上角的(t) 是 time-series 的意思[昨日]我們有提過。
原理:
步驟:
程式碼:
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Embedding
from tensorflow.keras.layers import SimpleRNN
# 載入 DL模型
model = Sequential()
# 建一個輸入1000維度,輸出32維度模型
model.add(Embedding(input_dim=1000, output_dim=32))
# 載入RNN模型
model.add(SimpleRNN(32))
# 模型摘要
model.summary
# Create CNN Model
class CNN_Model(nn.Module):
def __init__(self):
super(CNN_Model, self).__init__()
# Convolution 1 , input_shape=(1,28,28)
self.cnn1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=5, stride=1, padding=0) #output_shape=(16,24,24)
self.relu1 = nn.ReLU() # activation
# Max pool 1
self.maxpool1 = nn.MaxPool2d(kernel_size=2) #output_shape=(16,12,12)
# Convolution 2
self.cnn2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=5, stride=1, padding=0) #output_shape=(32,8,8)
self.relu2 = nn.ReLU() # activation
# Max pool 2
self.maxpool2 = nn.MaxPool2d(kernel_size=2) #output_shape=(32,4,4)
# Fully connected 1 ,#input_shape=(32*4*4)
self.fc1 = nn.Linear(32 * 4 * 4, 10)
因為我們只簡單介紹CNN概念,留給同學放在心裡,以後在「明年ithome 鐵人賽」進階篇會介紹,敬請期待。
明天我們原本打算介紹ML的應用,以flask儲存與展示模型,但是考慮到flask是一門學科,所以打算留到下一屆鐵人賽再來說明,在這之前可以先參考flask入門,先打個底再來學習比較有成就感,所以明天調整談Bias and Variance trade-off,敬請期待。