import torch


def ycbcr_to_rgb(image: torch.Tensor) -> torch.Tensor:
    """Convert an YCbCr image to RGB.

    The image data is assumed to be in the range of (0, 1).

    Args:
        image (torch.Tensor): YCbCr Image to be converted to RGB with shape :math:`(*, 3, H, W)`.

    Returns:
        torch.Tensor: RGB version of the image with shape :math:`(*, 3, H, W)`.

    Examples:
        >>> input = torch.rand(2, 3, 4, 5)
        >>> output = ycbcr_to_rgb(input)  # 2x3x4x5
    """
    if not isinstance(image, torch.Tensor):
        raise TypeError('Input type is not a torch.Tensor. Got {}'.format(type(image)))

    if len(image.shape) < 3 or image.shape[(-3)] != 3:
        raise ValueError('Input size must have a shape of (*, 3, H, W). Got {}'.format(image.shape))

    y = image[..., 0, :, :]
    cb = image[..., 1, :, :]
    cr = image[..., 2, :, :]
    delta = 0.5
    cb_shifted = cb - delta
    cr_shifted = cr - delta
    r = y + 1.403 * cr_shifted
    g = y - 0.714 * cr_shifted - 0.344 * cb_shifted
    b = y + 1.773 * cb_shifted

    return torch.stack([r, g, b], -3)