class_docstr: The Learned Perceptual Image Patch Similarity (`LPIPS_`) calculates perceptual similarity between two images.
  
  LPIPS essentially computes the similarity between the activations of two image patches for some pre-defined network.
  This measure has been shown to match human perception well. A low LPIPS score means that image patches are
  perceptual similar.
  
  Both input image patches are expected to have shape ``(N, 3, H, W)``. The minimum size of `H, W` depends on the
  chosen backbone (see `net_type` arg).
  
  .. note:: using this metrics requires you to have ``torchvision`` package installed. Either install as
      ``pip install torchmetrics[image]`` or ``pip install torchvision``.
  
  .. note:: this metric is not scriptable when using ``torch<1.8``. Please update your pytorch installation
      if this is a issue.
  
  As input to ``forward`` and ``update`` the metric accepts the following input
  
  - ``img1`` (:class:`~torch.Tensor`): tensor with images of shape ``(N, 3, H, W)``
  - ``img2`` (:class:`~torch.Tensor`): tensor with images of shape ``(N, 3, H, W)``
  
  As output of `forward` and `compute` the metric returns the following output
  
  - ``lpips`` (:class:`~torch.Tensor`): returns float scalar tensor with average LPIPS value over samples
  
  Args:
      net_type: str indicating backbone network type to use. Choose between `'alex'`, `'vgg'` or `'squeeze'`
      reduction: str indicating how to reduce over the batch dimension. Choose between `'sum'` or `'mean'`.
      normalize: by default this is ``False`` meaning that the input is expected to be in the [-1,1] range. If set
          to ``True`` will instead expect input to be in the ``[0,1]`` range.
      kwargs: Additional keyword arguments, see :ref:`Metric kwargs` for more info.
  
  Raises:
      ModuleNotFoundError:
          If ``torchvision`` package is not installed
      ValueError:
          If ``net_type`` is not one of ``"vgg"``, ``"alex"`` or ``"squeeze"``
      ValueError:
          If ``reduction`` is not one of ``"mean"`` or ``"sum"``
  
  Example:
      >>> import torch
      >>> _ = torch.manual_seed(123)
      >>> from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity
      >>> lpips = LearnedPerceptualImagePatchSimilarity(net_type='squeeze')
      >>> # LPIPS needs the images to be in the [-1, 1] range.
      >>> img1 = (torch.rand(10, 3, 100, 100) * 2) - 1
      >>> img2 = (torch.rand(10, 3, 100, 100) * 2) - 1
      >>> lpips(img1, img2)
      tensor(0.1046, grad_fn=<SqueezeBackward0>)
