2017-05-25 6 views
1

CNTK - 同じレイヤ(フィルタサイズ2,3,4,5など)に複数のフィルタサイズを使用するにはどうすればよいですか?CNTKで異なるフィルタサイズのコンバージョンレイヤを連結する

here(下のgithubのコードへのリンク)に続いて、テキストを取り込み、埋め込みレイヤーを使用し、4つの異なるサイズのフィルター(2,3,4,5)を適用し、結果を完全に接続されたレイヤーに供給します。 Network architecture figure

Kerasサンプルコード:

main_input = Input(shape=(100,) 
embedding = Embedding(output_dim=32, input_dim=100, input_length=100, dropout=0)(main_input) 

conv1 = getconvmodel(2,256)(embedding) 
conv2 = getconvmodel(3,256)(embedding) 
conv3 = getconvmodel(4,256)(embedding) 
conv4 = getconvmodel(5,256)(embedding) 

merged = merge([conv1,conv2,conv3,conv4],mode="concat") 

def getconvmodel(filter_length,nb_filter): 
    model = Sequential() 
    model.add(Convolution1D(nb_filter=nb_filter, 
          `enter code here`input_shape=(100,32), 
          filter_length=filter_length, 
          border_mode='same', 
          activation='relu', 
          subsample_length=1)) 
    model.add(Lambda(sum_1d, output_shape=(nb_filter,))) 
    #model.add(BatchNormalization(mode=0)) 
    model.add(Dropout(0.5)) 
    return model 

(1):/joshsaxe/eXposeDeepNeuralNetwork/blob/master/src/modeling/models.py

答えて

2

あなたはこのような何かを行うことができます。

import cntk as C 
import cntk.layers as cl 

def getconvmodel(filter_length,nb_filter): 
    @Function 
    def model(x): 
     f = cl.Convolution(filter_length, nb_filter, activation=C.relu))(x) 
     f = C.reduce_sum(f, axis=0) 
     f = cl.Dropout(0.5) (f) 
    return model 

main_input = C.input_variable(100) 
embedding = cl.Embedding(32)(main_input) 

conv1 = getconvmodel(2,256)(embedding) 
conv2 = getconvmodel(3,256)(embedding) 
conv3 = getconvmodel(4,256)(embedding) 
conv4 = getconvmodel(5,256)(embedding) 

merged = C.splice([conv1,conv2,conv3,conv4]) 
0

それともSequential()とラムダと:

def getconvmodel(filter_length,nb_filter): 
    return Sequential([ 
     cl.Convolution(filter_length, nb_filter, activation=C.relu)), 
     lambda f: C.reduce_sum(f, axis=0), 
     cl.Dropout() 
    ]) 
関連する問題