with 구문이 무엇을 의미합니까?
426
작성한 질문수 4
파이썬 초보자로서 with으로 시작되는 구문을 처음 보게 되어서, 구글링을 해보니 파일을 열 때 닫는 것을 잊지 않게 해주는 데 유용한 구문으로 보통 사용되는 것으로 보입니다.
그러나 파일 오픈이 아닌 텐서플로우에서 쓰이는 경우는 짐작할 수가 없습니다.
import tensorflow as tf 가
"텐서플로우 라이브러리를 임포트하되 앞으로 tensorflow 대신 간단하게 tf로 줄여서 쓰겠다"
를 의미하는 것처럼,
with tf.GradientTape() as tape 는
tf.GradientTape() 대신 tape로 줄여서 쓰겠다 라는 것을 의미하는 것입니까?
그렇다면 왜 tape.gradient(loss,[W,b]) 대신
tf.GradientTape().gradient(loss,[W,b]) 라고 치면 런타임 에러가 뜨는건지요?
그전에, tf.GradientTape()은 인풋이 없는 함수의 일종입니까? 아니면 다른 어떤 것입니까?(tf.square가 제곱해주는 함수인 것처럼 말입니다)
또한 그와 별개로 with 구문이 작동하는 방식 자체도 직관적으로 이해가 되지 않습니다.
tf.GradientTape() as tape를 with으로 선언했다면 tape라는 단어는 with 안에서만 쓰여야 하는게 아닌가요?
어떻게 with 과 동일한 들여쓰기 레벨을 가진
gradient=tape.gradient(loss,[W,b]) 과 같은 방식으로 유효하게 사용될 수 있는 것인가요?
답변 1
1
안녕하세요~. 반갑습니다.
with tf.GradientTape()을 이해하기 정확히 이해하기 위해서는 텐서플로의 autodiff(자동 미분 계산) 과정에 대한 이해가 필요합니다.
1. 우선 일차적으로 Python에서 with 구문은 말씀해주신 바가 맞습니다. (파일을 열고 닫는 등의 용도로 활용합니다.)
2. 텐서플로에서 with tf.GradientTape() as tape 구문은 해당 컨텍스트 내에서 계산된 연산들을 미분값 계산을 위한 tape에 기록 해놓게 됩니다.
3. 이렇게 tape에 기록해놓은 연산들을 다시 tape.gradient 함수를 이용해서 미분값을 역으로 계산하게 됩니다.
즉,
1. with tf.GradientTape() 구간에서는 각 연산들을 tape에 기록하고
2. 기록이 끝난 상태에서 with 구간을 벗어난 상태에서 tape.gradient 함수를 이용해서 역으로 미분값을 계산합니다.
autodiff에 대한 더 자세한 내용은 아래 내용들을 참조하세요.
1. https://www.tensorflow.org/guide/autodiff
2. https://rfriend.tistory.com/m/556?category=711317
실용적인 목적으로 tensorflow를 사용하시려는 상황이시라면 해당 코드구간은 그냥 하나의 관용적인 코드 패턴으로 인식해서 사용하시는 것을 추천드립니다~.
감사합니다.
22강 코드 call()메서드 is_training -> model(x,False)로 호출시 밸류에러 참고
0
47
1
선형 회귀 모델에 대해서 질문 있습니다
0
253
2
tf.keras.model.reset_states()
0
745
2
[질문]colab환경에서 텐서보드(TensorBoard)를 이용해서 학습과정 시각화(Visualization)하기강의 관련 질문
0
499
2
[질문]colab환경에서 tf.train.CheckpointManager API를 이용해서 파라미터 저장하고 불러오기 실행에 대한 질문
0
286
2
colab에서 구동 가능한 char-rnn 코드 관련 질문
0
217
1
안녕하세요 파이썬이랑 tensorflow 정확한 버전 알수있을까요?
0
249
1
colab 환경에서 Autoencoder 구현하였으나 결과가 보이지 않는 분들 참고사항
0
209
1
Mnist 에 keras를 통해 softmax를 활용한 regerssion error 발생
0
2098
2
GRU 리셋게이트, 포겟게이트 질문
0
259
1
ANN 구현
0
347
1
char-rnn 코랩 에러 ... 못보나요,, cpus는 너무 느려서
0
589
1
ANN으로 Mnist 숫자분류기 코드질문
0
293
1
ppt 12p 질문
0
381
1
keras에서 이미 정의된 모델을 가져와 학습할 경우
0
654
1
모델 코드 질문
0
368
1
코드 질문
0
277
1
ppt 10p
0
384
1
ppt 13p 추가 질문
0
256
1
ppt 9p 추가 질문
0
264
1
ppt 5p 질문
0
320
1
ppt 9p 질문
0
281
1
vanishing gradient
0
273
1
TensorFlow 2.0을 이용한 CIFAR-10 이미지 분류를 위한 CNN 구현 질문
0
256
1





