logo
Loading...

keras使用問題 - Cupoy

您好,我從進入keras這邊之後,就有一點摸不著頭緒。例如像下圖,模型部分有2個,一個是Sequen...

ml100-3,ml100-3-d69

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:54
    Patrick 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
    = Conv2D(32, (3,3), strides=(1,1), padding='same', name='conv_1', use_bias=False)(input_image)
    = 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:11
    Patrick 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:37
    Jeffrey
    贊同數:1
    不贊同數:0
    留言數:0