2017-10-05 4 views
0

나는 Keras 함수 Dropout에 대해 noise_shape 인수와 관련하여 질문이 있습니다.Keras Dropout with noise_shape

질문 1 :의 의미는 무엇

당신의 입력은 모양 (BATCH_SIZE, 시간 단계, 기능)을 가지고 있고 당신은 당신이 = (noise_shape를 사용할 수 있으며, 드롭 아웃 마스크는 모든 시간 단계에 대해 동일 할 경우 batch_size, 1, features)? 그리고이 인수를 추가하면 어떤 이점이 있습니까?

탈락 될 뉴런 수는 시간 단계에 따라 동일하다는 것을 의미합니까? 어떤 시간 단계마다 n 개의 뉴런이 떨어지겠습니까?

질문 2 : 모델을 만들 때 noise_shape에 'batch_size'를 포함시켜야합니까? -> 다음 예제를 참조하십시오.

(10000, 1, 100, 2) -> (데이터 수, 채널 수, 시간 단계, 기능 수)의 형태로 다 변수 시계열 데이터가 있다고 가정합니다.

:> 나는 밖으로 드롭과 CNN 모델을 만들려면 (64, 1, 100, 2)

, 내가 사용 Keras 기능 API -

은 그 때 나는 64의 배치 크기와 배치를 만들 층 max1의 출력 형태가되어야하므로

inp = Input([1, 100, 2]) 
conv1 = Conv2D(64, kernel_size=(11,2), strides(1,1),data_format='channels_first')(inp) 
max1 = MaxPooling2D((2,1))(conv1) 
max1_shape = max1._keras_shape 
drop1 = Dropout((0.1, noise_shape=[**?**, max1._keras_shape[1], 1, 1])) 

(없음, 64, 50, 1), 및 I는 I는 I이 대처 방법을 생각해

을 (BATCH_SIZE 대응) 물음표에 없음을 지정할 수 없다 ? noise_shape로 (64, 1, 1)을 사용해야할까요? 또는 'batch_size'라는 변수를 정의하고 (batch_size, 64, 1, 1)와 같이이 인수에 전달해야합니까?

답변

0

질문 1 : 그것은 내가 생각 NumPy와 방송 같은 종류의

.

당신이 개 배치 마녀 3 시간 단계 및 4 개 기능을 가지고 상상 (그것은 작은 예는 쉽게 보여 할 수 있도록이다) : (2, 3, 4)

당신의 잡음 형태를 사용하는 경우

(2 , 1, 4), 각 배치에는 모든 timestep에 적용되는 자체 제거 마스크가 있습니다 ( ).

그래서

의이 말을하자 모양의 가중치 (2, 3, 4) :

array([[[ 1, 2, 3, 4], 
     [ 5, 6, 7, 8], 
     [ 10, 11, 12, 13]], 

     [[ 14, 15, 16, 17], 
     [ 18, 19, 20, 21], 
     [ 22, 23, 24, 25]]]) 

그리고이 랜덤 noise_shape 것 (2, 1, 4) (1 유지하고 0과 같다) 꺼짐과 같습니다.

array([[[ 1, 1, 1, 0]], 

     [[ 1, 0, 0, 1]]]) 

따라서 두 개의 노이즈 모양 (모든 배치마다)이 있습니다. 그러면 timestep 축을 따라 다소 방송 될 것입니다.가중치에

array([[[ 1, 1, 1, 0], 
     [ 1, 1, 1, 0], 
     [ 1, 1, 1, 0]], 

     [[ 1, 0, 0, 1], 
     [ 1, 0, 0, 1], 
     [ 1, 0, 0, 1]]]) 

및 적용 :

array([[[ 1, 2, 3, 0], 
     [ 5, 6, 7, 0], 
     [ 10, 11, 12, 0]], 

     [[ 14, 0, 0, 17], 
     [ 18, 0, 0, 21], 
     [ 22, 0, 0, 25]]]) 

질문 2 : 두 번째 질문은 정직에 대해

잘 모르겠어요. 가능하면 은 일괄 처리 크기를 생략 할 수 있지만, 모양이 noise_shape 인 이 처리되는 방식을 잘 모르겠습니다.

편집 : 이것이 github issue에서 제안 된대로 BATCH_SIZE해야 입력, 의 모양의 첫 번째 차원을 취 수행 할 수 있습니다

import tensorflow as tf 

... 

batch_size = tf.shape(inp)[0] 
drop1 = Dropout((0.1, noise_shape=[batch_size, max1._keras_shape[1], 1, 1])) 

당신은 내가 볼 수 있듯이 tensorflow 백엔드에있어. Dano of theano도 에 이러한 문제가있는 경우에만 theano 모양으로 해결할 수 있습니다.