인프런 커뮤니티 질문&답변

dhleegarret님의 프로필 이미지
dhleegarret

작성한 질문수

TensorFlow 2.0으로 배우는 딥러닝 입문

TensorFlow로 구현된 코드 관련 문의 사항입니다.

작성

·

241

0

안녕하세요 좋은 강의 잘 듣고 있습니다 :) 

각 강의마다 TensorFlow로 구현된 코드에 관련된 문의 사항이 있습니다!

1. tf.keras.Model을 상속받는 모델을 정의하고, 생성자 함수 내부에 구현한 가장 마지막 output layer(예를 들어, tf.keras.layers.Dense(10, activation=None))를 통과하면 무조건 원핫인코딩 형태의 벡터로 생성되는 건가요? 이것은 따로 모델에다가 라벨이 원핫인코딩 형태라는 것을 알려주는 것이 아닌, tf.keras.layers.Dense(10, activation=None)의 반환 형태인지 궁금합니다!

2. 'TensorFlow 2.0 케라스 서브클래싱(Keras Subclassing) & Softmax Regression 구현' 강의에서 사용하시는 'mnist_classification_using_softmax_regression_v2_keras.py' 코드에 관한 질문입니다!

- tf.keras.Model을 상속받는 SoftmaxRegression 모델 클래스의 call() 함수 최종 반환값이 logits에 대한 softmax를 처리한 형태(tf.nn.softmax(logits)입니다. 그러면 train_step() 함수 내부에서 cross_entropy_loss(y_pred, y)를 수행할 때, y_pred는 model(x)에 대한 반환값이므로 softmax를 처리한 형태인데, y는 batch_ys를 저장한 값이기 때문에 softmax를 수행하지 않은 값이라 생각이 듭니다. 이러한 y_pred와 y를 가지고 cross_entropy_loss()를 수행할 수 있는지 궁금합니다!

답변 2

1

AISchool님의 프로필 이미지
AISchool
지식공유자

안녕하세요. dhleegarret님. 반갑습니다^^.

1. tf.keras.Model을 상속받는 모델을 정의하고, 생성자 함수 내부에 구현한 가장 마지막 output layer(예를 들어, tf.keras.layers.Dense(10, activation=None))를 통과하면 무조건 원핫인코딩 형태의 벡터로 생성되는 건가요? 이것은 따로 모델에다가 라벨이 원핫인코딩 형태라는 것을 알려주는 것이 아닌, tf.keras.layers.Dense(10, activation=None)의 반환 형태인지 궁금합니다!

->

해당 부분은 모델의 출력 결과값을 10차원 벡터로 표현함으로써 원핫인코딩 벡터 형태로 모델의 출력값이 나오도록 만들어주는 것입니다. 말씀해주신대로 모델에게 알려주는 것이 아니라 tf.keras.layers.Dense(10, activation=None)의 반환 형태로 모델이 아웃풋 레이블의 개수를 자연스럽게 10개라고 간주하게 되는 형태입니다.

만약 20개 개수를 가진 원핫 인코딩된 레이블에 대한 분류를 수행하고 싶으실 경우에는 tf.keras.layers.Dense(20, activation=None) 형태로 반환해주면 모델이 아웃풋 레이블의 개수를 자연스럽게 20개라고 생각하게 되는 형태입니다~. (다만 해당 경우에는 당연히 cross-entropy 계산에 사용되는 정답 데이터도 20개의 개수를 가진 원핫 인코딩된 레이블로 표현되어야합니다.)

2. 'TensorFlow 2.0 케라스 서브클래싱(Keras Subclassing) & Softmax Regression 구현' 강의에서 사용하시는 'mnist_classification_using_softmax_regression_v2_keras.py' 코드에 관한 질문입니다!

->

y는 batch_ys를 저장한 값이기 때문에 softmax를 수행하지 않은 값이라 생각이 듭니다. 이러한 y_pred와 y를 가지고 cross_entropy_loss()를 수행할 수 있는지 궁금합니다!

->

말씀해주신대로 y는 softmax를 수행하지 않은 형태입니다. 일반적으로 정답 데이터 y에 대해서는 softmax 함수를 취할 필요가 없습니다. 즉, [정답데이터 <-> softmax를 적용한 모델의 출력값]간의 cross entropy를 계산하는 것이 일반적인 패턴이라고 생각하시면 됩니다^^.

그럼 궁금하신 사항 있으시면 또 언제든지 편하게 질문주세요~.

좋은 하루 되세요.

감사합니다.

0

dhleegarret님의 프로필 이미지
dhleegarret
질문자

오오 빠르고 자세한 답변 감사합니다 강사님 :) 

제가 헷갈렸던 부분들이 잘 해결되었습니다!

dhleegarret님의 프로필 이미지
dhleegarret

작성한 질문수

질문하기