PyTorch 深度学习实战:C3D 模型训练 HMDB51 数据集
这段代码涉及了使用 PyTorch 进行深度学习任务的一些基本操作。以下是对每一行代码的逐句详细分析:
-
import torch: 导入 PyTorch 库。 -
import torch.nn as nn: 导入 PyTorch 中的神经网络模块。 -
import torch.optim as optim: 导入 PyTorch 中的优化器模块。 -
from torch.utils.data import DataLoader: 从 PyTorch 中的数据加载器模块导入 DataLoader,用于加载和处理数据集。 -
import videos: 导入自定义的 videos 模块。 -
from c3d import C3D: 从自定义的 c3d 模块导入 C3D 模型。 -
from hmdb51 import HMDB51: 从自定义的 hmdb51 模块导入 HMDB51 数据集。 -
batch_size = 4: 设置每个训练批次的样本数量为 4。 -
lr = 1e-3: 设置学习率为 0.001。 -
num_epochs = 10: 设置训练的总轮数为 10。 -
train_dataset = HMDB51('train', videos): 创建一个 HMDB51 数据集的实例,使用 'train' 作为训练集,并传入自定义的 videos 对象。 -
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True): 创建一个训练数据加载器,将训练数据集传入 DataLoader,并指定批次大小和数据混洗。 -
model = C3D(num_classes=51): 创建一个 C3D 模型的实例,其中 num_classes 参数设置为 51。 -
model.load_state_dict(torch.load('c3d_hmdb51.pt')): 从文件中加载预训练的 C3D 模型权重。
20-21. model.fc6 = nn.Linear(4096, 512) 和 model.fc7 = nn.Linear(512, 51): 更改 C3D 模型的最后两层全连接层,将输出维度调整为适应 HMDB51 数据集的类别数。
-
model.train(): 设置模型为训练模式,这将启用模型中的 Dropout 等训练相关的操作。 -
optimizer = optim.Adam(model.parameters(), lr=lr): 创建一个 Adam 优化器,传入 C3D 模型的参数和设定的学习率。 -
criterion = nn.CrossEntropyLoss(): 创建一个交叉熵损失函数,用于计算模型输出和真实标签之间的损失。
29-30. for epoch in range(num_epochs): 和 for i, (inputs, labels) in enumerate(train_loader):: 迭代训练数据集中的所有批次和样本。
-
inputs = inputs.cuda(): 将输入张量移至 GPU 上进行加速计算。 -
labels = labels.cuda(): 将标签张量移至 GPU 上进行加速计算。 -
optimizer.zero_grad(): 清空优化器中之前的梯度信息。 -
outputs = model(inputs): 通过 C3D 模型对输入进行前向传播,得到预测输出。 -
loss = criterion(outputs, labels): 计算预测输出和真实标签之间的损失。 -
loss.backward(): 反向传播计算梯度。 -
optimizer.step(): 根据梯度更新模型的参数。 -
running_loss += loss.item(): 累加当前批次的损失值。 -
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, num_epochs, running_loss / len(train_loader))): 打印每个轮次的平均损失值。
以上是对所给代码的逐句详细分析。这段代码的主要功能是使用 C3D 模型对 HMDB51 数据集进行训练,并输出每个轮次的平均损失值。
原文地址: http://www.cveoy.top/t/topic/nOh 著作权归作者所有。请勿转载和采集!