PyTorch에서 Parameters와 Children의 차이점
PyTorch에서 Parameters와 Children의 차이점
Parameters:
- 모델의 학습 가능한 변수입니다.
- 모델의 성능을 향상시키기 위해 학습 알고리즘에 의해 업데이트됩니다.
- 일반적으로 텐서 형태로 표현됩니다.
- 모델의 모든 층에 존재하며, 각 층의 학습 가능한 가중치와 편향을 포함합니다.
Children:
- 모델의 하위 모듈입니다.
- 다른 레이어나 모듈로 구성될 수 있습니다.
- 모델 구조를 정의하고 전방 및 후방 전파를 수행하는 데 사용됩니다.
- 모델의 계층 구조를 나타내며, 각 계층은 서로 다른 연산을 수행합니다.
Parameters와 Children의 주요 차이점:
구분 | Parameters | Children |
---|---|---|
역할 | 학습 가능한 변수 | 하위 모듈 |
업데이트 | 학습 알고리즘에 의해 업데이트됨 | 업데이트되지 않음 |
형태 | 텐서 | 레이어 또는 모듈 |
위치 | 모든 층에 존재 | 모델 구조에 따라 존재 |
예시:
import torch
class MyModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc1 = torch.nn.Linear(10, 100)
self.fc2 = torch.nn.Linear(100, 10)
def forward(self, x):
x = self.fc1(x)
x = self.fc2(x)
return x
model = MyModel()
# Parameters
print(model.parameters())
# Output:
# <generator object Parameters at 0x7f89b0749790>
# Children
print(model.children())
# Output:
# <generator object Children at 0x7f89b0749810>
# Parameters 접근
print(list(model.parameters())[0])
# Output:
# Parameter containing:
# tensor([[-0.0049, 0.0010, 0.0113, ..., -0.0052, 0.0024, 0.0007]],
# requires_grad=True)
# Children 접근
print(list(model.children())[0])
# Output:
# Linear(in_features=10, out_features=100, bias=True)
결론:
- Parameters는 모델의 학습 가능한 변수이며 모델 성능 향상을 위해 업데이트됩니다.
- Children은 모델의 하위 모듈이며 모델 구조 정의 및 전/후방 전파에 사용됩니다.
- 모델을 이해하고 활용하기 위해 Parameters와 Children의 차이점을 명확히 인지하는 것이 중요합니다.
예제 코드
import torch
class MyModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc1 = torch.nn.Linear(10, 100)
self.fc2 = torch.nn.Linear(100, 10)
def forward(self, x):
x = self.fc1(x)
x = self.fc2(x)
return x
model = MyModel()
# Parameters
print(model.parameters())
# Output:
# <generator object Parameters at 0x7f89b0749790>
# Children
print(model.children())
# Output:
# <generator object Children at 0x7f89b0749810>
# Parameters 접근
print(list(model.parameters())[0])
# Output:
# Parameter containing:
# tensor([[-0.0049, 0.0010, 0.0113, ..., -0.0052, 0.0024, 0.0007]],
# requires_grad=True)
# Children 접근
print(list(model.children())[0])
# Output:
# Linear(in_features=10, out_features=100, bias=True)
MyModel
클래스는 두 개의torch.nn.Linear
레이어를 가진 간단한 모델입니다.parameters()
메서드는 모델의 모든 Parameters를 반환합니다.children()
메서드는 모델의 모든 Children을 반환합니다.list(model.parameters())[0]
은 모델의 첫 번째 Parameter를 가져옵니다.list(model.children())[0]
은 모델의 첫 번째 Child를 가져옵니다.
출력:
- Parameters는 텐서 형태이며 모델의 학습 가능한 변수를 나타냅니다.
- Children은
torch.nn.Linear
레이어 객체이며 모델의 하위 모듈을 나타냅니다.
대체 방법
model.modules()
메서드를 사용하여 모델의 모든 모듈을 순회할 수 있습니다.- 각 모듈은
parameters()
및children()
메서드를 가지고 있으며, 이를 통해 Parameters와 Children에 접근할 수 있습니다.
for module in model.modules():
print(module)
print(module.parameters())
print(module.children())
Linear(in_features=10, out_features=100, bias=True)
<generator object Parameters at 0x7f89b0749790>
<generator object Children at 0x7f89b0749810>
Linear(in_features=100, out_features=10, bias=True)
<generator object Parameters at 0x7f89b0749890>
<generator object Children at 0x7f89b0749910>
모델 파라미터 업데이트:
optimizer.step()
메서드를 사용하여 모델의 모든 Parameters를 업데이트할 수 있습니다.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(10):
# ...
optimizer.step()
pytorch