cifar10 tutorial将二进制文件作为输入处理。这些CIFAR10数据文件上的每个记录/示例都包含混合标签(第一个元素)和图像数据信息。 this page中的第一个答案显示了如何使用 ndarray.tofile()从numpy数组(在每行中累积标签和图像数据信息)中编写二进制文件:
import numpy as np
images_and_labels_array = np.array([[...], ...], dtype=np.uint8)
images_and_labels_array.tofile("/tmp/images.bin")
当最大类数为256时,这对我来说是完美的,因为uint8数据类型已足够。但是,当最大类数超过256时,我必须更改images_and_labels_array中的dtype = np.uint16。结果是尺寸加倍。我想知道是否有一种有效的方法可以克服它。如果是,请提供一个例子。
答案 0 :(得分:1)
当我写二进制文件时,我通常只使用python模块 struct ,它的工作方式如下:
>>> [entry.path for entry in os.scandir(dir_path) if entry.name.endswith(suffix)]
['/home/msvalkon/foo.txt',
'/home/msvalkon/output.txt',
'/home/msvalkon/remaining_warnings.txt',
'/home/msvalkon/test.txt',
'/home/msvalkon/hdr_chksum_failure.txt']
这应该会产生300 * 300 * 2 + 2 * 1 * 2 = 180004字节的大二进制文件。 它可能不是完成工作的最快方式,但对我来说,它到目前为止工作得足够快。对于其他数据类型,请参阅documentation