2017-09-15 7 views
1

현재 CNTK를 사용하여 Jonathan Longs FCN8-s의 TensorFlow 구현을 다시 구현하고 있습니다. 그 동안 TensorFlow는 저에게 매우 익숙한 반면 Microsoft CNTK를 사용하는 데는 아직 경험이 없습니다. 몇 가지 CNTK Github 튜토리얼을 읽었으나 이제는 최상위 레이어가있는 pool4_score를 추가 할 시점에 있습니다. TensorFlow에서 나는 단순히 tf.add(pool4_score, upscore1)을 사용하지만 CNTK에서 나는 (맞습니까?) Sequentials를 사용해야 그래서처럼 내 코드를 찾습니다 : 나는 combine 방법이 있다는 것을 읽을CNTK 시퀀스 내에 두 개의 레이어를 추가하는 방법

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) 

..하지만 내가 사용하는 방법에는 예를 찾을 수 없습니다 그것 순차적으로. 그렇다면 CNTK를 사용하여 tf.add 메소드를 구현하는 방법은 무엇입니까?

고맙습니다.

답변

2

C.plus 또는 +을 사용할 수 있습니다.이 경우 추가하려는 레이어로 이동하려면 시퀀스를 분할해야합니다.

은 아래의 예를 들어 : 이제 Z1 + Z2를 할 수

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

:

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

은 동일합니다.