[python] 파이썬 PyTorch에서 가중치 초기화를 설정하는 방법은?

파이썬 PyTorch에서 가중치 초기화를 설정하는 방법은 여러 가지가 있습니다.

  1. 기본 초기화: PyTorch는 기본적으로 제공하는 초기화 방법을 사용하여 가중치를 초기화합니다. 예를 들어, torch.nn.Linear를 사용하여 선형 레이어를 만든다고 가정하면, 해당 레이어의 가중치는 기본 초기화 방법을 사용하여 초기화됩니다.

  2. 사용자 정의 초기화: 사용자는 직접 가중치 초기화 방법을 정의할 수도 있습니다. 예를 들어, 모든 가중치를 0으로 초기화하고 싶다면 다음과 같이 할 수 있습니다:

    import torch
    import torch.nn as nn
    
    def weights_init(m):
        if isinstance(m, nn.Linear):  # 원하는 레이어 타입을 지정합니다.
            nn.init.constant_(m.weight, 0.0)  # 가중치를 0으로 초기화합니다.
       
    model = nn.Sequential(
        nn.Linear(10, 20),
        nn.ReLU(),
        nn.Linear(20, 30)
    )
    model.apply(weights_init)  # 사용자 정의 초기화 함수를 모델에 적용합니다.
    

    이렇게 하면 모든 nn.Linear 레이어의 가중치가 0으로 초기화됩니다.

  3. 사전 정의된 초기화 방법: PyTorch에는 다양한 사전 정의된 초기화 방법이 있습니다. 예를 들어, Xavier 초기화, He 초기화 등이 있습니다. 이러한 초기화 방법은 torch.nn.init 모듈에서 제공됩니다. 사용하려는 초기화 방법에 따라서 해당 함수를 사용하여 가중치를 초기화할 수 있습니다. 예를 들어, Xavier 방법을 사용하여 가중치를 초기화하려면 다음과 같이 할 수 있습니다:

    import torch
    import torch.nn as nn
    
    model = nn.Sequential(
        nn.Linear(10, 20),
        nn.ReLU(),
        nn.Linear(20, 30)
    )
    nn.init.xavier_uniform_(model[0].weight)  # 첫번째 레이어의 가중치를 Xavier 방법으로 초기화합니다.
    

    이렇게 하면 첫 번째 nn.Linear 레이어의 가중치가 Xavier 초기화 방법을 사용하여 초기화됩니다.

참고 자료: