강사님, 4개의 질문 드립니다.

21.05.11 22:26 작성 조회수 119

0

질문 1.

해결했습니당

질문 2. 질문 1과 같은 강의(마지막 챕터 Utility Functions - 3 More Utils) 3분 37초 부분에 train_validation_test.py 안의 line 56의 코드인

loss, acc = metric_objects['test_loss'].result().numpy(), metric_objects['test_acc'].result() 에서,

.result()의 역할을 모르겠습니다..

result()라는 함수는 구글링을 해도 명확하게 나오지 않아 강사님께서 따로 define하신건가 싶어 찾아봤지만 찾질 못했습니다. 혹시 제가 define 부분을 찾지 못한건가요?ㅠㅠ 그것이 아니라면 .result()의 호출은 어떤 동작을 하게 해주는지 궁금합니다.

질문 3. 질문 2와 같은 line 코드에 대해서 질문 드립니다.

코드를 돌리면 loss, acc = metric_objects['test_loss'].result().numpy(), metric_objects['test_acc'].result() 라인에서 AttributeError: 'Tensor' object has no attribute 'numpy' 라는 에러 메시지를 받았습니다. 혹시 강사님께서도 이 부분에 대해서 어려움을 겪으신 경험이 있신지 궁금해서 질문 드립니다.

// 검색을 통해 얻은 해결방법인 tf.enable_eager_execution()를 코드에 포함했을때는 AttributeError: module 'tensorflow' has no attribute 'enable_eager_execution' 를 확인했습니다.

// @tf.function는 포함된 코드입니다.

질문 4.

해결했습니당

항상 양질의 강의를 올려주셔서 감사합니다. 강사님께서 인프런, 패스트캠퍼스, 애듀캐스트에 올려주신 강의는 Lenet 빼고는 다 들은 것 같습니다. 감사합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요! 질문하신 내용들에 대한 답변 드립니다.

질문.1

먼저 metric_object는 단순히 metric들을 연산해야되는 경우가 많기 때문에 하나의 함수로 묶어준 것에 불과합니다. 따라서 이 함수는 iteration마다 loss를 계산하고, 이 계산된 결과를 각각 가지고 있게 됩니다. 

이 metric들은 backpropagation이랑 상관이 없는게, backpropagation은 binary cross entropy, categorical cross entropy와 같은 값에서부터 게산되는 것이지 accuracy와 같은 metric에서부터 시작되는 것이 아닙니다.

따라서 derivative랑은 사실 큰 상관이 없습니다.

질문.2

metric object에 대해 result를 해주면, 누적된 loss를 돌려주게 됩니다! Tensorflow 공식 홈페이지에도 나와있는 것으로 기억합니다. 즉 epoch에 대한 전체 loss를 구할 땐 iteration마다의 loss의 평균을 구해야 하는데, 이렇게 iteration마다 누적된 loss들을 epoch에 대한 연산이 끝나고 .result()를 통해 구할 수 있습니다

질문.3

이런 문제가 생길경우 .result()가 가지고 있는 method를 dir( )를 통해 먼저 확인하기 바랍니다. 만약 numpy라는 method가 없다면 결과의 data type을 살펴보고, 시각화하는데 이상이 없다면 그대로 사용해도 괜찮습니다.

질문.4

말씀하신대로 tf.cast를 통해 tf.float32로 바꿔줘야합니다. Tensorflow에서의 기본 연산은 float으로 진행되기 때문에 바꾸지 않을 경우 오류가 발생하게 될 겁니다. 따라서 보내주신대로 type casting을 하는 것이 맞습니다

감사합니다.

신경식 드림

자세한 답변 감사드립니다!