PyTorch에서 입력 오류는 주어진 모델이나 연산이 특정 차원을 필요로 할 때 발생할 수 있습니다. 그러나 3D 텐서가 아니라고 해서 반드시 오류가 발생하는 것은 아닙니다. PyTorch에서는 모델의 구조와 레이어에 따라 요구되는 입력 텐서의 차원이 다릅니다.
Fully Connected Layer (nn.Linear):
2D 텐서 입력을 필요로 합니다. (batch_size, num_features)
형태의 입력이 필요합니다.
예시:
import torch
import torch.nn as nn
linear = nn.Linear(10, 5) # 입력 10, 출력 5
x = torch.randn(32, 10) # (batch_size=32, num_features=10)
output = linear(x) # 출력 크기: (32, 5)
Recurrent Neural Networks (RNN, LSTM, GRU):
(batch_size, seq_length, input_size)
형태가 필요합니다.rnn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2)
x = torch.randn(5, 3, 10) # (seq_length=5, batch_size=3, input_size=10)
output, (hn, cn) = rnn(x)
Convolutional Neural Networks (CNN):
(batch_size, num_channels, height, width)
형태가 필요합니다.cnn = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
x = torch.randn(32, 3, 64, 64) # (batch_size=32, num_channels=3, height=64, width=64)
output = cnn(x) # 출력 크기: (32, 16, 64, 64)
Sequence Models (Transformer):
(seq_length, batch_size, num_features)
또는 (batch_size, seq_length, num_features)
형태가 필요할 수 있습니다.unsqueeze()
를 사용하여 차원을 추가할 수 있습니다.x = torch.randn(32, 10) # 2D 텐서
x = x.unsqueeze(1) # 차원을 추가하여 3D 텐서로 변환 (32, 1, 10)
squeeze()
를 사용하여 불필요한 차원을 제거할 수 있습니다.x = torch.randn(32, 1, 10) # 3D 텐서
x = x.squeeze(1) # 2D 텐서로 축소 (32, 10)
nn.Linear
, nn.LSTM
, nn.Conv2d
)가 요구하는 차원에 맞는 입력을 제공해야 합니다.unsqueeze()
나 squeeze()
등을 통해 적절한 차원으로 조정할 수 있습니다.