- argparse模块
import argparse
parser = argparse.ArgumentParser(description='Add two integers')
parser.add_argument('num1', type=int, help='the first integer')
parser.add_argument('num2', type=int, help='the second integer')
args = parser.parse_args()
result = args.num1 + args.num2
print('{} + {} = {}'.format(args.num1, args.num2, result))
使用如下命令即可运行
$ python add.py 1 2
其中 使用:
$ python add.py -h
即可打印出description和help中的信息。
-
if __name__ == ‘’__main__‘’
在 Python 语言中,当一个 Python 文件被运行时,Python 解释器会自动设置一个全局变量__name__,其值为当前文件的文件名,但是当该文件作为一个模块被导入到其他 Python 文件中时,该变量的值不再是文件名,而是模块名。这样就可以通过if __name__ == “__main__”:来判断当前文件是被直接运行还是被导入到其他文件中。
如果是被导入到其他文件中,if__name__ == “__main__”:中的代码将不会被执行,只有当该文件被直接执行时才会执行其中的代码。这个特性在编写模块时十分有用,因为它可以避免不必要的代码执行和重复执行,同时也使得模块可以被多次导入而不会产生副作用 -
batch和epoch
Batch(批次)指的是在训练神经网络时,将输入数据分成若干个小批量进行训练。每个小批量包含多个样本实例,对于每个小批量,神经网络会根据当前的模型参数和损失函数计算出其梯度,然后利用优化器更新模型参数,从而逐步提高模型性能。
Epoch(轮次)指的是将训练集中的所有样本实例都看一遍的训练过程。当神经网络完成了所有训练集中的样本实例的训练后,即完成了一轮训练。通常情况下,一个神经网络需要多轮训练才能达到较好的性能。在每一轮训练中,神经网络都会利用不同的小批量数据进行训练,通过多轮迭代不断学习提高。
Batch 和 Epoch 的区别在于,Batch 是神经网络在训练过程中所使用的数据量级,而 Epoch 是神经网络在训练过程中的迭代次数。具体来说,如果将整个训练集分成若干个 Batch 进行训练,那么一轮 Epoch 中就会有多个 Batch,每个 Batch 中包含的样本数可能不同。如果按照每一轮 Epoch 中所有样本实例都看一遍的标准进行训练,则神经网络在每轮 Epoch 中需要使用整个训练集中的数据。
notice:在每一次Epoch结束后,我们根据训练数据计算损失函数关于模型参数的梯度,并使用优化算法来更新模型的参数。每次Epoch都会得到一组新的模型参数,这些参数将覆盖上一次Epoch得到的参数,成为下一次Epoch的起点。因此,在进行多次Epoch的训练时,模型参数会被逐渐调整、优化,直到达到一定的收敛程度或者满足停止条件为止。 -
k_test和k_fold
K_fold:对数据集进行 K 折交叉验证,即将数据集分成 K 份,每次选择其中一份作为测试集,剩下的 K-1 份作为训练集,重复 K 次,最后得到 K 个模型的评估结果。默认值为 5,即将数据集分成 5 份进行交叉验证。
k_test:指定在 K 折交叉验证中,用于测试的第 k 份数据(1 <= k <= K)。例如,若 K=5,k_test=5,则表示在第 5 次交叉验证中使用第 5 份数据作为测试集。默认值为 5,即使用最后一份数据(即第 5 份)作为测试集。 -
权重衰减
权重衰减(Weight Decay)是一种常用的正则化方法,其目的是限制模型参数的大小,以缓解过拟合问题。在深度学习中,通过对目标函数添加 L2 正则化项(岭回归),可以实现权重衰减。 -
resume
resume 是一个在深度学习中常用的参数,它表示要恢复训练时保存的模型参数的路径。在训练过程中,我们通常会定期将当前的模型参数保存下来,以便在之后的训练中恢复这些参数,或者在测试时使用这些参数来评估模型的性能。
以下是一个例子:
import torch
model = MyModel()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
# 如果 resume 参数不为 None,则加载已有模型的参数
if resume:
checkpoint = torch.load(resume)
model.load_state_dict(checkpoint['model'])
optimizer.load_state_dict(checkpoint['optimizer'])
# 进行模型训练
for epoch in range(num_epochs):
# 训练一个 epoch
train_one_epoch(model, optimizer, train_loader, device, epoch)
# 保存模型参数
checkpoint = {
'model': model.state_dict(),
'optimizer': optimizer.state_dict()
}
torch.save(checkpoint, './checkpoint_epoch{}.pt'.format(epoch))
在上面的例子中,resume 参数表示之前保存的检查点文件路径。如果 resume 不为 None,则会通过 torch.load() 方法加载之前保存的模型参数和优化器状态,并将它们赋值给当前的模型和优化器。然后我们可以从上一次停止的位置继续训练模型,或者进行评估。在每次 epoch 结束时,我们还可以将当前的模型参数和优化器状态保存到一个新的检查点文件中,以便日后使用。
- torch.utils.data.DataLoader
torch.utils.data.DataLoader 是 PyTorch 中的一个数据加载器类,可以用于将数据集封装成可迭代的批量数据。它具有以下几个常用参数:
dataset:指定要加载的数据集。
batch_size:指定批量大小,即一次迭代所处理的样本数。
shuffle:指定是否在每个 epoch 时对数据进行洗牌(随机打乱顺序)。
num_workers:指定多少个子进程来加载数据。
使用 DataLoader,可以方便地加载各种类型的数据集,包括图像、文本、音频等等。在训练神经网络时,通常需要将数据集拆分成多个批次,并将每个批次作为模型的输入来进行训练。由于数据集可能非常大,因此使用数据加载器可以有效地节省内存和计算资源。