강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của winter49583283
winter49583283

câu hỏi đã được viết

Việc triển khai bài viết học sâu được học thông qua việc triển khai YOLO với TensorFlow 2.0

class_loss에 대해서 질문 있습니다.

Viết

·

296

0

loss.py에서 class loss를 구하는 과정에 label값으로 사용되는 Ptf.one_hot 이 적용되는데,
그렇다면 prediction값으로 사용되는 pred_P 는 class에 대한 probability이기 때문에 (pred_P[:, :, 0]+ pred_P[:, :, 1]) == 1이 만족해야 하지 않나요? 아니면 probability가 아니여도 괜찮은건가요?
코드에서 사용된 pred_P는 class에 대한 probability가 아닌 것 같아 질문 드립니다.
그리고 one-hot은 단일 label에 적용되는 것이 아닌, 전체 label에 적용해야 하는데, 인자로 사용된 label[4]은 단일 label값만 가져오는 것 같습니다. 만일 코드를 단일 class에 대한 detection이 아닌, 여러 class에 대한 detection으로 변경한다면
tf.one_hot의 전달인자가 label[4]이 아닌, label number list가 들어가야 된다구 생각하는데... 제가 이해한게 맞을까요?
딥러닝tensorflow

Câu trả lời 1

0

AISchool님의 프로필 이미지
AISchool
Người chia sẻ kiến thức

안녕하세요~. 반갑습니다.

1. pred_P 값이 다 더하면 1이되는 확률값이 되어야하는게아닌가? 지금은 다 더하면 1이되는 제약조건이 없는것이 아닌가?

->

맞습니다. 현재는 다 더하면 1이되는 제약조건이 없어서 다 더하면 1이되는 형태로 가이드할뿐 명확하게 다 더하면 1이 되도록 제한하는 형태는 아닙니다. 어차피 prediction 시점에 class label 개수만큼의 예측값 중에서 확신의 정도가 가장 큰값을 argmax로 선택하기때문에 큰 문제가 되는 부분은 아닙니다.

2. 그리고 one-hot은 단일 label에 적용되는 것이 아닌, 전체 label에 적용해야 하는데, 인자로 사용된 label[4]은 단일 label값만 가져오는 것 같습니다. 만일 코드를 단일 class에 대한 detection이 아닌, 여러 class에 대한 detection으로 변경한다면 tf.one_hot의 전달인자가 label[4]이 아닌, label number list가 들어가야 된다구 생각하는데... 제가 이해한게 맞을까요?

->

label[4]가 전달하는 것은 클래스의 integer encoding 된 값이고, tf.one_hot API는 Integer Encoding 된 값을 num_classes크기만큼의 one-hot encoding 행렬로 자동변환해주는 형태로 동작합니다. 따라서 레이블값을 리스트로 넣을 필요는 없습니다. P = tf.one_hot(tf.cast(label[4], tf.int32), num_classes, dtype=tf.float32)

예를 들어, tf.one_hot(2(=label[4]), 3) -> [0 0 1] 형태로 변환해줍니다.

더자세한 내용은 아래를 참조하세요.

https://www.tensorflow.org/api_docs/python/tf/one_hot

감사합니다.
hibernation님의 프로필 이미지
hibernation
Người đặt câu hỏi

one-hot 부분에 추가 질문 있습니다.

강의의 code에서 cat은 7이라는 integer값이 들어있는데, 

이를 tf.one_hot(7.0(=label[4]), 1(=num_classes)) 이면 반드시 [0.] 이 출력됩니다.

이렇게 되면 학습이 진행될수록 pred_P값은 0으로 수렴하기 되지 않나요?

만일 class를 { 7: "cat", 9: "cow"} 처럼 2개를 사용하게 된다면

tf.one_hot(7.0(=label[4]), 2(=num_classes)) == [0. , 0.]

tf.one_hot(9.0(=label[4]), 2(=num_classes)) == [0. , 0.]

이렇게 출력됩니다. 이 또한 pred_P값은 0으로 수렴하게 되구요.

이 보다는 

cat일땐 label을 7.0에서 0으로 변경하고 cow일땐 label을 9.0에서 1로 변경하도록 해서 

tf.one_hot(0.0(=label[4]), 2(=num_classes)) == [1. , 0.]

tf.one_hot(1.0(=label[4]), 2(=num_classes)) == [0. , 1.]

이런 식으로 표현되도록 수정한다면 잘못된 방법일까요...?

AISchool님의 프로필 이미지
AISchool
Người chia sẻ kiến thức

안녕하세요~.

현재는 class가 cat 하나라서 class prediction의 의미가 없어서 해당 형태로 진행한 것이고 일반적인 상황에서는 말씀해주신대로

cat일땐 label을 7.0에서 0으로 변경하고 cow일땐 label을 9.0에서 1로 변경하도록 해서 

->

말씀해주신 방법대로 진행하는게 맞습니다~.

제대로 이해하고 계신 것 같습니다~.

감사합니다.

Hình ảnh hồ sơ của winter49583283
winter49583283

câu hỏi đã được viết

Đặt câu hỏi