当数据太大而无法放入内存时,使用nibabel和TensorFlow加载nii数据

时间:2019-06-21 14:31:59

标签: python tensorflow conv-neural-network medical nibabel

我正在尝试准备数据以使用TensorFlow馈入CNN模型,并且在加载数据时遇到了问题。我正在使用ADNI数据集,该数据集包含通过nibabel模块加载的3D张量的1265个观测值。由于数据的大小,它太大而无法容纳到内存中。我一直在尝试使用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循环中加载数据,但是由于内存限制,这是不可行的。

任何帮助将不胜感激,谢谢!

0 个答案:

没有答案