keras使用問題
2020/01/15 下午 08:17
機器學習共學討論版
Tie
觀看數:22
回答數:3
收藏數:0
ml100-3
ml100-3-d69
您好,我從進入keras這邊之後,就有一點摸不著頭緒。
例如像下圖,模型部分有2個,一個是Sequentail,一個是functional model,其中又說到序列只是functional model的一個特例。pdf上面解釋得也有些過於文字,我不太了解真正差別在哪裡。
還有網路層的意思是hidden layers嗎?
網路層內各種不同的層名,代表著各自不同的功用嗎?
寫HW的時候雖然能夠照著範例讓code跑起來,但實際內容卻一無所知,感覺不是很好。
很抱歉,我好像很多東西混在一起,若我的方向整個錯誤,有什麼建議我從那邊切入複習嘛?
先謝謝您的回應。
回答列表
-
2020/01/16 下午 07:54Patrick Ruan贊同數:2不贊同數:0留言數:1
Sequential 與 Model 的用法,比較直接的方法就是看圖,
如果用 Sequential 的方式,他的模型會是一層接一層,沒有岔路。比如這段 code,寫起來很簡單,都是用 add去接到上一層:
model = Sequential()
model.add(Dense(units=256,input_dim=784,kernel_initializer ='normal', activation ='relu'))
model.add(Dense(units=10, kernel_initializer='normal',activation='softmax'))他的模型是長這樣,
如果用 Model 的方式,他的模型中每一層的增加時要標明他是接在哪一層的後面,所以會比較有彈性,比如在一種很有名的網路,用來做物件偵測的網路 yolo 中的一部分會長成底下的模式,
上圖的 layer 13 作出了分岔,code 會是這麼交代,
# 首先要定義 Input
input_image = Input(shape=(IMAGE_H, IMAGE_W, 3))
true_boxes = Input(shape=(1, 1, 1, TRUE_BOX_BUFFER , 4))
# Layer 1
x = Conv2D(32, (3,3), strides=(1,1), padding='same', name='conv_1', use_bias=False)(input_image)
x = BatchNormalization(name='norm_1')(x)
# .....
# 到了 layer 13 要作分岔
# Layer 13
x13_1 = Conv2D(512, (3,3), strides=(1,1), padding='same', name='conv_13', use_bias=False)(x12) # 我們的 x13_1 等於 接在 x12 的後頭
x13_2 = BatchNormalization(name='norm_13')(x13_1) # 我們的 x13_2 接在 x13_1 的後頭
x13_3 = LeakyReLU(alpha=0.1)(x13_2) # 我們的 x13_3 接在 x13_2 的後頭
skip_connection = x13_3 # 我們的 skip_connection 相當於 x13_3 的輸出
x13 = MaxPooling2D(pool_size=(2, 2))(x_13_3) # 我們的 x13 接在 x13_3 的後頭
# ....
x21_1 = Conv2D(64, (1,1), strides=(1,1), padding='same', name='conv_21', use_bias=False)(skip_connection)
x21 = concatenate([x21_1, x20]) # 到了 第 21層時 上方岔開的兩路網路會交會,也就是 x21 除了承接 第20層 (x20)也會接上第 13_3 層的結果。 -
2020/01/16 下午 08:11Patrick Ruan贊同數:1不贊同數:0留言數:1
除了輸入層與輸出層之外,包在中間的都叫做隱藏層
比如
model = Sequential()
model.add(Dense(units=256,input_dim=784,kernel_initializer ='normal', activation ='relu'))
# 上面這一行很有趣,通常第一"行" 連接輸入層與第一個隱藏層,所以後面一行就表示兩層! 下面圖示中的 dense_1 與 dense_1 都在這一行表示了。
model.add(Dense(units=128, activation= 'relu')) #dense_2
model.add(Dense(units=10, kernel_initializer='normal',activation='softmax')) #dense_3圖會是
其中 dense_1_input 是輸入層, dense_1, dense_2 都是隱藏層,dense_3 是輸出層。
類神經網路的隱藏層有很多種,比如,這裡用到的基本的 Dense 層,或者常常用來作影像工作的卷基層 CNN (Conv2D) 或用來跟可能跟時序有關的 LSTM 層等,都是在深度學習的章節上要研讀的。
-
2020/01/18 下午 00:37Jeffrey贊同數:1不贊同數:0留言數:0