Загрузка данных nii с использованием nibabel и TensorFlow, когда данные слишком велики, чтобы поместиться в память - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь подготовить свои данные для подачи в модель CNN с помощью TensorFlow, и у меня возникли проблемы с загрузкой данных. Я использую набор данных ADNI, который состоит из 1265 наблюдений с 3D-тензорами, загруженными через модуль nibabel. Из-за размера данных он слишком велик, чтобы поместиться в память. Я пытался использовать tf.data.Dataset, и у меня были проблемы с реализацией

import pandas as pd
import nibabel as nib
import tensorflow as tf
tf.enable_eager_execution()

full_data = pd.read_csv("dataset_path.csv")
full_data_y = full_data['y']

files = tf.data.Dataset.list_files(full_data.Path)    
path_ds = full_data.Path.apply(lambda x: nib.load(x)) #Converts files into nibabel images
path_df = tf.data.Dataset.from_tensor_slices((path_ds, full_data_y))

который выдает ошибку

ValueError: TypeError: object of type 'Nifti1Image' has no len()

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

path_df = tf.data.Dataset.from_tensor_slices((full_data.Path, full_data_y))

def preprocess(image, label):
    return nib.load(image.numpy().decode("utf-8")), label

path_df.map(preprocess, num_parallel_calls = AUTOTUNE)

который выдает ошибку

AttributeError: 'Tensor' object has no attribute 'numpy'

Я думаю, что это связано со статической природой TensorFlow, в которой я новичок.

Я видел в большей части кода просто загрузку данных через tf.stack в цикле for, но это невозможно из-за ограничений памяти.

Любая помощь будет высоко ценится, спасибо!

...