2016-11-08 4 views
1

나는 명시 방법으로 TF를 연구 할 필요가 그리고 난이 부분 understant 캔트 :텐서 흐름 튜토리얼 logloss 구현

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 

이 그것은이 설명 것 : 첫째, tf.log는 Y의 각 요소의 로그를 계산합니다. 다음으로, y_의 각 요소에 tf.log (y)의 해당 요소를 곱합니다. 그런 다음 tf.reduce_sum은 reduction_indices = [1] 매개 변수로 인해 y의 두 번째 차원에 요소를 추가합니다. 마지막으로 tf.reduce_mean은 배치의 모든 예제에 대한 평균을 계산합니다.

왜이 조작이 굵게 표시되어 있습니까? 왜 다른 차원을 필요로합니까? 감사합니다

답변

1

cross_entropy가 일련의 학습 예제에 대한 값을 계산하기 때문에 두 가지 특성이 있습니다. 따라서 차원 0은 일괄 처리를위한 것이고 차원 1은 특정 예제의 다른 클래스를위한 것입니다. 예를 들어, 가능한 클래스가 3 개이고 배치 크기가 2 인 경우 y는 2D 텐서 크기 (2, 3)입니다.

+0

이 튜토리얼에서 y_는 [n, 10] 행렬이고 y는 [10] 벡터입니다. 그러므로'y_ * tf.log (y)'는 [n] 벡터 여야합니다. 'reduction_indices = [1]'은 2 차 차원이 없기 때문에 중복되는 것처럼 보입니다. 또는 다른 방법으로 생각해보십시오. 2 차원에는 단 하나의 요소 만 있습니다. 축소하면 항상 1 요소가 반환됩니다. – neurite

관련 문제