You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决ValueError:加载含Pickle数据的NumPy文件时allow_pickle=False报错

解决np.load的ValueError: Cannot load file containing pickled data问题

直接修复加载代码

修改odir.py中所有np.load()调用,添加allow_pickle=True参数。你的.npy文件是通过pickle序列化保存的,而NumPy新版本默认禁用pickle加载,必须显式开启才能匹配。

修改后的完整odir.py代码:

import numpy as np


def load_data(image_size, index = 0, challenge = 0):
    """Loads the ODIR dataset.

    Returns:
      Tuple of Numpy arrays: `(x_train, y_train), (x_test, y_test)`.

    """

    if index == 0:
        x_train = np.load('odir_training' + '_' + str(image_size) + '.npy', allow_pickle=True)
        y_train = np.load('odir_training_labels' + '_' + str(image_size) + '.npy', allow_pickle=True)
    else:
        x_train = np.load('odir_training' + '_' + str(image_size) + '_' + str(index) + '.npy', allow_pickle=True)
        y_train = np.load('odir_training_labels' + '_' + str(image_size) + '_' + str(index) + '.npy', allow_pickle=True)

    if challenge == 0:
        x_test = np.load('odir_testing'+'_' + str(image_size)+'.npy', allow_pickle=True)
        y_test = np.load('odir_testing_labels'+'_' + str(image_size)+'.npy', allow_pickle=True)
    else:
        x_test = np.load('odir_testing_challenge'+'_' + str(image_size)+'.npy', allow_pickle=True)
        y_test = np.load('odir_testing_labels_challenge'+'_' + str(image_size)+'.npy', allow_pickle=True)

    return (x_train, y_train), (x_test, y_test)

原理说明

  • 从NumPy 1.16版本开始,np.load()的allow_pickle参数默认值改为False,这是出于安全考量,防止加载恶意pickle数据。
  • 你的数据集文件保存时使用了pickle序列化(可能是旧版本NumPy默认允许,或者保存时显式设置了allow_pickle=True),因此加载时必须显式开启该参数才能正常读取。

优化方案(若能控制数据保存流程)

如果你有权限修改数据保存的代码,建议:

  1. 保存时明确指定allow_pickle=True(确认数据源安全的前提下):
# 示例保存代码
np.save('odir_training_128.npy', x_train_data, allow_pickle=True)
  1. 若无需复杂数据类型,尽量改用纯NumPy数组格式保存,避免依赖pickle,后续加载时无需开启该参数,安全性更高。

内容的提问来源于stack exchange,提问作者Sarthak Rane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:32:14