class_docstr: Computes similarities as k(x,y) = (1-eps)*k_a(proj(x), proj(y)) + eps*k_b(x,y).
  A forward pass takes a batch of instances x [Nx, features] and y [Ny, features] and returns
  the kernel matrix [Nx, Ny].
  
  Parameters
  ----------
  proj
      The projection to be applied to the inputs before applying kernel_a
  kernel_a
      The kernel to apply to the projected inputs. Defaults to a Gaussian RBF with trainable bandwidth.
  kernel_b
      The kernel to apply to the raw inputs. Defaults to a Gaussian RBF with trainable bandwidth.
      Set to None in order to use only the deep component (i.e. eps=0).
  eps
      The proportion (in [0,1]) of weight to assign to the kernel applied to raw inputs. This can be
      either specified or set to 'trainable'. Only relavent if kernel_b is not None.
code: def _init_eps(self, eps: Union[float, str]) -> None:
      if isinstance(eps, float):
          if not 0 < eps < 1:
              raise ValueError("eps should be in (0,1)")
          self.logit_eps = nn.Parameter(
              torch.tensor(eps).logit(), requires_grad=False
          )
      elif eps == "trainable":
          self.logit_eps = nn.Parameter(torch.tensor(0.0))
      else:
          raise NotImplementedError(
              "eps should be 'trainable' or a float in (0,1)"
          )
  
imports: import numpy
  import torch
  from torch import nn
  from .None import distance
  from typing import Optional, Union, Callable
  from alibi_detect.utils.frameworks import Framework
label_desc: Use image node_id 2 for calling the DeepKernel obj's underlying member method code with example usage: obj._init_eps(eps) without return types