2017-09-15 14 views
1

現在、CNTKを使用してJonathan Longs FCN8-sのTensorFlow実装を再実装しています。一方、TensorFlowは私にとって非常に有名ですが、私はまだMicrosoftのCNTKを使用することに非常に慣れていません。私はいくつかのCNTK Githubチュートリアルを読んでいましたが、今ではpool4_scoreに上層レイヤーを追加したいと思っています。CNTKシーケンス内に2つのレイヤーを追加する方法

with default_options(activation=None, pad=True, bias=True): 
    z = Sequential([ 
     For(range(2), lambda i: [ 
      Convolution2D((3,3), 64, pad=True, name='conv1_{}'.format(i)), 
      Activation(activation=relu, name='relu1_{}'.format(i)), 
     ]), 
     MaxPooling((2,2), (2,2), name='pool1'), 

     For(range(2), lambda i: [ 
      Convolution2D((3,3), 128, pad=True, name='conv2_{}'.format(i)), 
      Activation(activation=relu, name='relu2_{}'.format(i)), 
     ]), 
     MaxPooling((2,2), (2,2), name='pool2'), 

     For(range(3), lambda i: [ 
      Convolution2D((3,3), 256, pad=True, name='conv3_{}'.format(i)), 
      Activation(activation=relu, name='relu3_{}'.format(i)), 
     ]), 
     MaxPooling((2,2), (2,2), name='pool3'), 

     For(range(3), lambda i: [ 
      Convolution2D((3,3), 512, pad=True, name='conv4_{}'.format(i)), 
      Activation(activation=relu, name='relu4_{}'.format(i)), 
     ]), 
     MaxPooling((2,2), (2,2), name='pool4'), 

     For(range(3), lambda i: [ 
      Convolution2D((3,3), 512, pad=True, name='conv5_{}'.format(i)), 
      Activation(activation=relu, name='relu5_{}'.format(i)), 
     ]), 
     MaxPooling((2,2), (2,2), name='pool5'), 

     Convolution2D((7,7), 4096, pad=True, name='fc6'), 
     Activation(activation=relu, name='relu6'), 
     Dropout(0.5, name='drop6'), 

     Convolution2D((1,1), 4096, pad=True, name='fc7'), 
     Activation(activation=relu, name='relu7'), 
     Dropout(0.5, name='drop7'), 

     Convolution2D((1,1), num_classes, pad=True, name='fc8') 

     ConvolutionTranspose2D((4,4), num_classes, strides=(1,2), name='upscore1') 
     # TODO: 
     # conv for pool4_score with (1x512) and 21 classes 
     # combine upscore 1 and pool4_score 
    ])(input) 

私はcombine方法があることを読んで..しかし、私は、使用する方法を何例見つかりませんでした。だから私のコードは次のように見えますTensorFlowでは、私は単にtf.add(pool4_score, upscore1)を使用しますが、CNTKに、私はSequentials(修正?)を使用する必要がありますそれはシーケンシャルの中で。では、CNTKを使用してtf.addメソッドを実装するにはどうすればよいですか?

ありがとうございます!

答えて

2

C.plusまたは+を使用できます。この場合、追加するレイヤーに到達するためにシーケンスを分割する必要があります。例えば

以下:

z = Sequential([Convolution2D((3,3), 64, pad=True), 
       MaxPooling((2,2), (2,2))])(input) 

は同等です:

z1 = Convolution2D((3,3), 64, pad=True)(input) 
z2 = MaxPooling((2,2), (2,2))(z1) 

あなたは今Z1 + Z2を行うことができます。

関連する問題