|
107 | 107 | # PyTorch는 랜덤 또는 0으로만 이루어진 텐서를 생성하는 메소드를 제공하고, |
108 | 108 | # 우리는 간단한 선형 모델의 가중치(weights)와 절편(bias)을 생성하기 위해서 이것을 사용할 것입니다. |
109 | 109 | # 이들은 일반적인 텐서에 매우 특별한 한 가지가 추가된 것입니다: 우리는 PyTorch에게 이들이 |
110 | | -# 기울기(gradient)가 필요하다고 알려줍니다. |
| 110 | +# 변화도(gradient)가 필요하다고 알려줍니다. |
111 | 111 | # 이를 통해 PyTorch는 텐서에 행해지는 모든 연산을 기록하게 하고, |
112 | | -# 따라서 *자동적으로* 역전파(back-propagation) 동안에 기울기를 계산할 수 있습니다! |
| 112 | +# 따라서 *자동적으로* 역전파(back-propagation) 동안에 변화도를 계산할 수 있습니다! |
113 | 113 | # |
114 | 114 | # 가중치에 대해서는 ``requires_grad`` 를 초기화(initialization) **다음에** 설정합니다, |
115 | | -# 왜냐하면 우리는 해당 단계가 기울기에 포함되는 것을 원치 않기 때문입니다. |
| 115 | +# 왜냐하면 우리는 해당 단계가 변화도에 포함되는 것을 원치 않기 때문입니다. |
116 | 116 | # (PyTorch에서 ``_`` 다음에 오는 메소드 이름은 연산이 인플레이스(in-place)로 수행되는 것을 의미합니다.) |
117 | 117 | # |
118 | 118 | # .. note:: `Xavier initialisation <http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf>`_ |
|
125 | 125 | bias = torch.zeros(10, requires_grad=True) |
126 | 126 |
|
127 | 127 | ############################################################################### |
128 | | -# PyTorch의 기울기를 자동으로 계산 해주는 기능 덕분에, Python 표준 함수 |
| 128 | +# PyTorch의 변화도를 자동으로 계산 해주는 기능 덕분에, Python 표준 함수 |
129 | 129 | # (또는 호출 가능한 객체)를 모델로 사용할 수 있습니다! |
130 | 130 | # 그러므로 간단한 선형 모델을 만들기 위해서 단순한 행렬 곱셈과 브로드캐스트(broadcast) |
131 | 131 | # 덧셈을 사용하여 보겠습니다. 또한, 우리는 활성화 함수(activation function)가 필요하므로, |
@@ -155,7 +155,7 @@ def model(xb): |
155 | 155 |
|
156 | 156 | ############################################################################### |
157 | 157 | # 여러분이 보시듯이, ``preds`` 텐서(tensor)는 텐서 값 외에도, 또한 |
158 | | -# 기울기 함수(gradient function)를 담고 있습니다. |
| 158 | +# 변화도 함수(gradient function)를 담고 있습니다. |
159 | 159 | # 우리는 나중에 이것을 역전파(backpropagation)를 위해 사용할 것입니다. |
160 | 160 | # 이제 손실함수(loss function)로 사용하기 위한 음의 로그 우도(negative log-likelihood)를 |
161 | 161 | # 구현합시다. (다시 말하지만, 우리는 표준 Python을 사용할 수 있습니다.): |
@@ -195,17 +195,17 @@ def accuracy(out, yb): |
195 | 195 | # - 데이터의 미니배치를 선택 (``bs`` 크기) |
196 | 196 | # - 모델을 이용하여 예측 수행 |
197 | 197 | # - 손실 계산 |
198 | | -# - ``loss.backward()`` 를 이용하여 모델의 기울기 업데이트, 이 경우에는, ``weights`` 와 ``bias``. |
| 198 | +# - ``loss.backward()`` 를 이용하여 모델의 변화도 업데이트, 이 경우에는, ``weights`` 와 ``bias``. |
199 | 199 | # |
200 | | -# 이제 우리는 이 기울기들을 이용하여 가중치와 절편을 업데이트 합니다. |
| 200 | +# 이제 우리는 이 변화도들을 이용하여 가중치와 절편을 업데이트 합니다. |
201 | 201 | # 우리는 이것을 ``torch.no_grad()`` 컨텍스트 매니저(context manager) 내에서 실행합니다, |
202 | | -# 왜냐하면 이러한 실행이 다음 기울기의 계산에 기록되지 않기를 원하기 때문입니다. |
203 | | -# PyTorch의 자동 기울기(Autograd)가 어떻게 연산을 기록하는지 |
| 202 | +# 왜냐하면 이러한 실행이 다음 변화도의 계산에 기록되지 않기를 원하기 때문입니다. |
| 203 | +# PyTorch의 자동 변화도(Autograd)가 어떻게 연산을 기록하는지 |
204 | 204 | # `여기 <https://pytorch.org/docs/stable/notes/autograd.html>`_\에서 더 알아볼 수 있습니다. |
205 | 205 | # |
206 | | -# 그러고 나서 기울기를 0으로 설정합니다, 그럼으로써 다음 루프(loop)에 준비하게 됩니다. |
207 | | -# 그렇지 않으면, 우리의 기울기들은 일어난 모든 연산의 누적 집계를 기록하게 되어버립니다. |
208 | | -# (즉, ``loss.backward()`` 가 이미 저장된 것을 대체하기보단, 기존 값에 기울기를 *더하게* 됩니다). |
| 206 | +# 그러고 나서 변화도를 0으로 설정합니다, 그럼으로써 다음 루프(loop)에 준비하게 됩니다. |
| 207 | +# 그렇지 않으면, 우리의 변화도들은 일어난 모든 연산의 누적 집계를 기록하게 되어버립니다. |
| 208 | +# (즉, ``loss.backward()`` 가 이미 저장된 것을 대체하기보단, 기존 값에 변화도를 *더하게* 됩니다). |
209 | 209 | # |
210 | 210 | # .. tip:: 여러분들은 PyTorch 코드에 대하여 표준 python 디버거(debugger)를 사용할 수 있으므로, |
211 | 211 | # 매 단계마다 다양한 변수 값을 점검할 수 있습니다. |
@@ -320,7 +320,7 @@ def forward(self, xb): |
320 | 320 |
|
321 | 321 | ############################################################################### |
322 | 322 | # 이전에는 훈련 루프를 위해 이름 별로 각 매개변수(parameter)의 값을 업데이트하고 다음과 같이 |
323 | | -# 각 매개 변수에 대한 기울기들을 개별적으로 수동으로 0으로 제거해야 했습니다: |
| 323 | +# 각 매개 변수에 대한 변화도들을 개별적으로 수동으로 0으로 제거해야 했습니다: |
324 | 324 | # |
325 | 325 | # .. code-block:: python |
326 | 326 | # |
@@ -423,8 +423,8 @@ def forward(self, xb): |
423 | 423 | # opt.step() |
424 | 424 | # opt.zero_grad() |
425 | 425 | # |
426 | | -# (``optim.zero_grad()`` 는 기울기를 0으로 재설정 해줍니다. 다음 미니 배치에 대한 |
427 | | -# 기울기를 계산하기 전에 호출해야 합니다.) |
| 426 | +# (``optim.zero_grad()`` 는 변화도를 0으로 재설정 해줍니다. 다음 미니 배치에 대한 |
| 427 | +# 변화도를 계산하기 전에 호출해야 합니다.) |
428 | 428 |
|
429 | 429 | from torch import optim |
430 | 430 |
|
@@ -572,7 +572,7 @@ def get_model(): |
572 | 572 | # |
573 | 573 | # 검증 데이터셋에 대한 배치 크기는 학습 데이터셋 배치 크기의 2배를 사용할 것입니다. |
574 | 574 | # 이는 검증 데이터셋에 대해서는 역전파(backpropagation)가 필요하지 않으므로 메모리를 |
575 | | -# 덜 사용하기 때문입니다 (기울기를 저장할 필요가 없음). |
| 575 | +# 덜 사용하기 때문입니다 (변화도를 저장할 필요가 없음). |
576 | 576 | # 더 큰 배치 크기를 사용하여 손실을 더 빨리 계산하기 위해 이렇게 합니다. |
577 | 577 |
|
578 | 578 | train_ds = TensorDataset(x_train, y_train) |
@@ -867,7 +867,7 @@ def preprocess(x, y): |
867 | 867 | # |
868 | 868 | # + ``Module``: 함수처럼 동작하지만, 또한 상태(state) (예를 들어, 신경망의 계층 가중치)를 |
869 | 869 | # 포함할 수 있는 호출 가능한 오브젝트를 생성합니다. |
870 | | -# 이는 포함된 ``Parameter`` (들)가 어떤 것인지 알고, 모든 기울기를 0으로 설정하고 가중치 |
| 870 | +# 이는 포함된 ``Parameter`` (들)가 어떤 것인지 알고, 모든 변화도를 0으로 설정하고 가중치 |
871 | 871 | # 업데이트 등을 위해 반복할 수 있습니다. |
872 | 872 | # + ``Parameter``: ``Module`` 에 역전파 동안 업데이트가 필요한 가중치가 있음을 알려주는 |
873 | 873 | # 텐서용 래퍼입니다. `requires_grad` 속성이 설정된 텐서만 업데이트 됩니다. |
|
0 commit comments