tf.layers.conv2d 및 tf.layers.dense의 기본 커널 이니셜 라이저는 무엇입니까?
공식 Tensorflow API 문서 에서는 tf.layers.conv2d 및 tf.layers.dense에 대해 kernel_initializer 매개 변수가 기본적으로 None으로 설정되어 있다고 주장합니다.
그러나 레이어 자습서 ( 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(stddev=0.1, dtype=tf.float32)
, 나는 NaN의 오류를 얻었다. 여기서 무슨 일이 일어나고 있습니까? 누구든지 도울 수 있습니까?
좋은 질문입니다! 알아내는 것은 꽤 속임수입니다!
- 보시다시피, 문서화되지 않았습니다.
tf.layers.conv2d
- 함수 의 정의를 보면 함수가
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)
다음 단계 : 이니셜 라이저가 None 일 때 변수 범위는 무엇을합니까?
여기에 말한다 :
initializer가
None
(기본값)이면 생성자에 전달 된 기본 이니셜 라이저가 사용됩니다. 이 경우None
에도 새glorot_uniform_initializer
.
그래서 대답은 : glorot_uniform_initializer
완전성을 위해이 이니셜 라이저의 정의 :
Glorot 균일 이니셜 라이저, Xavier 균일 이니셜 라이저라고도합니다. 그것은 내의 균일 분포로부터 샘플을 그리는 [-limit, 한계] 여기서,
limit
이고sqrt(6 / (fan_in + fan_out))
여기서fan_in
중량 텐서의 입력 유닛의 개수 및fan_out
중량 텐서 출력 유닛의 수이다. 참조 : http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
편집 : 이것은 코드와 문서에서 찾은 것입니다. 가중치에 대해 eval을 실행하여 초기화가 다음과 같은지 확인할 수 있습니다!
Andrew Ng 및 Xavier 문서 의이 과정 에 따르면 ReLU 를 활성화 함수로 사용 하는 경우 기본 가중치 이니셜 라이저 ( Xavier uniform )를 다음과 같이 Xavier normal 로 변경하는 것이 좋습니다 .
y = tf.layers.conv2d(x, kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False), )
'program tip' 카테고리의 다른 글
Linux에서 문자열 리터럴의 메모리 주소가 다른 것과 다른 이유는 무엇입니까? (0) | 2020.11.28 |
---|---|
32 비트 컴퓨터에서-(-2147483648) =-2147483648 인 이유는 무엇입니까? (0) | 2020.11.28 |
식 트리 람다는 null 전파 연산자를 포함 할 수 없습니다. (0) | 2020.11.28 |
SVN / TortoiseSVN 고통스럽게 느림 (0) | 2020.11.28 |
실용적인 예는 dup 또는 dup2를 사용합니다. (0) | 2020.11.28 |