#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])
, Где находится временная характеристика или информация в ней?
Может ли кто-нибудь объяснить мне, как вышеприведенная модель извлекает пространственную и временную информацию, которую я не могу понять, наблюдая за выходами обеих архитектур?**