Как загрузить только серию изображений одновременно в тензорном потоке? - PullRequest
0 голосов
/ 30 октября 2018

Я читаю изображения 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

1 Ответ

0 голосов
/ 30 октября 2018

Я рекомендую прочитать учебник по импорту данных . Есть очень полезный и очень похожий пример. В этом примере мы не встраиваем данные изображения в граф вычислений с помощью from_tensor_slice. Вместо этого мы встраиваем имена файлов в график.

Более того, если ваши данные были слишком большими для загрузки, вам пришлось предварительно разделить их на несколько файлов

...