















Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
An overview of several deep learning models, including vgg16, resnet, densenet, and inception. It details the architecture and key features of each model, such as the number of layers, connectivity patterns, and specific techniques used to improve performance. The document also includes a code snippet that defines a function for generating augmented versions of medical image data, which is used for training deep learning models. The code performs image processing steps such as resizing, padding, and creating multi-channel projections. Additionally, the document outlines the structure and training process of a convolutional neural network (cnn) model for volume regression, including the use of residual blocks, regularization techniques, and early stopping.
Typology: Cheat Sheet
1 / 23
This page cannot be seen from the preview
Don't miss anything!
















what does this code do? def create_threechannel(mask): print(i) lung = nib.load(mask).get_fdata().astype('uint8') idno = mask.split('/')[-1].split('lungseg') [0] scan = nib.load(glob.glob(lidc_scans_path +idno+'/.nii.gz') [0]).get_fdata().astype('float') print(idno) reso = [float(resolutions[mask][0]), float(resolutions[mask][2])] lung[lung>0] = 1 shp = np.round(max_mm/np.array([reso[0],reso[0],reso[1]]))-np.shape(lung) try: for j in range(5): print(j) options = np.random.uniform(0,1,6) lung2 = lung.copy() scan2 = scan.copy() if options[0]>0.5: lung2 = lung2[::-1,:,:] scan2 = scan2[::-1,:,:] xtranslate, ytranslate, ztranslate = options[1:4] arrz = np.shape(lung)[2] top_slice = np.argmax(np.max(lung,axis=(0,1))>0) bottom_slice = np.argmax(np.max(lung[:,:,::-1],axis=(0,1))>0) arrz = np.shape(lung)[2]- bottom_slice-top_slice lung2[:,:,:top_slice + int(np.round((0.20+0.20options[4])arrz))] = 0 lung2[:,:,-bottom_slice - int(np.round((0.15options[5])arrz)):] = 0 scan2[:,:,:top_slice + int(np.round((0.20+0.20options[4])arrz))] = -1024 scan2[:,:,-bottom_slice - int(np.round((0.15options[5])arrz)):] = -1024 lung2 = np.pad(lung2, ((int(np.floor(shp[0]xtranslate)),int(np.ceil(shp[0](1-xtranslate)))), (int(np.floor(shp[1]ytranslate)),int(np.ceil(shp[1](1-ytranslate)))), (int(np.floor(shp[2]ztranslate)),int(np.ceil(shp[2](1-ztranslate)))))) scan2 = np.pad(scan2,((int(np.floor(shp[0]xtranslate)),int(np.ceil(shp[0](1-xtranslate)))), (int(np.floor(shp[1]ytranslate)),int(np.ceil(shp[1](1-ytranslate)))), (int(np.floor(shp[2]ztranslate)),int(np.ceil(shp[2]*(1-ztranslate))))), mode='constant',constant_values=-1024.0) lung2 = scipy.ndimage.zoom(lung2, (224/np.shape(lung2)[0],224/np.shape(lung2)[1],224/np.shape(lung2)[2]),order=0) scan2 = scipy.ndimage.zoom(scan2,(224/np.shape(scan2)[0],224/np.shape(scan2) [1],224/np.shape(scan2)[2]),order=1) for k,view in enumerate(['sagittal','coronal','axial']): silhouette = np.sum(lung2,axis=k)/224. mip = np.max(scan2,axis=k) mip = (np.clip(mip,-1024,1024)+1024)/2048. lungavg = scan2.copy() lungavg[lung2==0]=np.nan lungavg = np.nanmean(lungavg,axis=k) lungavg = np.nan_to_num(lungavg,nan=-1024) lungavg = (np.clip(lungavg,-1024,0)+1024)/1024 img = np.stack((silhouette,mip,lungavg),axis=-1).astype('float32') tifffile.imwrite(save_projection_path + idno + '' + str(j) + '_' + view + '.tif',img,photometric='rgb') except Exception as e: print('%s Excepted: %s' % (str(idno),str(e))) pass This code defines a function called create_threechannel that takes in a file path to a mask and does the following:
tf.keras.layers.MaxPool2D(3,padding='same',name='mp2')(x1) x1 = resblock(x1,3,64,kr,'block3') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp3')(x1) x1 = resblock(x1,3,128,kr,'block4') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp4')(x1) x1 = resblock(x1,3,256,kr,'block5') x1 = tf.keras.layers.GlobalAveragePooling2D(name='gap')(x1) return x1 def get_model(l2,l1): l2_weight = l2 l1_weight = l1 kr = tf.keras.regularizers.l1_l2(l1=l1_weight, l2=l2_weight) # inputs_sag = tf.keras.Input(shape=(224,224,1)) # inputs_cor = tf.keras.Input(shape=(224,224,1)) # inputs_ax = tf.keras.Input(shape=(224,224,1)) inputs = tf.keras.Input(shape=(224,224,3),name='input') inputs = tf.cast(inputs,dtype='float32') x = conv_net(inputs,kr) x = tf.keras.layers.Dense(256,activation='relu',kernel_regularizer = kr,name='dense1') (x) x = tf.keras.layers.Dense(128,activation='relu',kernel_regularizer = kr,name='dense2')(x) x = tf.keras.layers.Dense(1,activation='linear',kernel_regularizer = kr,name='dense3') (x) # summarize the model model = keras.Model(inputs=inputs,outputs=x) model.summary() return model def trainup(train_x,train_y,dev_x,dev_y,epoch_num,lr,l2,l1,beta,version_name): tf.random.set_seed(42) l2_weight = l2 l1_weight = l1 model = get_model(l2_weight,l1_weight) model.compile(optimizer=keras.optimizers.Adam(learning_rate=lr,beta_1=beta), loss=keras.losses.MeanSquaredError(), metrics=['mean_squared_error']) checkpoint_filepath = '/DATA_SSD/process_AW/test_run_LIDC/' + version_name + '' + str(epoch_num) + '' + str(lr).replace('.','p') + '' + str(l2).replace('.','p') + ''
models[np.argmin(min_losses)].predict(test_images) print(np.mean(train_preds- np.expand_dims(np.array(train_y),axis=-1))) print(np.std(train_preds- np.expand_dims(np.array(train_y),axis=-1))) print(np.mean(dev_preds- np.expand_dims(np.array(dev_y),axis=-1))) print(np.std(dev_preds- np.expand_dims(np.array(dev_y),axis=-1))) print(np.mean(test_preds- np.expand_dims(np.array(test_y),axis=-1))) print(np.std(test_preds- np.expand_dims(np.array(test_y),axis=-1))) print(stats.pearsonr(test_preds.flatten(),np.array(test_y))[0]2) plt.figure() plt.scatter(test_preds,np.expand_dims(np.array(test_y),axis=-1),s=1) plt.show() Notebook FOR_STUDENTS_LIDC_create_input: import glob import nibabel as nib import scipy from scipy import io, ndimage import numpy as np import matplotlib.pyplot as plt from concurrent import futures from concurrent.futures import ThreadPoolExecutor # import tensorflow as tf # from tensorflow import keras, random, config import pickle from PIL import Image import os import zipfile import pydicom lidc_scans_path = '/DATA_SSD/process_AW/LIDC_Nifty/' lidc_in = glob.glob('/DATA_SSD/process_AW/LIDC_Nifty//.nii.gz') lidc_masks = glob.glob('/DATA_SSD/process_AW/LIDC_lung_mask/.nii.gz') pickle_dir = "/DATA_SSD/process_AW/" # load the volumes dictionary with open(os.path.join(pickle_dir, "LIDC_volumes.pckl"), "rb") as f: volumes = pickle.load(f) # load the resolutions dictionary with open(os.path.join(pickle_dir, "LIDC_resolutions.pckl"), "rb") as f: resolutions = pickle.load(f) # load the array sizes dictionary with open(os.path.join(pickle_dir, "LIDC_array_sizes.pckl"), "rb") as f: array_sizes = pickle.load(f) volumes_arr = np.array(list(volumes.values())) reso_arr = np.array(list(resolutions.values())) size_arr = np.array(list(array_sizes.values())) physical_size = reso_arrsize_arr max_mm = np.max(physical_size,axis=0) import tifffile save_projection_path = '/DATA_SSD/process_AW/LIDC_input_images/' if not os.path.isdir(save_projection_path): os.mkdir(save_projection_path) def create_threechannel(mask): print(i) lung = nib.load(mask).get_fdata().astype('uint8') idno = mask.split('/')[-1].split('_lungseg') [0] scan = nib.load(glob.glob(lidc_scans_path +idno+'/.nii.gz') [0]).get_fdata().astype('float') print(idno) reso = [float(resolutions[mask][0]), float(resolutions[mask][2])] lung[lung>0] = 1 shp = np.round(max_mm/np.array([reso[0],reso[0],reso[1]]))-np.shape(lung) try: for j in range(5): print(j) options = np.random.uniform(0,1,6) lung2 = lung.copy() scan2 = scan.copy() if options[0]>0.5: lung2 = lung2[::-1,:,:] scan2 = scan2[::-1,:,:] xtranslate, ytranslate, ztranslate = options[1:4] arrz = np.shape(lung)[2] top_slice = np.argmax(np.max(lung,axis=(0,1))>0) bottom_slice = np.argmax(np.max(lung[:,:,::-1],axis=(0,1))>0) arrz = np.shape(lung)[2]- bottom_slice-top_slice lung2[:,:,:top_slice + int(np.round((0.20+0.20options[4])arrz))] = 0 lung2[:,:,-bottom_slice - int(np.round((0.15options[5])arrz)):] = 0 scan2[:,:,:top_slice + int(np.round((0.20+0.20options[4])arrz))] = -1024 scan2[:,:,-bottom_slice - int(np.round((0.15options[5])arrz)):] = -1024 lung2 = np.pad(lung2, ((int(np.floor(shp[0]xtranslate)),int(np.ceil(shp[0](1-xtranslate)))), (int(np.floor(shp[1]ytranslate)),int(np.ceil(shp[1](1-ytranslate)))), (int(np.floor(shp[2]ztranslate)),int(np.ceil(shp[2](1-ztranslate)))))) scan2 = np.pad(scan2,((int(np.floor(shp[0]xtranslate)),int(np.ceil(shp[0](1-xtranslate)))), (int(np.floor(shp[1]ytranslate)),int(np.ceil(shp[1](1-ytranslate)))), (int(np.floor(shp[2]ztranslate)),int(np.ceil(shp[2]*(1-ztranslate))))), mode='constant',constant_values=-1024.0) lung2 = scipy.ndimage.zoom(lung2, (224/np.shape(lung2)[0],224/np.shape(lung2)[1],224/np.shape(lung2)[2]),order=0) scan2 = scipy.ndimage.zoom(scan2,(224/np.shape(scan2)[0],224/np.shape(scan2) [1],224/np.shape(scan2)[2]),order=1) for k,view in enumerate(['sagittal','coronal','axial']): silhouette = np.sum(lung2,axis=k)/224. mip = np.max(scan2,axis=k) mip = (np.clip(mip,-1024,1024)+1024)/2048. lungavg = scan2.copy() lungavg[lung2==0]=np.nan lungavg = np.nanmean(lungavg,axis=k) lungavg = np.nan_to_num(lungavg,nan=-1024) lungavg = (np.clip(lungavg,-1024,0)+1024)/1024 img =
import matplotlib.pyplot as plt import json import sklearn from sklearn import model_selection from PIL import Image import pickle synthetic_data_path = '/DATA_SSD/process_AW/SPIROMICS_V1_lungmask_projections/MESA_CAC_Ex5_3Ap r2022/' gpus = tf.config.experimental.list_physical_devices('GPU') print(tf.version) if gpus: try: # Currently, memory growth needs to be the same across GPUs for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) tf.config.experimental.set_visible_devices(gpus[0], 'GPU') # GPU index! logical_gpus = tf.config.experimental.list_logical_devices('GPU') print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs") except RuntimeError as e: # Memory growth must be set before GPUs have been initialized print(e) f = open(synthetic_data_path + 'MESA_Ex5_training_data.pckl','rb') train_data = pickle.load(f) f.close() f = open(synthetic_data_path + 'MESA_Ex5_validation_data.pckl','rb') val_data = pickle.load(f) f.close() f = open(synthetic_data_path + 'MESA_Ex5_test_data.pckl','rb') test_data = pickle.load(f) f.close() def resblock(x,kernelsize,filters,kr,nm): x = tf.keras.layers.Conv2D(filters, kernelsize, padding='same',kernel_regularizer=kr,name=nm+'_conv1')(x) x = tf.keras.layers.BatchNormalization(name=nm+'_bn1')(x) x = tf.keras.layers.ReLU(name=nm+'_relu1')(x) fx = x x = tf.keras.layers.Conv2D(filters, kernelsize, padding='same',kernel_regularizer=kr,name=nm+'_conv2')(x) x = tf.keras.layers.BatchNormalization(name=nm+'_bn2')(x) x = tf.keras.layers.ReLU(name=nm+'_relu2')(x) x = tf.keras.layers.Conv2D(filters, kernelsize, padding='same',kernel_regularizer=kr,name=nm+'_conv3')(x) x = tf.keras.layers.BatchNormalization(name=nm+'_bn3')(x) out = tf.keras.layers.Add(name=nm+'_add')([x,fx]) out = tf.keras.layers.ReLU(name=nm+'_relu3')(out) return out def conv_net(x1,kr): x1 = resblock(x1,5,32,kr,'block1') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp1')(x1) x1 = resblock(x1,5,64,kr,'block2') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp2')(x1) x1 = resblock(x1,3,64,kr,'block3') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp3')(x1) x1 = resblock(x1,3,128,kr,'block4') x1 = tf.keras.layers.MaxPool2D(3,padding='same',name='mp4')(x1) x1 = resblock(x1,3,256,kr,'block5') x1 = tf.keras.layers.GlobalAveragePooling2D(name='gap')(x1) return x1 def get_model(l2,l1): l2_weight = l2 l1_weight = l1 kr = tf.keras.regularizers.l1_l2(l1=l1_weight, l2=l2_weight) # inputs_sag = tf.keras.Input(shape=(224,224,1)) # inputs_cor = tf.keras.Input(shape=(224,224,1)) # inputs_ax = tf.keras.Input(shape=(224,224,1)) inputs = tf.keras.Input(shape=(224,224,3),name='input') inputs = tf.cast(inputs,dtype='float32') inp1 = tf.keras.layers.Lambda(lambda x: x[:,:,:,0]/224.0)(inputs) inp1 = tf.expand_dims(inp1,axis=-1) inp2 = tf.keras.layers.Lambda(lambda x: x[:,:,:,1]/2048)(inputs) inp2 = tf.expand_dims(inp2,axis=-1) inp3 = tf.keras.layers.Lambda(lambda x: x[:,:,:,2]/1024)(inputs) inp3 = tf.expand_dims(inp3,axis=-1) # inputs = tf.keras.layers.Concatenate([inp1,inp2,inp3],axis=-1) pass_inputs = tf.keras.layers.Concatenate(axis=-1)([inp1,inp2,inp3]) x = conv_net(pass_inputs,kr) x = tf.keras.layers.Dense(256,activation='relu',kernel_regularizer = kr,name='dense1')(x) x = tf.keras.layers.Dense(128,activation='relu',kernel_regularizer = kr,name='dense2') (x) x = tf.keras.layers.Dense(1,activation='linear',kernel_regularizer = kr,name='dense3')(x) # summarize the model model = keras.Model(inputs=inputs,outputs=x) model.summary() return model def get_bottleneck(l2,l1): l2_weight = l2 l1_weight = l1 kr = tf.keras.regularizers.l1_l2(l1=l1_weight, l2=l2_weight) # inputs_sag = tf.keras.Input(shape=(224,224,1)) # inputs_cor =
tf.keras.Input(shape=(224,224,1)) # inputs_ax = tf.keras.Input(shape=(224,224,1)) inputs = tf.keras.Input(shape=(224,224,3),name='input') inputs = tf.cast(inputs,dtype='float32') x_out = conv_net(inputs,kr) x = tf.keras.layers.Dense(256,activation='relu',kernel_regularizer = kr,name='dense1') (x_out) x = tf.keras.layers.Dense(128,activation='relu',kernel_regularizer = kr,name='dense2')(x) x = tf.keras.layers.Dense(1,activation='linear',kernel_regularizer = kr,name='dense3') (x) # summarize the model model = keras.Model(inputs=inputs,outputs=x_out) model.summary() return model def retrieve_data_oneset(dataset): paths = [] y = [] for point in dataset: print(point) idno = point[0] volume = point[1] for i in range(10): paths.append(synthetic_data_path + idno + '' + str(i) + '' + view + '.tif') y.append(volume) images = [tifffile.imread(path) for path in paths] images = np.stack(images,axis=0) y = np.stack(y,axis=0) return images, y def retrieve_data(view): train_images, train_y = retrieve_data_oneset(train_data) dev_images, dev_y = retrieve_data_oneset(val_data) test_images, test_y = retrieve_data_oneset(test_data) return train_images, dev_images, test_images, train_paths, dev_paths, test_paths, train_y, dev_y, test_y best_sag = '/'.join(dirx_sag[int(np.argmin(np.array(min_sag)[:,0]))].split('/')[:-1]) #.split('model')[0]+'') print(best_sag) /DATA_SSD/process_AW/volume_estimation/25Apr2022_sagCNN_v7_256out_150_ p549414370110902e-05_0p00011385689053732937_0 model = get_model(0,0) model.load_weights(best_sag + '/') train_preds = model.predict(train_images) dev_preds = model.predict(dev_images) test_preds = model.predict(test_images) np.mean((dev_preds-np.expand_dims(np.array(dev_y)/1e6,axis=-1))*2) plt.figure() plt.scatter(dev_preds,np.array(dev_y)/1e6,s=1) dev_preds.T- np.array(dev_y)/1e6 plt.figure() plt.hist((dev_preds.T-np.array(dev_y)/1e6)[0]) plt.show() x = dev_preds.T-dev_y/1e6 print(np.mean(np.abs(x))) print(np.mean(x)) print(np.std(x)) md = get_bottleneck(0,0) md.load_weights(best_sag + '/') sag_bottle_train = md.predict(train_images) sag_bottle_dev = md.predict(dev_images) sag_bottle_test = md.predict(test_images) import sklearn from sklearn import decomposition pc = sklearn.decomposition.PCA(n_components=2) pc.fit(sag_bottle_train) pc.explained_variance_ratio_ sag_pc = pc.transform(sag_bottle_train) plt.figure() plt.scatter(sag_pc[:,0],sag_pc[:,1],s=1,c=train_y) plt.show() sag_pc_test = pc.transform(sag_bottle_test) plt.figure() plt.scatter(sag_pc_test[:,0],sag_pc_test[:,1],s=1,c=test_y) plt.show() best_cor = '/'.join(dirx_cor[int(np.argmin(np.array(min_cor)[:,0]))].split('/')[:-1]) print(best_cor) train_images, dev_images, test_images, train_paths, dev_paths, test_paths, train_y, dev_y, test_y = retrieve_data('coronal') model_cor = get_model(0,0) model_cor.load_weights(best_cor + '/') train_preds_cor = model_cor.predict(train_images) dev_preds_cor = model_cor.predict(dev_images) test_preds_cor = model_cor.predict(test_images) print(np.std(test_preds_cor.T- test_y/1e6)) print(np.mean(test_preds_cor.T-test_y/1e6)) md_cor = get_bottleneck(0,0) md_cor.load_weights(best_cor+ '/') cor_bottle_train = md_cor.predict(train_images) cor_bottle_dev = md_cor.predict(dev_images) cor_bottle_test = md_cor.predict(test_images) pc_cor = sklearn.decomposition.PCA(n_components=2) pc_cor.fit(cor_bottle_train) print(pc_cor.explained_variance_ratio_) cor_pc = pc.transform(cor_bottle_train) plt.figure() plt.scatter(cor_pc[:,0],cor_pc[:,1],s=1,c=train_y) plt.show() best_ax = '/'.join(dirx_ax[int(np.argmin(np.array(min_ax)[:,0]))].split('/')[:-1]) print(best_ax) train_images, dev_images, test_images, train_paths, dev_paths, test_paths, train_y, dev_y, test_y = retrieve_data('axial') model_ax = get_model(0,0) model_ax.load_weights(best_ax + '/') pc_ax = sklearn.decomposition.PCA(n_components=2) pc_ax.fit(ax_bottle_train) print(pc_ax.explained_variance_ratio_) ax_pc = pc.transform(ax_bottle_train) plt.figure() plt.scatter(ax_pc[:,0],ax_pc[:,1],s=1,c=train_y) plt.show() version_name = '25Apr2022_sagCNN_v7_256out' f = open(base_path + version_name + '_bottleneck_512_train.pckl', 'wb') pickle.dump(sag_bottle_train, f) f.close f =
v8Dec x = tf.keras.layers.Dense(128,activation='relu',kernel_regularizer = kr)(x) x = tf.keras.layers.Dense(1,activation='linear',kernel_regularizer = kr)(x) #x = Dense(2,activation='softmax')(x) # summarize the model model = keras.Model(inputs=inputs,outputs=x) model.summary() return model def trainup(train_x,train_y,dev_x,dev_y,epoch_num,lr,l2,l1,beta,version_name): tf.random.set_seed(42) l2_weight = l2 l1_weight = l1 model = get_model(l2_weight,l1_weight) model.compile(optimizer=keras.optimizers.Adam(learning_rate=lr,beta_1=beta), loss=keras.losses.MeanSquaredError(), metrics=['mean_squared_error']) checkpoint_filepath = base_path + version_name + '' + str(epoch_num) + '' + str(lr).replace('.','p') + '' + str(l2).replace('.','p') + '' + str(l1).replace('.','p') + '/' model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint( filepath=checkpoint_filepath, save_weights_only=True, monitor='val_mean_squared_error', mode='min', save_best_only=True) early_stopping_callback = tf.keras.callbacks.EarlyStopping( monitor="val_mean_squared_error", min_delta=0, patience=100, verbose=0, mode="auto", baseline=None, restore_best_weights=True) params = np.array([epoch_num, lr, l2, beta, l1]) model_history = model.fit(train_x,train_y/1e6, validation_data=(dev_x,dev_y/1e6), epochs=epoch_num, batch_size = 300, verbose=1, callbacks = [model_checkpoint_callback, early_stopping_callback], shuffle=True) f = open(checkpoint_filepath + 'model_history.pckl', 'wb') pickle.dump(model_history.history, f) f.close model.save(checkpoint_filepath + 'final_model') tf.keras.backend.clear_session() return model, model_history, params models = [] model_hists = [] params_lists = [] for run in range(35): lr = 10np.random.uniform(-6.5,-4) l2 = 10np.random.uniform(-4,-1) #before (-5,-1) l1 = 10np.random.uniform(-7,-3) beta = 0.9 # should I also let this vary? If so, how? epochs = 200 print('LR: %.5e | L2: %.5e | L1: %.5e' % (lr,l2,l1)) model, model_hist,params = trainup(train_x,train_y,dev_x,dev_y,epochs,lr,l2,l1,beta,version_name) models.append(model) model_hists.append(model_hist) params_lists.append(params) min_losses = [] plt.figure() for hist,name in zip(model_hists,params_lists): plt.plot(np.arange(1,len(hist.history['mean_squared_error']) +1),hist.history['mean_squared_error']) plt.plot(np.arange(1,len(hist.history['val_mean_squared_error']) +1),hist.history['val_mean_squared_error']) print('Best epoch: %d | Minimum MSE: %.5f' % (np.argmin(hist.history['val_mean_squared_error']),np.min(hist.history['val_mean_s quared_error']))) print(name) plt.ylim((0,1)) plt.show() min_losses.append(np.min(hist.history['val_mean_squared_error'])) best_idx = int(np.argmin(min_losses)) print(best_idx) print(np.min(model_hists[best_idx].history['val_mean_squared_error'])) dev_preds = models[best_idx].predict(dev_x) train_preds = models[best_idx].predict(train_x) test_preds = models[best_idx].predict(test_x) params_lists[best_idx] np.mean((np.squeeze(dev_preds)-np.array(dev_y)/1e6)2) print(np.mean(np.abs(np.squeeze(test_preds)-np.array(test_y)/1e6))) print(np.mean(np.abs(np.squeeze(dev_preds)-np.array(dev_y)/1e6))) print(np.mean(np.abs(np.squeeze(train_preds)-np.array(train_y)/1e6))) print(np.std(np.abs(np.squeeze(test_preds)-np.array(test_y)/1e6))) print(np.std(np.abs(np.squeeze(dev_preds)-np.array(dev_y)/1e6))) print(np.std(np.abs(np.squeeze(train_preds)-np.array(train_y)/1e6))) from scipy import stats print(np.mean(np.squeeze(test_preds)-np.array(test_y)/1e6)) print(np.mean(np.squeeze(dev_preds)-np.array(dev_y)/1e6)) print(np.mean(np.squeeze(train_preds)-np.array(train_y)/1e6)) print(np.std(np.squeeze(test_preds)-np.array(test_y)/1e6)) print(np.std(np.squeeze(dev_preds)-np.array(dev_y)/1e6)) print(np.std(np.squeeze(train_preds)-np.array(train_y)/1e6)) print(stats.pearsonr(test_preds.flatten(),np.array(test_y))[0]**2) plt.figure()
plt.scatter(np.array(test_y)/1e6,test_preds,s=5,label='Test predictions') plt.plot([2,10],[2,10],'r',label='Identity') plt.xlim([1,11]) plt.ylim([1,11]) plt.xlabel('True volume (L)') plt.ylabel('Predicted volume (L)') #plt.legend({'Validation predictions','Identity'}) plt.legend() plt.title('Predicted volume vs. ground truth: MESA Exam 5 test set') #plt.savefig('/DATA_SSD/process_AW/volume_estimation/' + version_name + '/validation_predictions.png',dpi=600) plt.show() model_history = model_hists[best_idx] plt.figure() plt.plot(np.arange(1,len(model_history.history['mean_squared_error']) +1),model_history.history['mean_squared_error'],label='Train MSE') plt.plot(np.arange(1,len(model_history.history['mean_squared_error']) +1),model_history.history['val_mean_squared_error'], label = 'Validation MSE') plt.ylim((0,0.5)) plt.plot([np.argmin(model_history.history['val_mean_squared_error']),np.argmin(m odel_history.history['val_mean_squared_error'])],[0,1],'g',label = 'Best epoch') plt.xlabel('Epoch') plt.ylabel('Mean squared error') #plt.legend({'Train MSE','Validation MSE', 'Best epoch'}) plt.legend() #plt.savefig('/DATA_SSD/process_AW/volume_estimation/' + version_name + '/loss_curve.png',dpi=600) plt.show() plt.figure() plt.scatter(0.5(np.array(test_y)/1e6+np.squeeze(test_preds)), (np.squeeze(test_preds)-np.squeeze(test_y/1e6)),s=1,label='Test predictions') #plt.plot([2,10],[2,10],'r',label='Identity') mean_err = np.mean(np.squeeze(test_preds)-np.squeeze(test_y/1e6)) plt.plot([1,11], [mean_err,mean_err],'r') plt.plot([1,11], [mean_err+1.96np.std(np.squeeze(test_preds)-np.squeeze(test_y/ 1e6)),mean_err+1.96np.std(np.squeeze(test_preds)-np.squeeze(test_y/1e6))],'r--') plt.plot([1,11],[mean_err-1.96np.std(np.squeeze(test_preds)-np.squeeze(test_y/ 1e6)),mean_err-1.96*np.std(np.squeeze(test_preds)-np.squeeze(test_y/1e6))],'r--') plt.xlim([1,11]) #plt.ylim([1,11]) plt.xlabel('Mean of GT and predicted volume (L)') plt.ylabel('Difference of GT and predicted volume (L)') #plt.legend({'Validation predictions','Identity'}) plt.legend() plt.title('Bland-Altman: MESA Exam 5 test set') #plt.savefig('/DATA_SSD/process_AW/volume_estimation/' + version_name + '/validation_predictions.png',dpi=600) plt.show() plt.figure() plt.hist(np.squeeze(test_preds)-np.array(test_y)/1e6,bins=20) plt.xlabel('(Predicted