Skip to content
Snippets Groups Projects
Commit 3f34c0c0 authored by Picon Ruiz, Artzai's avatar Picon Ruiz, Artzai
Browse files

first commit

parent 48219847
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from tensorflow_core.python.keras.engine.input_layer import Input
from tensorflow_core.python.keras.layers.core import Dense, Dropout from tensorflow_core.python.keras.layers.core import Dense, Dropout
from tensorflow_core.python.keras.models import Sequential from tensorflow_core.python.keras.models import Sequential, Model
from tensorflow_core.python.keras.optimizer_v2.adam import Adam from tensorflow_core.python.keras.optimizer_v2.adam import Adam
from datasets import load_house_dataset_data from datasets import load_house_dataset_data
...@@ -10,13 +10,21 @@ import matplotlib.pyplot as plt ...@@ -10,13 +10,21 @@ import matplotlib.pyplot as plt
__author__ = 106360 __author__ = 106360
def generate_simple_regression_model(input_shape): def generate_simple_regression_model(input_shape,weights='',remove_head=False):
model = Sequential() # define the model input
model.add(Dense(16, input_dim=input_shape, activation="relu")) inputs = Input(shape=(input_shape))
# model.add(Dropout(0.25)) # loop over the number of filters
model.add(Dense(6, activation="relu"))
# model.add(Dropout(0.25)) x = Dense(16, input_dim=input_shape, activation="relu", name='layer1')(inputs)
model.add(Dense(1, activation="sigmoid")) x = Dense(6, activation="relu",name='layer2')(x)
if not remove_head:
x= Dense(1, activation="sigmoid",name='layer3')(x)
model = Model(inputs,x)
if weights!='':
model.load_weights(weights,by_name=True)
return model return model
......
...@@ -11,13 +11,13 @@ from tensorflow_core.python.keras.models import Sequential, Model, load_model ...@@ -11,13 +11,13 @@ from tensorflow_core.python.keras.models import Sequential, Model, load_model
from tensorflow_core.python.keras.optimizer_v2.adam import Adam from tensorflow_core.python.keras.optimizer_v2.adam import Adam
import tensorflow as tf import tensorflow as tf
from train_and_evaluation import evaluate_regression_model from train_and_evaluation import evaluate_regression_model, train_model
from datasets import load_house_dataset_data, DatasetType from datasets import load_house_dataset_data, DatasetType
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
__author__ = 106360 __author__ = 106360
def generate_simple_cnn_regression_model(input_shape,n_blocks=2,weights='',is_regression=True,num_classes=1,freeze=False): def generate_simple_cnn_regression_model(input_shape,n_blocks=2,weights='',is_regression=True,num_classes=1,freeze=False,remove_head=False):
# define the model input # define the model input
inputs = Input(shape=(input_shape,input_shape,3)) inputs = Input(shape=(input_shape,input_shape,3))
# loop over the number of filters # loop over the number of filters
...@@ -29,12 +29,14 @@ def generate_simple_cnn_regression_model(input_shape,n_blocks=2,weights='',is_re ...@@ -29,12 +29,14 @@ def generate_simple_cnn_regression_model(input_shape,n_blocks=2,weights='',is_re
x = MaxPooling2D()(x) x = MaxPooling2D()(x)
x= Flatten()(x) x= Flatten()(x)
x = Dense(6, activation="relu", name='pre_last_dense_reg')(x)
if not remove_head:
if is_regression: if is_regression:
y = Dense(num_classes, activation="sigmoid",name='last_dense_reg')(x) y = Dense(num_classes, activation="sigmoid",name='last_dense_reg')(x)
else: else:
y = Dense(num_classes, activation="softmax", name='last_dense_clf')(x) y = Dense(num_classes, activation="softmax", name='last_dense_clf')(x)
else:
y=x
model = Model(inputs,y) model = Model(inputs,y)
if weights!='': if weights!='':
...@@ -115,7 +117,7 @@ def train_cifar100(num_classes=100,batch_size=32): ...@@ -115,7 +117,7 @@ def train_cifar100(num_classes=100,batch_size=32):
if __name__ == "__main__": if __name__ == "__main__":
pre_train_with_cifar100 = False pre_train_with_cifar100 = True
weights = '' weights = ''
if pre_train_with_cifar100: if pre_train_with_cifar100:
file_weight_cifar100 = 'pretrained_cifar100.h5' file_weight_cifar100 = 'pretrained_cifar100.h5'
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from tensorflow_core.python.keras.layers.merge import Concatenate
from house_prices_estimation_example_data import generate_simple_regression_model
from house_prices_estimation_example_image import generate_simple_cnn_regression_model
__author__ = 106360
import os import os
from tensorflow_core.python.keras.datasets import cifar10 from tensorflow_core.python.keras.datasets import cifar10
...@@ -11,80 +18,43 @@ from tensorflow_core.python.keras.models import Sequential, Model, load_model ...@@ -11,80 +18,43 @@ from tensorflow_core.python.keras.models import Sequential, Model, load_model
from tensorflow_core.python.keras.optimizer_v2.adam import Adam from tensorflow_core.python.keras.optimizer_v2.adam import Adam
import tensorflow as tf import tensorflow as tf
from utils import plot_regression, load_house_dataset_data, DatasetType from datasets import load_house_dataset_data, DatasetType
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
__author__ = 106360 from train_and_evaluation import train_model, evaluate_regression_model
def train_model(trainX, trainY, testX, testY, model, epochs=200, batch_size=16,show_plot=True):
history = model.fit(trainX, trainY, validation_data=(testX, testY),
epochs=epochs, batch_size=batch_size)
if show_plot:
acc = history.history['mean_absolute_percentage_error']
val_acc = history.history['val_mean_absolute_percentage_error']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(epochs)
plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training mean_absolute_percentage_error')
plt.plot(epochs_range, val_acc, label='Validation mean_absolute_percentage_error')
plt.legend(loc='upper right')
plt.title('Training and Validation \% error')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
return model
if __name__ == "__main__":
(trainX_data,trainX_img, trainY, testX_data,testX_img,testY), normalizer = load_house_dataset_data(test_size=0.2,random_state=666,type=DatasetType.Both)
if __name__ == "__main__": trainX = [trainX_data,trainX_img['frontal_img']]
pre_train_with_cifar100 = False testX = [testX_data,testX_img['frontal_img']]
weights = '' input_shape_data = trainX[0].shape[1]
if pre_train_with_cifar100: input_shape_img = trainX[1].shape[1]
file_weight_cifar100 = 'pretrained_cifar100.h5'
try:
model = load_model(file_weight_cifar100)
except:
model = train_cifar100()
model.save(file_weight_cifar100)
weights = file_weight_cifar100
(trainX_data,trainX_img, trainY, testX_data,testX_img,testY), normalizer = load_house_dataset_data(test_size=0.2,random_state=666,type=DatasetType.Both) model_data = generate_simple_regression_model(input_shape_data, weights='regression_model_data.h5',remove_head=True)
model_img = generate_simple_cnn_regression_model(input_shape_img, weights='regression_model_image_pretrained.h5',remove_head=False)
input_data = [Input(input_shape_data),Input((input_shape_img,input_shape_img,3))]
# y_data = model_data.layers[-2]#(input_data[0])
# y_img = model_img.layers[-2]#(input_data[1])
y_data = model_data(input_data[0])
y_img = model_img(input_data[1])
trainX = trainX_img['frontal_img'] y = Concatenate()([y_data, y_img])
testX = testX_img['frontal_img'] y = Dense(1,activation='sigmoid')(y)
input_shape = trainX.shape[1]
if pre_train_with_cifar100: for layer in model_img.layers:
file_weight_finetune = 'regression_model_image_finetune.h5' layer.trainable = False
model = generate_simple_cnn_regression_model(input_shape,weights=weights,freeze=True) model = Model(input_data,y)
opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss='mean_squared_error',metrics=['mean_absolute_percentage_error','mean_absolute_error','mean_squared_error'], optimizer=opt)
model.summary()
model = train_model(trainX, trainY, testX, testY,model,show_plot=True,epochs=500,batch_size=32)
evaluate_regression_model(model,testX,testY,normalizer,show_plot=True)
model.save(file_weight_finetune)
weights = file_weight_finetune
final_model_weight = 'regression_model_image_pretrained.h5'
else:
final_model_weight = 'regression_model_image_from_scratch.h5'
model = generate_simple_cnn_regression_model(input_shape, weights=weights)
opt = Adam(lr=1e-3, decay=1e-3 / 200) opt = Adam(lr=1e-3, decay=1e-3 / 200)
model.compile(loss='mean_squared_error', model.compile(loss='mean_squared_error',
metrics=['mean_absolute_percentage_error', 'mean_absolute_error', 'mean_squared_error'], metrics=['mean_absolute_percentage_error', 'mean_absolute_error', 'mean_squared_error'],
...@@ -92,4 +62,4 @@ if __name__ == "__main__": ...@@ -92,4 +62,4 @@ if __name__ == "__main__":
model.summary() model.summary()
model = train_model(trainX, trainY, testX, testY, model, show_plot=True, epochs=500, batch_size=32) model = train_model(trainX, trainY, testX, testY, model, show_plot=True, epochs=500, batch_size=32)
evaluate_regression_model(model, testX, testY, normalizer, show_plot=True) evaluate_regression_model(model, testX, testY, normalizer, show_plot=True)
model.save(final_model_weight) model.save('regression_model_combined.h5')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment