首页 > 解决方案 > 数据集数组的可笑内存大小

问题描述

try: 
    with open(f'F:/Storage/readyDataset{IMG_SIZE}.pkl', 'rb') as save:
        training_data = pickle.load(save)
    print("Using dataset")
except:
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)
        class_num = CATEGORIES.index(category)
        print("Gathering Dataset: {}%".format(class_num*50))
        for img in os.listdir(path):
            img_array = cv2.imread(os.path.join(path,img))
            new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
            training_data.append([new_array, class_num])
    print("Gathering Dataset: 100%\nSaving dataset")
    with open(f'F:/Storage/readyDataset{IMG_SIZE}.pkl', 'wb') as save:
        pickle.dump(training_data, save, protocol=4)

print("Compiling Data")
random.shuffle(training_data)
for features, label in training_data:
    X.append(features)
    Y.append(label)
X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3) / 255
Y = np.array(Y)
print("Finished Compiling Data")

MemoryError:无法为形状为 (6800, 512, 512, 3) 且数据类型为 float64 的数组分配 39.8 GiB

我目前正在尝试在 TensorFlow v2 中使用 6800 张图像的自定义数据集。数据集小于 3 GB,但在编译数据后显示为 40 GB。这怎么可能?我觉得我做错了。

标签: python-3.xnumpydatasettensorflow2.0

解决方案


您可以使用tf.data.Dataset创建数据集来优化内存消耗。
对于具有不同类型数据的 TensorFlow 输入管道,您可以遵循官方文档。


推荐阅读