class_docstr_tok: ["The","Learned","Perceptual","Image","Patch","Similarity","(","`","LPIPS_","`",")","calculates","perceptual","similarity","between","two","images",".","LPIPS","essentially","computes","the","similarity","between","the","activations","of","two","image","patches","for","some","pre-defined","network",".","This","measure","has","been","shown","to","match","human","perception","well",".","A","low","LPIPS","score","means","that","image","patches","are","perceptual","similar",".","Both","input","image","patches","are","expected","to","have","shape","``","(","N",",","3",",","H",",","W",")","``",".","The","minimum","size","of","`","H",",","W","`","depends","on","the","chosen","backbone","(","see","`","net_type","`","arg",")",".","..","note",":",":","using","this","metrics","requires","you","to","have","``","torchvision","``","package","installed",".","Either","install","as","``","pip","install","torchmetrics","[","image","]","``","or","``","pip","install","torchvision","``",".","..","note",":",":","this","metric","is","not","scriptable","when","using","``","torch","<","1.8","``",".","Please","update","your","pytorch","installation","if","this","is","a","issue",".","As","input","to","``","forward","``","and","``","update","``","the","metric","accepts","the","following","input","-","``","img1","``","(",":","class",":","`","~torch.Tensor","`",")",":","tensor","with","images","of","shape","``","(","N",",","3",",","H",",","W",")","``","-","``","img2","``","(",":","class",":","`","~torch.Tensor","`",")",":","tensor","with","images","of","shape","``","(","N",",","3",",","H",",","W",")","``","As","output","of","`","forward","`","and","`","compute","`","the","metric","returns","the","following","output","-","``","lpips","``","(",":","class",":","`","~torch.Tensor","`",")",":","returns","float","scalar","tensor","with","average","LPIPS","value","over","samples","Args",":","net_type",":","str","indicating","backbone","network","type","to","use",".","Choose","between","`","'alex","'","`",",","`","'vgg","'","`","or","`","'squeeze","'","`","reduction",":","str","indicating","how","to","reduce","over","the","batch","dimension",".","Choose","between","`","'sum","'","`","or","`","'mean","'","`",".","normalize",":","by","default","this","is","``","False","``","meaning","that","the","input","is","expected","to","be","in","the","[","-1,1","]","range",".","If","set","to","``","True","``","will","instead","expect","input","to","be","in","the","``","[","0,1","]","``","range",".","kwargs",":","Additional","keyword","arguments",",","see",":","ref",":","`","Metric","kwargs","`","for","more","info",".","Raises",":","ModuleNotFoundError",":","If","``","torchvision","``","package","is","not","installed","ValueError",":","If","``","net_type","``","is","not","one","of","``","``","vgg","''","``",",","``","``","alex","''","``","or","``","``","squeeze","''","``","ValueError",":","If","``","reduction","``","is","not","one","of","``","``","mean","''","``","or","``","``","sum","''","``","Example",":",">",">",">","import","torch",">",">",">","_","=","torch.manual_seed","(","123",")",">",">",">","from","torchmetrics.image.lpip","import","LearnedPerceptualImagePatchSimilarity",">",">",">","lpips","=","LearnedPerceptualImagePatchSimilarity","(","net_type='squeeze","'",")",">",">",">","#","LPIPS","needs","the","images","to","be","in","the","[","-1",",","1","]","range",".",">",">",">","img1","=","(","torch.rand","(","10",",","3",",","100",",","100",")","*","2",")","-","1",">",">",">","img2","=","(","torch.rand","(","10",",","3",",","100",",","100",")","*","2",")","-","1",">",">",">","lpips","(","img1",",","img2",")","tensor","(","0.1046",",","grad_fn=","<","SqueezeBackward0",">",")"]
code: def __init__(
      self,
      net_type: Literal["vgg", "alex", "squeeze"] = "alex",
      reduction: Literal["sum", "mean"] = "mean",
      normalize: bool = False,
      **kwargs: Any,
  ) -> None:
      super().__init__(**kwargs)
  
      if not _TORCHVISION_AVAILABLE:
          raise ModuleNotFoundError(
              "LPIPS metric requires that torchvision is installed."
              " Either install as `pip install torchmetrics[image]` or `pip install torchvision`."
          )
  
      valid_net_type = ("vgg", "alex", "squeeze")
      if net_type not in valid_net_type:
          raise ValueError(
              f"Argument `net_type` must be one of {valid_net_type}, but got {net_type}."
          )
      self.net = _NoTrainLpips(net=net_type)
  
      valid_reduction = ("mean", "sum")
      if reduction not in valid_reduction:
          raise ValueError(
              f"Argument `reduction` must be one of {valid_reduction}, but got {reduction}"
          )
      self.reduction = reduction
  
      if not isinstance(normalize, bool):
          raise ValueError(
              f"Argument `normalize` should be an bool but got {normalize}"
          )
      self.normalize = normalize
  
      self.add_state(
          "sum_scores", torch.tensor(0.0), dist_reduce_fx="sum"
      )
      self.add_state("total", torch.tensor(0.0), dist_reduce_fx="sum")
  
file_path: torchmetrics/src/torchmetrics/image/lpip.py
imports: from typing import Any, ClassVar, List, Optional, Sequence, Union
  import torch
  from torch import Tensor
  from typing_extensions import Literal
  from torchmetrics.functional.image.lpips import _LPIPS, _lpips_compute, _lpips_update, _NoTrainLpips
  from torchmetrics.metric import Metric
  from torchmetrics.utilities.checks import _SKIP_SLOW_DOCTEST, _try_proceed_with_timeout
  from torchmetrics.utilities.imports import _MATPLOTLIB_AVAILABLE, _TORCHVISION_AVAILABLE
  from torchmetrics.utilities.plot import _AX_TYPE, _PLOT_OUT_TYPE
label_desc: Use image node_id 1 to create a new LearnedPerceptualImagePatchSimilarity object from inherited base classes: Metric with example: obj = LearnedPerceptualImagePatchSimilarity(net_type, reduction, normalize)