Я ищу функцию (если возможно), которая способна объединить массив 3D-изображений МРТ с соответствующим результатом теста пациента, а затем передать его в сеть CNN
Например, если я должны были иметь следующее:
# each 3D array is an MRI image converted into array format
image_array = [[3D array 1], [3D array 2], [3D array 3]]
test_score = [100, 50, 75] # in seconds
как я могу убедиться, что каждая оценка теста будет «связана» с правильным массивом изображений (3D-массив 1 имеет оценку 100 секунд, 3D массив 2 имеет оценку 50 секунд, трехмерный массив 3 имеет оценку 75 секунд) и иметь возможность передавать это в сеть CNN (другими словами, убедитесь, что массив все еще имеет 3 измерения)?
Выходные данные сети CNN должны быть числовым числом, представляющим прогнозируемую оценку теста МРТ-изображения. Пример: модель предсказывает, что этот массив изображений имеет тестовую оценку 62 секунды.
Вот код для создания моих изображений и этикеток:
# Where the file is located
path = r'C:\Users\jesse\OneDrive\Desktop\Research\PD\decline'
folder = os.listdir(path)
target_size = (96, 96, 96)
# creating x - converting images to array
mri = []
for i in range(len(folder)):
files = os.listdir(path + '\\' + folder[i])
for j in range(len(files)):
image = np.array(nib.load(path + '\\' + folder[i] + '\\' + files[j]).get_fdata())
image = np.resize(image, target_size)
image = np.expand_dims(image, axis=3)
image /= 255.
mri.append(image)
# creating y - one hot encoder
excel_file = r'C:\Users\jesse\OneDrive\Desktop\Research\PD\decline_label.xlsx'
excel_read = pd.read_excel(excel_file)
excel_array = np.array(excel_read['Label'])
label = LabelEncoder().fit_transform(excel_array)
label = label.reshape(len(label), 1)
onehot = OneHotEncoder(sparse=False).fit_transform(label)
# Splitting image train/test
x = np.asarray(mri)
y = np.asarray(onehot)
#x_split, x_test, y_split, y_test = train_test_split(x, y, test_size=.2, stratify=y)
#x_train, x_val, y_train, y_val = train_test_split(x_split, y_split, test_size=.25, stratify=y_split)
#print(x_train.shape, x_val.shape, x_test.shape, y_train.shape, y_val.shape, y_test.shape)
Вот код для создания моих результаты тестов:
mri_path = r'C:\Users\jesse\OneDrive\Desktop\Research\PD\get_skullstrip'
category = os.listdir(mri_path)
subject_id = []
for i in range(len(category)):
ppmi_files = os.listdir(mri_path + '\\' + category[i])
for j in range(len(ppmi_files)):
num = ppmi_files[j][5:9]
subject_id.append(num)
test_path = r'C:\Users\jesse\OneDrive\Desktop\Research\PD\Trail_Making_A_and_B.csv'
scores = []
csv_read = pd.read_csv(test_path)
patno = np.array(csv_read['PATNO'])
tmtasec = np.array(csv_read['TMTASEC'])
for i in range(len(subject_id)):
for j in range(len(patno)):
split = len(subject_id) - len(files)
if subject_id[i] == str(patno[j]):
if math.isnan(tmtasec[j]) != True:
scores.append(tmtasec[j])
break
else:
if i < split:
scores.append(0.)
break
elif i >= split:
scores.append(200.)
break
elif subject_id[i] not in str(patno):
if i < split:
scores.append(0.)
elif i >= split:
scores.append(200.)
break
Примечание: у некоторых испытуемых не было результатов теста, поэтому мне пришлось заменить их на 0 и 200
Примечание 2: все массивы в порядке (это означает, что мрт [0], onehot [0] и оценки [0] получены от одного и того же человека)
Как мне go объединить массив изображений 3D МРТ с соответствующими результатами тестов? Должен ли я train_test_split до или после их объединения? Повлияет ли это на то, как я могу передать это в сеть CNN?
Любая помощь приветствуется и спасибо!