无法将.npz文件.npz解释为pickle?np.load(允许pickle=true)不工作?

2024-10-02 08:26:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试加载一些数据集时遇到了这个奇怪的错误。。。我不确定是什么导致了这个错误,因为我拥有的文件是.npz文件,它们“应该”通过np.load(file,allow_pickle=true)加载得很好。有关于如何修复的线索吗

下面是我要说的(这是cs231n项目的btw):

def load_imagenet_val(num=None):
    """Load a handful of validation images from ImageNet.

    Inputs:
    - num: Number of images to load (max of 25)

    Returns:
    - X: numpy array with shape [num, 224, 224, 3]
    - y: numpy array of integer image labels, shape [num]
    - class_names: dict mapping integer label to class name
    """
    imagenet_fn = 'cs682/datasets/imagenet_val_25.npz'
    if not os.path.isfile(imagenet_fn):
      print('file %s not found' % imagenet_fn)
      print('Run the following:')
      print('cd cs682/datasets')
      print('bash get_imagenet_val.sh')
      assert False, 'Need to download imagenet_val_25.npz'
    f = np.load(imagenet_fn, allow_pickle = True)
    X = f['X']
    y = f['y']
    class_names = f['label_map'].item()
    if num is not None:
        X = X[:num]
        y = y[:num]
    return X, y, class_names

运行上述函数时,我得到以下跟踪:

---------------------------------------------------------------------------
UnpicklingError                           Traceback (most recent call last)
~/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
    459             try:
--> 460                 return pickle.load(fid, **pickle_kwargs)
    461             except Exception:

UnpicklingError: invalid load key, '<'.

During handling of the above exception, another exception occurred:

OSError                                   Traceback (most recent call last)
<ipython-input-6-4043844dfc8d> in <module>
      1 from cs682.data_utils import load_imagenet_val
----> 2 X, y, class_names = load_imagenet_val(num=5)
      3 
      4 plt.figure(figsize=(12, 6))
      5 for i in range(5):

~/CS682/assignment3/cs682/data_utils.py in load_imagenet_val(num)
    253       print('bash get_imagenet_val.sh')
    254       assert False, 'Need to download imagenet_val_25.npz'
--> 255     f = np.load(imagenet_fn, allow_pickle = True)
    256     X = f['X']
    257     y = f['y']

~/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
    461             except Exception:
    462                 raise IOError(
--> 463                     "Failed to interpret file %s as a pickle" % repr(file))
    464     finally:
    465         if own_fid:

OSError: Failed to interpret file 'cs682/datasets/imagenet_val_25.npz' as a pickle

Tags: oftoinloadvalnumpickleclass

热门问题