공식 Tensorflow API doc 구는 매개변수kernel_initializer
기본값None``tf.레이어입니다.conv2d
과tf.레이어입니다.밀도
.
그러나,독서의 튜토리얼 레이어(https://www.tensorflow.org/tutorials/layers),내가 주목하는 이 매개 변수는지에서 설정 코드입니다. 예를 들어:
# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
예제 코드에서는 튜토리얼 실행 오류없이,그래서 나는 기본kernel_initializer
되지 않은None
. 그래서,어떤 이니셜라이저를 이용하시면 됩니다.
다른 코드,내가 설정하지 않은kernel_initializer
의 conv2d 와 조밀한 레이어 모든게 좋았습니다. 그러나 때,나는 설정하려고 했는kernel_initializer
에서tf.truncated_normal_initializer(표준편차=0.1,dtype=tf.float32)
,내가 할머니는 오류가 있습니다. 여기에 무슨? 사람이 도움이 될 수 있습니다?
좋은 질문입니다! 그것은 매우 트릭 찾을 수 있습니다!
-당신이 볼 수 있듯이,그것은 문서화tf.레이어입니다.conv2d
-보면에서 정의 function](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/layers/convolutional.py 에)당신이 볼 수 있는 함수 호출variable_scope.get_variable
:
에서 코드:
self.kernel = vs.get_variable('kernel',
shape=kernel_shape,
initializer=self.kernel_initializer,
regularizer=self.kernel_regularizer,
trainable=True,
dtype=self.dtype)
다음 단계:무엇 변수 범위를 할 경우 이니셜라이저입니다.
여기에서 그것은 말한다:
는 경우 이니셜라이저는
없음
(기본값),기본 이니셜라이저에 전달된 생성자를 사용합니다. 는 경우에는 하나는없음
으로도,우리가 사용하는 새로운glorot_uniform_initializer
.
그래서 대답이다:그것은 사용glorot_uniform_initializer
에 대한 완성도의 정의 이니셜라이저:
The Glorot 균일한 이니셜라이저,라고도 자비에 균일한 이니셜라이저입니다. 그것은 샘플에서 균일한 배포에서[제한,한계] 여기서
제한
의sqrt(6/(fan_in+fan_out))
는fan_in
번호의 입력 단위에서의 무게 텐서 그리고fan_out
번호의 출력 단위에서의 무게 텐서. 참고:http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
편집:이것은 무엇을 발견에 코드 및 설명서가 포함되어 있습니다. 아마도 당신 수 있는지 확인하는 것을 초기화를 다음과 같이 실행하여 eval 무게에!