현재 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
메소드를 구현하는 방법은 무엇입니까?
고맙습니다.