1

:TensorFlow에서 밀도가 떨어지는 레이어 앞이나 뒤에 누락 레이어가 있습니까? 드롭 아웃 층은 지난 조밀 한 층 한 후 간다 <a href="https://www.tensorflow.org/tutorials/layers#building_the_cnn_mnist_classifier" rel="nofollow noreferrer">A Guide to TF Layers</a>에 따르면

dense = tf.layers.dense(input, units=1024, activation=tf.nn.relu) 
dropout = tf.layers.dropout(dense, rate=params['dropout_rate'], 
          training=mode == tf.estimator.ModeKeys.TRAIN) 
logits = tf.layers.dense(dropout, units=params['output_classes']) 

이 더 의미가 조밀 한 층 전에 그것을 을 가지고하지 않습니다, 그것은 입력에서 출력까지의 매핑을 배운다 있도록 드롭 아웃 효과는?

dropout = tf.layers.dropout(prev_layer, rate=params['dropout_rate'], 
          training=mode == 
dense = tf.layers.dense(dropout, units=1024, activation=tf.nn.relu) 
logits = tf.layers.dense(dense, units=params['output_classes']) 

답변

4

어느 하나/또는 상황이 아닙니다. 비공식적으로 말하자면, 공통적 인 의미로는 밀도가 개의 레이어 이후에 중도를 적용하고 길들이기 또는 풀링 이후에는 드롭 아웃을 적용하지 않기 때문에 처음에는 정확히 prev_layer이 두 번째 코드 스 니펫에 무엇이 있는지에 따라 달라집니다.

그럼에도 불구하고이 "디자인 원칙"은 오늘날까지 일상적으로 침해당했습니다 (Reddit & CrossValidated의 흥미로운 관련 토론 참조). 심지어 Keras에 포함 된 MNIST CNN example에, 우리는 드롭 아웃은 최대 풀링 층 후 조밀 한 후 모두 적용됩니다 볼 수 있습니다

model = Sequential() 
model.add(Conv2D(32, kernel_size=(3, 3), 
       activation='relu', 
       input_shape=input_shape)) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) # <-- dropout here 
model.add(Flatten()) 
model.add(Dense(128, activation='relu')) 
model.add(Dropout(0.5)) # <-- and here 
model.add(Dense(num_classes, activation='softmax')) 

그래서, 모두 당신의 코드 조각은 유효하며, 우리는 쉽게 상상할 수있다 솔루션을 "overinterpreting"자습서 당신은 단지 도구와 (매우) 일반 원칙에 익숙해려고하는 링크와 같은 하나, 그래서 : 세 번째 유효한뿐만 아니라 옵션 : 일반적인 조언으로

dropout = tf.layers.dropout(prev_layer, [...]) 
dense = tf.layers.dense(dropout, units=1024, activation=tf.nn.relu) 
dropout2 = tf.layers.dropout(dense, [...]) 
logits = tf.layers.dense(dropout2, units=params['output_classes']) 

표시되지 않는 것이 좋습니다 ...