Что вы подразумеваете под временными шагами в LSTM, временной информацией и пространственной информацией?

#python-3.x #deep-learning #pytorch #lstm

Вопрос:

Ниже приведены мои данные, которые я передам в CNN, а затем в LSTM (хочу извлечь как пространственные, так и временные характеристики).

набор данных: класс 1 = Ограничение скорости 20 класс 2 = Ограничение скорости 90

 train_path='/content/drive/MyDrive/Dataset_manual_pytorch/train'
test_path='/content/drive/MyDrive/Dataset_manual_pytorch/test'

train = torchvision.datasets.ImageFolder(train_path,transform=transformations)
test = torchvision.datasets.ImageFolder(test_path,transform=transformations)

train_loader = torch.utils.data.DataLoader(train, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test, batch_size =32, shuffle=True)
 

Это моя архитектура CNN (простая), в которой я загружаю изображения RGB с размером пакета 64, torch.Size([64, 3, 32, 32])

 class Cnn(ImageClassificationBase):
    def __init__(self):
        super().__init__()
        self.network = nn.Sequential(
            nn.Conv2d(3, 8, kernel_size=3,stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2, 2), # output: 8 x 16 x 16

            nn.Conv2d(8, 16, kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2, 2)) # output: 16 x 8 x 8

            
            # nn.Flatten(), 
            # nn.Linear(16*8*8, 2))
        
    def forward(self, xb):
        xb = self.network(xb)
        print("CNN Actual OutPut before reshaping: n", xb.shape)
        xb = xb.view(-1, 1024)
        return xb
CNN_4 = Cnn_LSTM()
CNN_4
 

Форма вывода CNN такова: torch.Size([64, 16, 8, 8])
Я преобразовал его в эту форму, чтобы пройти через LSTM: torch.Size([64, 1, 1024])

Это сочетание архитектуры CNN и LSTM

 class Combine(nn.Module):
    def __init__(self):
        super(Combine, self).__init__()
        self.cnn = Cnn()
        self.rnn = nn.LSTM(
            input_size=1024, 
            hidden_size=64, 
            num_layers=1,
            batch_first=True)
        self.linear = nn.Linear(64,10)

    def forward(self, x):
        batch_size, timesteps, C, H, W = x.size()
        c_in = x.view(batch_size * timesteps, C, H, W)
        c_out = self.cnn(c_in)
        print("nAfter CNNs: n", c_out)
        print("Shape of CNN output: n", c_out.shape)
        r_in = c_out.view(batch_size, timesteps, -1)
        print("nInput to RNN:n", r_in)
        print('Shape of input to RNN: n',r_in.shape)
        r_out, (h_n, h_c) = self.rnn(r_in)
        r_out2 = self.linear(r_out[:, -1, :])
        
        return F.log_softmax(r_out2, dim=1)

model_2 = Combine()
model_2
 

The Output of CNN LSTM is: torch.Size([64, 10])
(Note this is for 64 batch size, I break the loop for further batch_sizes to see the result)

**Вопрос 1: batch_size, timesteps, C, H, W = x.size() Что означает временные интервалы? Зачем мы его используем? это как — то связано с извлечением временных характеристик?

Вопрос 2: Мы получаем выходную форму torch.Size([64, 10]) , Где находится временная характеристика или информация в ней?

Может ли кто-нибудь объяснить мне, как вышеприведенная модель извлекает пространственную и временную информацию, которую я не могу понять, наблюдая за выходами обеих архитектур?**