Numpy 在PyTorch变换中使用略读特征提取器

Numpy 在PyTorch变换中使用略读特征提取器,numpy,pytorch,scikit-image,torchvision,Numpy,Pytorch,Scikit Image,Torchvision,我想申请我的数据,并想知道是否有任何可能性在我的火炬的转换,这是现在的以下内容: data_transforms = { 'train': transforms.Compose([ transforms.CenterCrop(178), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5],

我想申请我的数据,并想知道是否有任何可能性在我的火炬的转换,这是现在的以下内容:

data_transforms = {
    'train': transforms.Compose([
        transforms.CenterCrop(178),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
    'val': transforms.Compose([
        transforms.CenterCrop(178),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
}
如果没有,我将如何实施?导入数据时我必须这样做吗?

您可以使用。
它允许您将自定义lambda函数作为变换应用


类似于
transforms.Lambda(Lambda x:local\u binary\u pattern(x))
您可以使用lamdba函数实现转换。正如@dhananjay正确指出的那样。 根据该意见,执行情况如下:

def lbp(x):
    radius = 2
    n_points = 8 * radius
    METHOD = 'uniform'

    lbp = local_binary_pattern(x, n_points, radius, METHOD)
    return lbp

data_transforms = {
    'train': transforms.Compose([
        transforms.CenterCrop(178),
        transforms.RandomHorizontalFlip(),
        transforms.Lambda(lbp),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
    'val': transforms.Compose([
        transforms.CenterCrop(178),
        transforms.Lambda(lbp),
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ]),
}
但是。这是一个坏主意,因为它违背了pytorch变换的目的。 变换非常适合于以下操作: 1.可以从原始数据进行简单的计算(计算成本较低)。因此,这没有好处 将其应用于数据并存储副本。规格化就是这样一种变换。 2.在原始数据中引入随机性或随机扰动元素。例如随机水平翻转等

要记住的关键一点是,您的转换将在每次批处理时应用于数据集 学习

考虑到上述情况,您绝对不希望将lbp实现为转换。更好 离线计算并存储。否则,您将显著降低批量加载的速度