PyTorch 中的转换有什么用?
What are transforms in PyTorch used for?
我是 Pytorch 的新手,对 CNN 不是很了解。
我用他们提供的教程做了一个成功的分类器Tutorial Pytorch,但我不太明白加载数据时我在做什么。
他们为训练做了一些数据扩充和归一化,但是当我尝试修改参数时,代码不起作用。
# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'val': transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
我要扩展我的训练数据集吗?我没有看到数据扩充。
为什么我修改了transforms.RandomResizedCrop(224)的值,数据加载就停止了?
我是否也需要转换测试数据集?
我对他们所做的这种数据转换有点困惑。
transforms.Compose
只是将提供给它的所有转换组合起来。因此,transforms.Compose
中的所有变换都一一应用于输入。
训练变换
transforms.RandomResizedCrop(224)
:这将从您的输入图像中随机提取大小为 (224, 224)
的补丁。因此,它可能会从左上角、右下角或两者之间的任何位置选择这条路径。因此,您将在这部分进行数据扩充。此外,更改此值不会很好地处理模型中的全连接层,因此不建议更改此值。
transforms.RandomHorizontalFlip()
:一旦我们有了尺寸为(224, 224)
的图像,我们就可以选择翻转它。这是数据扩充的另一部分。
transforms.ToTensor()
:这只是将您的输入图像转换为 PyTorch 张量。
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
:这只是输入数据缩放,这些值(平均值和标准差)必须已为您的数据集预先计算。也不建议更改这些值。
验证转换
transforms.Resize(256)
:首先您的输入图像被调整为 (256, 256)
transforms.CentreCrop(224)
:裁剪形状为(224, 224)
的图像的中心部分
其余同火车
P.S.: 您可以在 official docs
中阅读有关这些转换的更多信息
关于数据增强的歧义,我建议你参考这个答案:
但简而言之,假设你只有随机水平翻转变换,当你遍历图像数据集时,一些返回原始图像,一些返回翻转后的图像(翻转后的原始图像不返回) .换句话说,一次迭代返回的图像数量与数据集的原始大小相同,没有增加。
我是 Pytorch 的新手,对 CNN 不是很了解。 我用他们提供的教程做了一个成功的分类器Tutorial Pytorch,但我不太明白加载数据时我在做什么。
他们为训练做了一些数据扩充和归一化,但是当我尝试修改参数时,代码不起作用。
# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'val': transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
我要扩展我的训练数据集吗?我没有看到数据扩充。
为什么我修改了transforms.RandomResizedCrop(224)的值,数据加载就停止了?
我是否也需要转换测试数据集?
我对他们所做的这种数据转换有点困惑。
transforms.Compose
只是将提供给它的所有转换组合起来。因此,transforms.Compose
中的所有变换都一一应用于输入。
训练变换
transforms.RandomResizedCrop(224)
:这将从您的输入图像中随机提取大小为(224, 224)
的补丁。因此,它可能会从左上角、右下角或两者之间的任何位置选择这条路径。因此,您将在这部分进行数据扩充。此外,更改此值不会很好地处理模型中的全连接层,因此不建议更改此值。transforms.RandomHorizontalFlip()
:一旦我们有了尺寸为(224, 224)
的图像,我们就可以选择翻转它。这是数据扩充的另一部分。transforms.ToTensor()
:这只是将您的输入图像转换为 PyTorch 张量。transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
:这只是输入数据缩放,这些值(平均值和标准差)必须已为您的数据集预先计算。也不建议更改这些值。
验证转换
transforms.Resize(256)
:首先您的输入图像被调整为(256, 256)
transforms.CentreCrop(224)
:裁剪形状为(224, 224)
的图像的中心部分
其余同火车
P.S.: 您可以在 official docs
中阅读有关这些转换的更多信息关于数据增强的歧义,我建议你参考这个答案:
但简而言之,假设你只有随机水平翻转变换,当你遍历图像数据集时,一些返回原始图像,一些返回翻转后的图像(翻转后的原始图像不返回) .换句话说,一次迭代返回的图像数量与数据集的原始大小相同,没有增加。