작성
·
102
0
def inception_module(x, filters_1x1, filters_3x3_reduce, filters_3x3, filters_5x5_reduce, filters_5x5,
filters_pool_proj, name=None):
'''
x: 입력 Tensor
filters_1x1: 단독 1x1 필터수
filters_3x3_reduce: 3x3 Conv 적용 전 1x1 Conv 필터수
filters_3x3: 3x3 Conv 필터수
filters_5x5_reduce: 5x5 Conv 적용 전 1x1 Conv 필터수
filters_5x5: 5x5 Conv 필터수
filters_pool_prj: MaxPooling 적용 후 1x1 Conv 필터수
'''
# 첫번째 1x1 Conv
conv_1x1 = Conv2D(filters_1x1, (1, 1), padding='same', activation='relu')(x)
# 3x3 적용 전 1x1 conv -> 3x3 Conv
conv_3x3 = Conv2D(filters_3x3_reduce, (1, 1), padding='same', activation='relu')(x)
conv_3x3 = Conv2D(filters_3x3, (3, 3), padding='same', activation='relu')(conv_3x3)
# 5x5 적용 전 1x1 Conv -> 3x3 Conv
conv_5x5 = Conv2D(filters_5x5_reduce, (1, 1), padding='same', activation='relu')(x)
conv_5x5 = Conv2D(filters_5x5, (5, 5), padding='same', activation='relu')(conv_5x5)
pool_proj = MaxPooling2D((3, 3), strides=(1, 1), padding='same')(x)
pool_proj = Conv2D(filters_pool_proj, (1, 1), padding='same', activation='relu')(pool_proj)
# 단독 1x1 결과, 3x3 결과, 5x5 결과, pool이후 1x1 결과 feature map을 채널 기준으로 Concat 적용.
output = Concatenate(axis=-1, name=name)([conv_1x1, conv_3x3, conv_5x5, pool_proj])
return output
빨간색 (x)부분들에 진행하지않은 X 가 아닌 1*1진행한 conv_1*1 들어가야 맞는거 아닌가요`?
답변 1
1
안녕하십니까,
음, 아닙니다. inception module 의 그림을 다시한번 봐주시기 바랍니다.
x 는 previous layer의 tensor 입니다.
conv_1x1는 inception module그림의 맨 왼쪽입니다. previous layer가 아니고 새롭게 생성되는 별개의 layer입니다.
아래 conv_3x3은 inception module그림의 왼쪽에서 2번째 이며 먼저 previous layer 값인 x를 입력 받아야 합니다.
conv_3x3 = Conv2D(filters_3x3_reduce, (1, 1), padding='same', activation='relu')(x)
아래 conv_5x5도 inception module 그림의 왼쪽에서 3번째이며 마찬가지로 previous layer 값인 x를 입력 받아야 합니다.
conv_5x5 = Conv2D(filters_5x5_reduce, (1, 1), padding='same', activation='relu')(x)
감사합니다~!