Commit f5cf4314 authored by Billy Amélie's avatar Billy Amélie
Browse files

Merge branch 'AmelieBranch' into 'master'

competition score + transfer learning modification + model retraining

See merge request !21
parents f631da4a 4e913ea3
This source diff could not be displayed because it is too large. You can view the blob instead.
%% Cell type:markdown id: tags:
# CNN superposition + MLP
%% Cell type:markdown id: tags:
https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/
%% Cell type:code id: tags:
``` python
import numpy as np
import pandas as pd
import os
import logging
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.INFO)
```
%% Cell type:markdown id: tags:
## A - Preprocessing : Reading Data
%% Cell type:code id: tags:
``` python
os.chdir('../')
```
%% Cell type:code id: tags:
``` python
from preprocessing.read_load_data import read_data
input_directory='../osic-pulmonary-fibrosis-progression'
train_df, test_df, sample_df = read_data(input_directory)
train_df.head()
```
%%%% Output: execute_result
Patient Weeks FVC Percent Age Sex SmokingStatus
0 ID00007637202177411956430 -4 2315 58.253649 79 Male Ex-smoker
1 ID00007637202177411956430 5 2214 55.712129 79 Male Ex-smoker
2 ID00007637202177411956430 7 2061 51.862104 79 Male Ex-smoker
3 ID00007637202177411956430 9 2144 53.950679 79 Male Ex-smoker
4 ID00007637202177411956430 11 2069 52.063412 79 Male Ex-smoker
%% Cell type:markdown id: tags:
## B - Preprocessing : Loading Data
%% Cell type:code id: tags:
``` python
patients_train_ids= train_df.Patient.unique()
patient_test_list= test_df.Patient.unique()
patients_train_ids = [pat for pat in patients_train_ids]
```
%% Cell type:code id: tags:
``` python
from preprocessing.read_load_data import load_images
logging.info("loading attributes...")
df = pd.read_csv(f'{input_directory}/train.csv')
df = df.drop_duplicates(subset = 'Patient', keep='first')
patients_train_ids= df.Patient.unique().tolist()
df = df[df['Patient'].isin(patients_train_ids)]
logging.info("loading images...")
images = load_images(input_directory,
'train',
patients_train_ids,
option='superposition',
outputH = 240,
outputW = 240)
print("Array shape: ", images.shape)
#check value between -1,1
print('min value: ', np.amin(images))
print('max value: ', np.amax(images))
```
%% Cell type:markdown id: tags:
## C - Preprocessing : shuffle
%% Cell type:code id: tags:
``` python
from sklearn.model_selection import train_test_split
split = train_test_split(df, images, test_size=0.2, random_state=42)
(trainAttrX, testAttrX, trainImagesX, testImagesX) = split
```
%% Cell type:markdown id: tags:
## D - Preprocessing : Scaling + Encoding
%% Cell type:code id: tags:
``` python
from preprocessing.scale_data import scale_variable
sc, trainAttrX, testAttrX = scale_variable(trainAttrX, testAttrX,'FVC')
trainY = trainAttrX.loc[:,'FVC_scaled']
testY = testAttrX.loc[:,'FVC_scaled']
```
%% Cell type:code id: tags:
``` python
from preprocessing.scale_data import encode_variable
trainAttrX, testAttrX = encode_variable(trainAttrX, testAttrX,'Sex')
trainAttrX, testAttrX = encode_variable(trainAttrX, testAttrX,'SmokingStatus')
trainAttrX.drop(columns = ['Sex','SmokingStatus','FVC','FVC_scaled','Patient'], inplace = True)
testAttrX.drop(columns = ['Sex','SmokingStatus','FVC','FVC_scaled','Patient'], inplace = True)
```
%% Cell type:markdown id: tags:
## E - Processing : Create models
%% Cell type:code id: tags:
``` python
from processing.models import create_hybrid2
```
%% Cell type:code id: tags:
``` python
from processing.models import create_hybrid2
from keras.optimizers import Adam
model = create_hybrid2(trainAttrX.shape[1], shape = (240,240,4))
opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss="mean_absolute_percentage_error", optimizer=opt)
```
%% Cell type:code id: tags:
``` python
model.summary()
```
%% Cell type:code id: tags:
``` python
%%time
hist = model.fit(
x=[trainAttrX, trainImagesX], y=trainY,
validation_data=([testAttrX, testImagesX], testY),
epochs=10, batch_size=8)
```
%% Cell type:code id: tags:
``` python
from postprocessing.plot_history import plot_history
plot_history(hist)
```
%%%% Output: display_data
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
# F - Evaluation
%% Cell type:markdown id: tags:
### Training set
%% Cell type:code id: tags:
``` python
from postprocessing.evaluate import evaluate_hybrid, compute_score
```
%% Cell type:code id: tags:
``` python
preds = evaluate_hybrid(model, df, trainAttrX, trainImagesX, trainY, sc)
conf, score = compute_score(trainY,preds.flatten())
print('competition score :', score)
```
%% Cell type:code id: tags:
``` python
model.evaluate([trainAttrX, trainImagesX], trainY)
```
%%%% Output: execute_result
240.91358947753906
%% Cell type:markdown id: tags:
### Test set
%% Cell type:code id: tags:
``` python
preds = evaluate_hybrid(model, df, testAttrX, testImagesX, testY, sc)
conf, score = compute_score(testY,preds.flatten())
print('competition score :', score)
```
%% Cell type:code id: tags:
``` python
model.evaluate([testAttrX, testImagesX], testY)
```
%%%% Output: execute_result
199.35498046875
%% Cell type:code id: tags:
``` python
_a=model.predict([trainAttrX, trainImagesX])
```
%% Cell type:code id: tags:
``` python
q=0.5
a = np.quantile(_a, q)
```
%% Cell type:code id: tags:
``` python
_a[:,1]
```
%%%% Output: error
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-31-8ed85e029818> in <module>
----> 1 _a[:,1]
IndexError: index 1 is out of bounds for axis 1 with size 1
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
# G - Sample submission file
%% Cell type:code id: tags:
``` python
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import Model
from tensorflow.keras.layers import BatchNormalization
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Activation
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Input
from tensorflow.keras.layers import concatenate
from tensorflow.keras.layers import GaussianNoise
```
%% Cell type:code id: tags:
``` python
def create_mlp2(dim,regress = True):
model = Sequential()
model.add(GaussianNoise(0.2, input_dim=dim))
model.add(Dense(8, activation="relu"))
model.add(Dense(4, activation="relu"))
# add dense for regression
model.add(Dense(1, activation="linear"))
return model
```
%% Cell type:code id: tags:
``` python
```
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -64,21 +64,21 @@
``` python
from preprocessing.read_load_data import load_images
logging.info("loading attributes...")
df = pd.read_csv(f'{input_directory}/train.csv')
df = df.drop_duplicates(subset = 'Patient', keep='first')
df = df.sort_values("Weeks").drop_duplicates(subset = 'Patient', keep='first')
patients_train_ids= df.Patient.unique().tolist()
df = df[df['Patient'].isin(patients_train_ids)]
logging.info("loading images...")
images = load_images(input_directory,
'train',
patients_train_ids,
option='superposition',
outputH = 240,
outputW = 240)
outputH = 240,
outputW = 240)
print("Array shape: ", images.shape)
#check value between -1,1
print('min value: ', np.amin(images))
print('max value: ', np.amax(images))
......@@ -116,93 +116,674 @@
## E - Processing : Create models
%% Cell type:code id: tags:
``` python
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
#set early stopping criteria
pat = 10 #this is the number of epochs with no improvment after which the training will stop
es = EarlyStopping(monitor='val_loss', patience=pat, verbose=1)
#define the model checkpoint callback -> this will keep on saving the model as a physical file
cp = ModelCheckpoint('clean_notebooks/cnn_transfer_learning_weights.h5', verbose=1, save_best_only=True)
```
%% Cell type:code id: tags:
``` python
def custom_shuffle_split(trainAttrX,train_dataset,trainY,test_size = 0.1 ):
cut = int(len(trainY)*test_size)
arr = list(np.arange(len(trainY)))
np.random.shuffle(arr)
trainidx = arr[cut:]
testidx = arr[:cut]
train_x, train_y = train_dataset[trainidx] , trainY[trainidx]
val_x, val_y = train_dataset[testidx], trainY[testidx]
return train_x, val_x, train_y, val_y
```
%% Cell type:code id: tags:
``` python
trainY = trainAttrX.loc[:,'FVC_scaled'].copy()
trainY = trainY.reset_index( drop = True)
trainAttrX.reset_index(inplace=True)
```
%% Cell type:code id: tags:
``` python
from processing.models import create_transfer_learning
from keras.optimizers import Adam
from tensorflow.keras.models import Model
import efficientnet.tfkeras as efn
new_model =efn.EfficientNetB1(weights='imagenet',include_top=False)
input_channel = 4
config = new_model.get_config()
config["layers"][0]["config"]["batch_input_shape"] = (None, 240, 240, input_channel)
modify_name = config["layers"][1]["config"]["name"]
custom_model = Model.from_config(config)
model = create_transfer_learning(new_model,custom_model,modify_name, input_channel)
opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss="mean_absolute_percentage_error", optimizer=opt)
```
%% Cell type:code id: tags:
``` python
%%time
hist = model.fit(x=trainImagesX, y=trainY,
validation_data=(testImagesX, testY),
epochs=20, batch_size=8)
from time import time
from processing.models import fit_and_evaluate
t0 = time()
n_folds = 3
epochs = 30
batch_size = 8
#save the model history in a list after fitting so that we can plot later
model_history = []
for i in range(n_folds):
print("Training on Fold: ",i+1)
new_model = efn.EfficientNetB1(weights='imagenet',include_top=False)
input_channel = 4
config = new_model.get_config()
config["layers"][0]["config"]["batch_input_shape"] = (None, 240, 240, input_channel)
modify_name = config["layers"][1]["config"]["name"]
custom_model = Model.from_config(config)
model = create_transfer_learning(new_model,custom_model,modify_name, input_channel,weights=True)
opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss="mean_squared_error", optimizer=opt)
t_x, val_x, t_y, val_y = custom_shuffle_split(trainAttrX ,trainImagesX,trainY,test_size = 0.1)
model_history.append(fit_and_evaluate(t_x, val_x, t_y, val_y, epochs, batch_size,model,es,cp))
print("======="*12, end="\n\n\n")
print("Computation time : ", round((time() - t0)/60,3), "min")
```
%% Cell type:code id: tags:
``` python
from postprocessing.plot_history import plot_history
import matplotlib.pyplot as plt
plot_history(hist)
plt.title('Loss vs Epochs')
plt.plot(model_history[0].history['loss'], label='Training Fold 1')
plt.plot(model_history[1].history['loss'], label='Training Fold 2')
plt.plot(model_history[2].history['loss'], label='Training Fold 3')
plt.legend()
plt.show()
```
%%%% Output: display_data
![](data:image/png;base64,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)
![](data:image/png;base64,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)
%% Cell type:markdown id: tags:
# F - Evaluation
# F - Postprocessing : Evaluation
%% Cell type:code id: tags:
``` python
from keras.models import load_model
from efficientnet.tfkeras import EfficientNetB1
model = None
model = load_model('clean_notebooks/cnn_transfer_learning_weights.h5')
```
%% Cell type:code id: tags:
``` python
from postprocessing.evaluate import evaluate_cnn, compute_score
```
%% Cell type:code id: tags:
``` python
preds = evaluate_cnn(model, df, trainImagesX, trainY, sc)
conf, score = compute_score(trainY,preds.flatten())
print('competition score :', score)
def evaluate_cnn(model,df, trainImagesX, trainY,sc):
logging.info("predicting ...")
preds = model.predict(trainImagesX)
diff = preds.flatten() - trainY
percentDiff = (diff / (trainY)) * 100
absPercentDiff = np.abs(percentDiff)
mean = np.mean(absPercentDiff)
std = np.std(absPercentDiff)
print("avg. FVC: {}, std FVC {}".format(df["FVC"].mean(), df["FVC"].std()))
print("mean difference : {:.2f}%, std: {:.2f}%".format(mean, std))
return preds,diff
```
%% Cell type:code id: tags:
``` python
preds_train,diff = evaluate_cnn(model, df, trainImagesX, trainY, sc)
np.sqrt(np.mean(diff*diff))
```
%%%% Output: execute_result
1.0000517762438685
%% Cell type:code id: tags:
``` python
model.evaluate(trainImagesX, trainY)
```
%%%% Output: execute_result
121.15312194824219
1.0001035928726196
%% Cell type:markdown id: tags:
### Test set
%% Cell type:code id: tags:
``` python
preds = evaluate_cnn(model, df, testImagesX, testY, sc)
conf, score = compute_score(testY,preds.flatten())
print('competition score :', score)
preds,diff = evaluate_cnn(model, df, testImagesX, testY, sc)
```
%% Cell type:code id: tags:
``` python
model.evaluate(testImagesX, testY)
```
%%%% Output: execute_result
94.78245544433594
0.8139927387237549
%% Cell type:markdown id: tags:
# G - Postprocessing : Competition score
%% Cell type:markdown id: tags:
## Dropout 0.5
%% Cell type:markdown id: tags:
### Train set
%% Cell type:code id: tags: