110 lines
3.3 KiB
Python
110 lines
3.3 KiB
Python
import sys
|
|
import os
|
|
|
|
from keras.layers.pooling import MaxPool2D
|
|
from keras.optimizer_v2 import gradient_descent
|
|
|
|
sys.path.append('c:/git/keras')
|
|
sys.path.append('c:/git/absl')
|
|
|
|
# installed
|
|
# py -mpip install numpy
|
|
# py -mpip show numpy
|
|
# py -mpip install tensorflow
|
|
# py -mpip show tensorflow
|
|
# py -mpip install matplotlib
|
|
# c:\users\skess\appdata\local\programs\python\python39\lib\site-packages
|
|
|
|
import keras
|
|
from keras.models import Model
|
|
#from keras.optimizers import *
|
|
#from keras.optimizers import adam_v2
|
|
from tensorflow.keras.optimizers import Adam
|
|
from keras.datasets import cifar10
|
|
from keras.preprocessing.image import ImageDataGenerator
|
|
from keras.models import Sequential
|
|
from keras.utils import np_utils
|
|
from keras.layers import Dense
|
|
from keras.layers import Activation
|
|
from keras.layers import Flatten
|
|
from keras.layers import Dropout
|
|
from keras.layers import BatchNormalization
|
|
from keras.layers import Conv2D
|
|
from keras.layers import MaxPooling2D
|
|
from keras.callbacks import ModelCheckpoint
|
|
from tensorflow.keras.callbacks import ReduceLROnPlateau
|
|
from tensorflow.keras.callbacks import EarlyStopping
|
|
from keras import regularizers
|
|
from keras import optimizers
|
|
from matplotlib import pyplot
|
|
import numpy as np
|
|
import tensorflow
|
|
from resnet50 import *
|
|
import math
|
|
|
|
# RESNET50 ARCHITECTIURE
|
|
image_size = (128, 128)
|
|
|
|
# November 11, 2022 : This model scored 78.95 in Total Accuracy Weights=../Weights/resnet50.h5.v2
|
|
|
|
model_name='resnet50.h5'
|
|
|
|
train_ds = tensorflow.keras.preprocessing.image_dataset_from_directory(
|
|
'C:\\boneyard\\DeepLearning\\data',
|
|
|
|
label_mode="binary",
|
|
subset="training",
|
|
validation_split=.20,
|
|
image_size=image_size,
|
|
color_mode='grayscale',
|
|
batch_size=32,
|
|
seed=50
|
|
)
|
|
val_ds = tensorflow.keras.preprocessing.image_dataset_from_directory(
|
|
'C:\\boneyard\\DeepLearning\\data',
|
|
label_mode="binary",
|
|
subset="validation",
|
|
validation_split=.20,
|
|
image_size=image_size,
|
|
color_mode='grayscale',
|
|
batch_size=32,
|
|
seed=50
|
|
)
|
|
|
|
input_shape=(128,128,1)
|
|
epochs=200
|
|
initial_lrate=0.01
|
|
batch_size=128
|
|
patience_on_early_stop=10
|
|
reduce_factor=np.sqrt(0.1)
|
|
metric='val_loss'
|
|
mode='min'
|
|
|
|
#ReduceLROnPlateau
|
|
reduce_lr=tensorflow.keras.callbacks.ReduceLROnPlateau(monitor=metric,factor=np.sqrt(0.1),patience=5,min_lr=0.5e-6,verbose=True)
|
|
|
|
#Optimizer
|
|
optimizer=gradient_descent.SGD(learning_rate=initial_lrate, momentum=0.9, nesterov=False)
|
|
|
|
# Checkpointer
|
|
checkpointer=ModelCheckpoint(filepath=model_name,mode=mode,monitor=metric,verbose=1,save_best_only=True)
|
|
|
|
#Early Stopping
|
|
early_stopping=EarlyStopping(monitor=metric,mode=mode,verbose=1,patience=patience_on_early_stop)
|
|
|
|
# def resnet50(input_shape,classes)
|
|
model=resnet50(input_shape,1)
|
|
model.summary()
|
|
#model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy','mse'])
|
|
model.compile(loss='binary_crossentropy',optimizer=optimizer,metrics=['accuracy','mse'])
|
|
history = model.fit(train_ds, validation_data=val_ds, epochs=epochs, batch_size=batch_size, callbacks=[early_stopping,checkpointer])
|
|
#model.save(model_name)
|
|
|
|
# plot the learning curves
|
|
pyplot.plot(history.history['accuracy'],label='train')
|
|
pyplot.plot(history.history['val_accuracy'],label='validation')
|
|
pyplot.plot(history.history['mse'],label='mse')
|
|
pyplot.plot(history.history[metric],label=metric)
|
|
pyplot.legend()
|
|
pyplot.show()
|