def create_model(shape): from keras import layers # from keras import models from keras import optimizers # from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint from tensorflow.keras import Model # from tensorflow.keras.initializers import glorot_uniform from tensorflow.keras.regularizers import l2 # from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.applications import Xception model = Xception(input_shape = (shape, shape, 3), include_top = False, weights = 'imagenet') x = model.output x = layers.AveragePooling2D(pool_size = (2, 2))(x) x = layers.Dense(32, activation = 'relu')(x) x = layers.Flatten()(x) # spostato dopo Flatten x = layers.Dropout(0.1)(x) # a caso x = layers.Dense(128)(x) x = layers.Dense(4, activation = 'softmax', kernel_regularizer = l2(.0005))(x) model = Model(inputs = model.inputs, outputs = x) opt = optimizers.SGD(lr = 0.0001, momentum = .9) model.compile(loss = 'categorical_crossentropy', optimizer = opt, metrics = ['accuracy']) return model
model.save('C:/nmb/nmb_data/h5/5s/Xception/xception_sgd_1.h5') # 컴파일, 훈련 op = SGD(lr=1e-2) batch_size = 4 es = EarlyStopping(monitor='val_loss', patience=20, restore_best_weights=True, verbose=1) lr = ReduceLROnPlateau(monitor='val_loss', vactor=0.5, patience=10, verbose=1) path = 'C:/nmb/nmb_data/h5/5s/Xception/xception_sgd_1.h5' mc = ModelCheckpoint(path, monitor='val_loss', verbose=1, save_best_only=True) model.compile(optimizer=op, loss="sparse_categorical_crossentropy", metrics=['acc']) history = model.fit(x_train, y_train, epochs=1000, batch_size=batch_size, validation_split=0.2, callbacks=[es, lr, mc]) # 평가, 예측 model = load_model('C:/nmb/nmb_data/h5/5s/Xception/xception_sgd_1.h5') # model.load_weights('C:/nmb/nmb_data/h5/5s/Xception/xception_sgd_1.h5') result = model.evaluate(x_test, y_test, batch_size=8) print("loss : {:.5f}".format(result[0])) print("acc : {:.5f}".format(result[1]))
import tensorflow as tf from tensorflow.keras.applications import Xception from tensorflow.keras.utils import multi_gpu_model import numpy as np import datetime num_samples = 100 height = 71 width = 71 num_classes = 100 start1 = datetime.datetime.now() with tf.device('/gpu:0'): model = Xception(weights=None, input_shape=(height, width, 3), classes=num_classes) model.compile(loss='categorical_crossentropy', optimizer='rmsprop') # Generate dummy data. x = np.random.random((num_samples, height, width, 3)) y = np.random.random((num_samples, num_classes)) model.fit(x, y, epochs=3, batch_size=16) model.save('my_model_h5') end1 = datetime.datetime.now()
def loadModel(mode, modelWeights, organ, modelType): """ Load model and compile it Input training or inference mode, model weights and type of model Return model """ # Load model input configuration modelInputConfig = loadModelInputConf(organ) # Get values useChannels = modelInputConfig.useChannels useClasses = modelInputConfig.useClasses useResolution = modelInputConfig.useResolution # Define model if modelType == 'ResNet101': model = ResNet101(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses) elif modelType == 'SEResNet101': mySEResNet = AllSEResNets.SEResNet101 model = mySEResNet(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses) elif modelType == 'SEResNet154': mySEResNet = AllSEResNets.SEResNet154 model = mySEResNet(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses) # elif modelType == 'SEInceptionResNetV2': # mySEInceptionResNet = AllSEInceptionResNets.SEInceptionResNetV2 # model = mySEInceptionResNet(include_top=True, weights=modelWeights, input_shape=( # useResolution[0], useResolution[1], useChannels), classes=useClasses) elif modelType == 'EfficientNetB4': model = EfficientNetB4(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses, classifier_activation="softmax") elif modelType == 'Xception': model = Xception(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses) elif modelType == 'ResNet101V2': model = ResNet101V2(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses, classifier_activation="softmax") elif modelType == 'ResNet152V2': model = ResNet152V2(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses, classifier_activation="softmax") elif modelType == 'InceptionResNetV2': model = InceptionResNetV2(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses, classifier_activation="softmax") elif modelType == 'ResNet50V2': model = ResNet50V2(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses, classifier_activation="softmax") elif modelType == 'NASNetLarge': model = NASNetLarge(include_top=True, weights=modelWeights, input_shape=(useResolution[0], useResolution[1], useChannels), classes=useClasses) else: raise ValueError('The selected model could not be found') if mode == 'training': print('Loaded model ' + modelType + ' for training, no weights loaded') # Add reglizarization if needed # model = addRegularization(model, tf.keras.regularizers.l2(0.0000)) if mode == 'inference': print('Loaded model ' + modelType + ' for inference, weights loaded.') # Do not add regularization model.compile( optimizer='adam', loss='categorical_crossentropy', # metrics=['accuracy'] metrics=[ 'accuracy', tf.keras.metrics.Precision(), tf.keras.metrics.Recall(), tf.keras.metrics.AUC() ], weighted_metrics=[ 'accuracy', tf.keras.metrics.Precision(), tf.keras.metrics.Recall(), tf.keras.metrics.AUC() ]) return model