0

DNA 모티프를 추출하도록 설계된 길쌈 신경 네트워크의 맥락에서 왜 최대 풀링 기능없이 중간에 컨볼 루션 레이어를 쌓아 두겠습니까?이 컨텍스트에서 회선 사이에 풀링 레이어가없는 이점은 무엇입니까?

다음은이 아키텍처가 나타나는 컨텍스트입니다.

self.model = Sequential() 
assert len(num_filters) == len(conv_width) 
for i, (nb_filter, nb_col) in enumerate(zip(num_filters, conv_width)): 
    conv_height = 4 if i == 0 else 1 
    self.model.add(Convolution2D(
     nb_filter=nb_filter, nb_row=conv_height, 
     nb_col=nb_col, activation='linear', 
     init='he_normal', input_shape=self.input_shape, 
     W_regularizer=l1(L1), b_regularizer=l1(L1))) 
    self.model.add(Activation('relu')) 
    self.model.add(Dropout(dropout)) 
self.model.add(MaxPooling2D(pool_size=(1, pool_width))) 
+1

활성화 기능이없는 경우 네트워크는 여러 선형 함수의 스택이므로 선형 함수입니다. 이 네트워크는 선형 기능 만 나타낼 수 있기 때문에 그다지 강력하지 않습니다. 왜 이렇게했는지, 나는 잘 모르겠다. –

+0

활성화 레이어 하나가 있고 그 뒤에 최대 풀링 레이어가 있지만 둘 다 컨볼 루션 레이어 뒤에 있습니다. 내 질문은 활성화 또는 풀링 레이어에 의해 분리되는 것과는 대조적으로 컨볼 루션 레이어가 차례로 나오는 이유입니다. @PankajDaga – odeng

+0

soem 컨텍스트 또는 paer를 보지 않고 잘 모르겠습니다. 이러한 레이어를 통과하는 신호는 선형 적으로 만 변환됩니다. '왜'그것이 이루어지고 있는지는 더 이상의 세부 사항 없이는 내 부분에 대한 추측 일뿐입니다. –

답변

2

이 코드는 가 전환 자체 내에서 그들이 대신 "활성화"specyfing의 별도 활성화를 넣어 이유

conv -- relu -- dropout -- conv -- relu -- dropout -- ... -- max pool 

같은이 모델 결과 회선

self.model = Sequential() 
assert len(num_filters) == len(conv_width) 
for i, (nb_filter, nb_col) in enumerate(zip(num_filters, conv_width)): 
    conv_height = 4 if i == 0 else 1 
    self.model.add(Convolution2D(
     nb_filter=nb_filter, nb_row=conv_height, 
     nb_col=nb_col, activation='linear', 
     init='he_normal', input_shape=self.input_shape, 
     W_regularizer=l1(L1), b_regularizer=l1(L1))) 
    self.model.add(Activation('relu')) # <--------------------- ACTIVATION 
    self.model.add(Dropout(dropout)) 
self.model.add(MaxPooling2D(pool_size=(1, pool_width))) 

사이 사용 활성화를 않습니다 제공 ? 어떤 아이디어는 홀수 ​​구현 결정처럼 보이는,하지만보기의 실용적인 관점에서

self.model.add(Convolution2D(
     nb_filter=nb_filter, nb_row=conv_height, 
     nb_col=nb_col, activation='linear', 
     init='he_normal', input_shape=self.input_shape, 
     W_regularizer=l1(L1), b_regularizer=l1(L1))) 
self.model.add(Activation('relu')) 

self.model.add(Convolution2D(
     nb_filter=nb_filter, nb_row=conv_height, 
     nb_col=nb_col, activation='relu', 
     init='he_normal', input_shape=self.input_shape, 
     W_regularizer=l1(L1), b_regularizer=l1(L1))) 

해당이다.

+0

항상 최대 풀링이 필요하지는 않습니다. 이미지의 해상도가 현저하게 떨어 지므로 ** 필요한 경우 ** ** 기본적으로 **가 아닌 ** 추가됩니다. FCN 레이어의 관점에서 볼 때, 코드 130을 자세히 읽지 않아도됩니다. – lejlot

2

주어진 입력 차원의 경우 더 이상 감쇄 할 수없는 1x1 출력 차원에 도달하기 전에 공간 차원 (여러 번 계수 2)을 여러 번 줄일 수 있습니다! 그러므로 깊이있는 네트의 경우 차원 감소없이 레이어 그룹 (컨벌루션)을 가지며 차원 감소를 수행하는 레이어로 구분됩니다. 따라서 최대 풀링없이 컨볼 루션 레이어를 사용하는 것이 이점이지만, 주어진 입력 크기에 대해 최대 풀링 레이어가 너무 많을 수는 없습니다.

max pooling의 유일한 기능은 차원 감소입니다. 다른 장점은 없습니다. 실제로 ResNet-50과 같은보다 현대적인 모든 컨벌루션 아키텍처는 최대 풀링 (입력을 제외하고)을 사용하지 않고 대신 보폭 2 컨벌루션을 사용하여 점차적으로 크기를 줄입니다.

관련 문제