재현성은 실험을 반복하거나 결과를 검증할때, 일관된 결과를 얻어야하기때문에 필요하다.
신경망이 학습하는 방법:
랜덤숫자 부터 시작 -> tensor 연산 수행 -> 데이터의 더 나은 표현 시도를 위한 랜덤 숫자 업데이트 -> 더 나은 랜덤 숫자 업데이트 -> 더 나은 랜덤 숫자 업데이트 -> ...
신경망의 무작위성을 줄이기 위해 그리고 파이토치는 random seed를 사용한다.
본질적으로 random seed는 'flavour' 또는 '무작위성의 종류'를 선택하는 것이다.
import torch
# Create two random tensors
random_tensor_A = torch.rand(3, 4)
random_tensor_B = torch.rand(3, 4)
print(f"Random Tensor A: {random_tensor_A}")
print(f"\nRandom Tensor B: {random_tensor_B}")
print(f"\nRandom Tensor A == Random Tensor B: \n{random_tensor_A == random_tensor_B}")

위 결과와 같이 텐서는 랜덤으로 무작위 숫자가 선정이되기 때문에 재현할수가 없다.
해서, 아래와 같이 Random Seed를 활용하여 무작위 선정한 숫자들을 재현한다.
# Making some random but reproducible tensors
import torch
# Set the random seed
RANDOM_SEED = 42
torch.manual_seed(RANDOM_SEED)
random_tensor_C = torch.rand(3, 4)
torch.manual_seed(RANDOM_SEED)
random_tensor_D = torch.rand(3, 4)
print(f"Random Tensor C: {random_tensor_C}")
print(f"Random Tensor D: {random_tensor_D}")
print(f"\nRandom Tensor C == Random Tensor D: \n{random_tensor_C == random_tensor_D}")

주의해야할 점은 각 텐서가 생성될때마다 RandomSeed를 다시 선언해주어야하는것이다. 만일 random_tensor_D위쪽에 RandomSeed를 선언하지 않았다면 또다른 랜덤 숫자가 생성되었을것이다.
짱이다!!!!!!