Я читаю изображения cifar100 из здесь и хочу прочитать изображения в пакетном режиме из файла рассола. С этим кодом, который я использую в этой строке (Loaded% d examples. "% Num) загружает все изображения, присутствующие в наборе обучающих данных. Затем, используя tf.data, я могу читать пакеты. Но когда он загружает все изображения, моя память используется и он даже не начинает обучение. Я использую что-то похожее на this . Эта ссылка использует tfrecords, и я хочу читать данные cifar, используя pickle. Так кто-нибудь знает, как я могу читать только партии данных из cifar100 файл рассола, чтобы память не заполнилась?
def read_data():
def in_data():
all_images = []
all_labels = []
with open("%s%s" % ("./data/cifar-100-python/", "train"),"rb") as fo:
dict = pickle.load(fo, encoding='latin1')
images = np.array(dict['data'])
labels = np.array(dict['fine_labels'])
num = images.shape[0]
# images = normalize(images)
images = images.astype(dtype=np.float32)
labels = labels.astype(dtype=np.int32)
images = np.reshape(images, [num, 3, 32, 32])
images = np.transpose(images, [0, 2, 3, 1])
print("Loaded %d examples." % num)
#print('BeforeLables: ', labels)
labels = one_hot_encode(labels)
#print('afterLables: ', labels)
all_images.append(images)
all_labels.append(labels)
# print('SIZE:', len(all_images))
all_images = np.concatenate(all_images)
all_labels = np.concatenate(all_labels)
self.size = len(all_images)
img_dataset = tf.data.Dataset.from_tensor_slices(all_images).batch(2)
label_dataset = tf.data.Dataset.from_tensor_slices(all_labels).batch(2)
dataset = tf.data.Dataset.zip((img_dataset, label_dataset)).repeat(None)
images, labels = dataset.make_one_shot_iterator().get_next()
print('image Shape:',images.shape)
return images, labels
return in_data