human
Complete the below
def CaffeLMDB(lmdb_path, shuffle=True, keys=None):

    ''''Read a Caffe LMDB file where each value contains a ``caffe.Datum`` protobuf.
    Produces datapoints of the format: [HWC image, label].
    Note that Caffe LMDB format is not efficient: it stores serialized raw
    arrays rather than JPEG images.
    Args:
    lmdb_path, shuffle, keys: same as :class:`LMDBData`.
    Returns:
    a :class:`LMDBDataDecoder` instance.
    Example:
    .. code-block:: python
    ds = CaffeLMDB("/tmp/validation", keys=\'{:0>8d}\')'
    '''

=====
Write me a the Python program you requested?
assistant
#Here is the Python program you requested.
    cpb = get_caffe_pb()
    lmdb_data = LMDBData(lmdb_path, shuffle, keys)
    def decoder(k, v):
        try:
            datum = cpb.Datum()
            datum.ParseFromString(v)
            img = np.fromstring(datum.data, dtype=np.uint8)
            img = img.reshape(datum.channels, datum.height, datum.width)
        except Exception:
            log_once('Cannot    read    key    {}'.format(k), 'warn')
            return None
        return [img.transpose(1, 2, 0), datum.label]
    logger.warn("Caffe    LMDB    format    doesn't    store    jpeg-compressed    images,                                    it's    not    recommended    due    to    its    inferior    performance.")
    return LMDBDataDecoder(lmdb_data, decoder)