작성
·
243
0
pred_P
pred_P[:, :, 0]
+ pred_P[:, :, 1]
) == 1이 만족해야 하지 않나요? 아니면 probability가 아니여도 괜찮은건가요?답변 1
0
안녕하세요~. 반갑습니다.
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
안녕하세요~.
현재는 class가 cat 하나라서 class prediction의 의미가 없어서 해당 형태로 진행한 것이고 일반적인 상황에서는 말씀해주신대로
cat일땐 label을 7.0에서 0으로 변경하고 cow일땐 label을 9.0에서 1로 변경하도록 해서
->
말씀해주신 방법대로 진행하는게 맞습니다~.
제대로 이해하고 계신 것 같습니다~.
감사합니다.
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.]
이런 식으로 표현되도록 수정한다면 잘못된 방법일까요...?