Есть ли способ в tenorflow загружать пакеты данных каждый раз? - PullRequest
0 голосов
/ 10 февраля 2020

Итак, я запускаю tenorflow 2+ python в Google Colab.

Каждый из моих файлов данных представляет собой трехмерное изображение с формой [563, 563, 563, 1], поэтому загружаю их все выдает ошибку исчерпания ресурса.

Я потратил дни и часы на поиски способа загрузки только пакета моего набора данных в качестве тензора и выгрузки / загрузки нового пакета на каждой итерации. Я предполагаю, что может быть способ использовать tf.data.Dataset.list_files, но я не могу найти точный путь.

Есть ли какие-либо хорошие предложения о том, как это сделать, или какие-либо документы, которые я мог бы читать читать? Я прочитал документ tf.data из tenorflow, но не смог найти нужную мне информацию.

Спасибо!

Редактировать

, так что это функция I хочу использовать для загрузки моего изображения

def load_image(ind):
    file_brain = "/content/drive/My Drive/brain/" + str(ind) + ".mgz"
    file_mask = "/content/drive/My Drive/mask/" + str(ind) + ".mgz"
    data_brain, affine = load_nifti(file_brain)
    data_mask, affine = load_nifti(file_mask)
    data_brain = affine_transform(data_brain, affine)
    data_mask = affine_transform(data_mask, affine)
    data_brain = normalize(data_brain)
    data_brain = zoom(data_brain, (563/256, 563/256, 563/256))
    data_brain = tf.expand_dims(data_brain, axis=-1)
    data_mask = tf.expand_dims(data_mask, axis=-1)
    return data_brain, data_mask

, и таким образом я загружал набор данных раньше, что исчерпало ресурс;

def create_dataset():
    train_data = []
    train_label = []
    test_data = []
    test_label = []
    test_n = np.random.randint(1, 10, 1)
    for i in range(1, 10):
        data_brain, data_mask = load_image(i)
        if i in test_n:
            test_data.append(data_brain)
            test_label.append(data_mask)
            continue
        train_data.append(data_brain)
        train_label.append(data_mask)
        shifted_data = data_brain + tf.random.uniform(shape=(), minval=-0.05, maxval=0.05)
        scaled_data = data_brain * tf.random.uniform(shape=(), minval=0.85, maxval=1.3)
        train_data.append(shifted_data)
        train_label.append(data_mask)
        train_data.append(scaled_data)
        train_label.append(data_mask)
"""
train_data = tf.data.Dataset.from_tensor_slices(train_data)
train_label = tf.data.Dataset.from_tensor_slices(train_label)
test_data = tf.data.Dataset.from_tensor_slices(test_data)
test_label = tf.data.Dataset.from_tensor_slices(test_label)
return train_data, train_label, test_data, test_label
"""
...