我想解决这个问题。
我使用pytorch和[(3, 1920, 1080), 60fps, 10sec]
视频数据制作了CNN-LSTM架构。
CNN架构如下
1。数据拆分
我将60fps的视频分为1个批量大小(因此,它总共有10块),并用2个批量大小测试了样本模型
2。模型培训
培训代码如下
def train(dataloader, cnn_model, lstm_model, loss_fn, optimizer):
for batch, (X, y) in enumerate(dataloader):
cnn_results = torch.zeros(BATCH_SIZE,FPS*SEC,CNN_OUTPUT, device=device)
# CNN forward
for idx, batch in enumerate(X):
batch = batch.type(torch.FloatTensor).to(device).permute(0, 3, 1, 2)
cnn_result = cnn_model(batch)
cnn_results[idx] = cnn_result
# LSTM forward
lstm_results = torch.zeros(BATCH_SIZE, 3, device=device)
for idx, result in enumerate(cnn_results):
(lstm_hidden, lstm_cell) = lstm_model.module.initLSTM()
l_output, (lstm_hidden, lstm_cell) = lstm_model(result.unsqueeze(0), lstm_hidden, lstm_cell)
lstm_results[idx] = l_output[-1]
y = y.to(device)
loss = criterion(lstm_results, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(loss)
loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
epochs = 5
for t in range(epochs):
print(f"Epoch {t+1}\n-------------------------------")
train(train_loader, model, lstm, loss_fn, optimizer)
print("Done!")
首先,利用CNN对60fps图像进行处理。这些都储存在一个火炬。零容器(大小:批量大小,60,64)
这些东西用于LSTM的输入。最终输出为(批量大小,3)
3。硬件
我使用2080TI超级GPU*8,所以GPU的总内存是11019MiB*8
问题
我真的不知道为什么火炬说“失去记忆”。 我想处理我的视频数据就足够了。 我想有一件事是,由于我的代码,每个时代都会存储内存
增补1-nvidia smi映像 enter image description here
附加2-模型参数比较
目前没有回答
相关问题 更多 >
编程相关推荐