def main(): h5f = h5py.File('vac/KFold_image_data.h5', 'r') test_images = h5f['test_images'][:] test_labels = h5f['test_labels'][:] h5f.close() print(test_images[0].shape) shuffled_images, shuffled_labels = Function.shuffle_data(test_images, test_labels, random_state=2) for i in range(shuffled_images.shape[0]): #for c in range(5): shuffled_images, shuffled_labels = Function.shuffle_data(test_images, test_labels, random_state=2) model = build_model(6) model2 = resnet.resnet50(6) #model.summary() weight_location = 'Weight/BS32_AUG_KF10_eardrum_inceptionv3_013/KF'+str(i)+'Weight000120_Aug_inceptionV3_ji.h5' weight_location2 = 'Weight/BS32_AUG_KF10_eardrum_resnet50_013/KF'+str(i)+'Weight000120_train50_Aug_ji.h5' print(weight_location) model.load_weights(weight_location) model2.load_weights(weight_location2) prediction = model.predict(shuffled_images[i], verbose=1) prediction2 = model2.predict(shuffled_images[i], verbose=1) predict_labels = [] for j in range(prediction.shape[0]): Max = 0 idx = -1 #print('[{0}] inception : {1} {2} {3} {4} {5}'.format(str(j), str(prediction[j][0]), str(prediction[j][1], str(prediction[j][2]),str(prediction[j][3]), str(prediction[j][4])))) #print('[{0}] resnet : {1} {2} {3} {4} {5}'.format(str(j), str(prediction2[j][0]), str(prediction2[j][1], str(prediction2[j][2]),str(prediction2[j][3]), str(prediction2[j][4])))) for k in range(prediction.shape[1]): #print('inception : {0} /// : resnet : {1}'.format(str(prediction[j][k]), str(prediction2[j][k]))) if (k == 0): Max = prediction[j][0]+prediction2[j][0] idx = 0 else: if (prediction[j][k]+prediction2[j][k] > Max): Max = prediction[j][k]+prediction2[j][k] idx = k predict_labels.append(idx) ''' print('') print('Normal, Traumatic_Perforation, AOM, COM, Congenital_cholesteatoma, OME') print('Prediction probability: {0}, True Label: {1}'.format(prediction[j], shuffled_labels[i][j])) #To see probability and real label Display.Im3D(shuffled_images[i][j]) #To see Test Image predicted ''' Accuracy = Function.display_accuracy_rate(predict_labels, shuffled_labels[i]) print('KF{0}: lr=1e-{1}: Test accuracy is {2}%.'.format(str(i), str(3), Accuracy)) print(confusion_matrix(shuffled_labels[i], predict_labels)) print(classification_report(shuffled_labels[i], predict_labels, target_names=['Normal', 'Traumatic_Perforation', 'AOM', 'COM', 'Congenital_cholesteatoma', 'OME'])) ''' for i in range((len(shuffled_images[0]))//4): Display._4img3D(shuffled_images[0][i*4], predict_labels[i*4], shuffled_labels[0][i*4], shuffled_images[0][i*4+1], predict_labels[i*4+1], shuffled_labels[0][i*4+1], shuffled_images[0][i*4+2], predict_labels[i*4+2], shuffled_labels[0][i*4+2], shuffled_images[0][i*4+3], predict_labels[i*4+3], shuffled_labels[0][i*4+3]) ''' '''
def main(): # Get Hyperparameters batch_size16, batch_size32, epochs = Parameters.train_parameters() image_path = Parameters.get_image_path() train_test_set_name = 'train_test_sets.h5' if not os.path.isfile(train_test_set_name): ImgGen = DataGenerator(image_path) images, labels = ImgGen.__getimage__() # Load images ImgGen.__save__(images, labels, FileName=train_test_set_name) KFold_train_test_set_name = 'KFold_image_data.h5' if not os.path.isfile(KFold_train_test_set_name): # Read all images by theirs labels images, labels = Function.load_data(train_test_set_name) print(images.shape) # Split to disease or normal types NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.split_types(images, labels) print(NR.shape, Traumatic_preforation.shape,AOM.shape,COM.shape,Congenital_cholesteatoma.shape,OME.shape) NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.enlarge_data(NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME, times=3) n_splits = 5 NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.data_ratio_equalization(NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME, n_splits=n_splits) print(NR.shape, Traumatic_preforation.shape,AOM.shape,COM.shape,Congenital_cholesteatoma.shape) NR_train, NR_validation, NR_test = Function.kfold_split(NR, n_splits=n_splits) Traumatic_preforation_train, Traumatic_preforation_validation, Traumatic_preforation_test = Function.kfold_split(Traumatic_preforation, n_splits=n_splits) AOM_train, AOM_validation, AOM_test = Function.kfold_split(AOM, n_splits=n_splits) COM_train, COM_validation, COM_test = Function.kfold_split(COM, n_splits=n_splits) Congenital_cholesteatoma_train, Congenital_cholesteatoma_validation, Congenital_cholesteatoma_test = Function.kfold_split(Congenital_cholesteatoma, n_splits=n_splits) OME_train, OME_validation, OME_test = Function.kfold_split(OME, n_splits=n_splits) train_images, train_labels = Function.combine_images(NR_train, Traumatic_preforation_train,AOM_train,COM_train,Congenital_cholesteatoma_train,OME_train, n_splits=n_splits) validation_images, validation_labels = Function.combine_images(NR_validation, Traumatic_preforation_validation,AOM_validation,COM_validation,Congenital_cholesteatoma_validation,OME_validation, n_splits=n_splits) test_images, test_labels = Function.combine_images(NR_test, Traumatic_preforation_test,AOM_test,COM_test,Congenital_cholesteatoma_test,OME_test, n_splits=n_splits) Function.save_kfold_data(train_images, train_labels, validation_images, validation_labels, test_images, test_labels, FileName=KFold_train_test_set_name) shuffled_train_validation_set_name = 'shuffled_train_validation_set.h5' if not os.path.isfile(shuffled_train_validation_set_name): # Load train images and labels h5f = h5py.File(KFold_train_test_set_name, 'r') train_images = h5f['train_images'][:] train_labels = h5f['train_labels'][:] validation_images = h5f['validation_images'][:] validation_labels = h5f['validation_labels'][:] h5f.close() shuffled_train_images, shuffled_train_labels = Function.shuffle_data(train_images, train_labels, random_state=5) shuffled_validation_images, shuffled_validation_labels = Function.shuffle_data(validation_images, validation_labels, random_state=5) # Save train images and labels h5f = h5py.File(shuffled_train_validation_set_name, 'a') h5f.create_dataset('shuffled_train_images', data=shuffled_train_images) h5f.create_dataset('shuffled_train_labels', data=shuffled_train_labels) h5f.create_dataset('shuffled_validation_images', data=shuffled_validation_images) h5f.create_dataset('shuffled_validation_labels', data=shuffled_validation_labels) h5f.close() # Load train images and labels h5f = h5py.File(shuffled_train_validation_set_name, 'r') shuffled_train_images = h5f['shuffled_train_images'][:] shuffled_train_labels = h5f['shuffled_train_labels'][:] shuffled_validation_images = h5f['shuffled_validation_images'][:] shuffled_validation_labels = h5f['shuffled_validation_labels'][:] h5f.close() for i in range(shuffled_train_images.shape[0]): #input_tensor = Input(shape=(384, 384, 3)) #384, 384, 3) #model=InceptionV3(include_top=False,input_tensor=None,input_shape=None, weights=None, include_top=True, classes=6) #model=InceptionV3(include_top=False,input_tensor=None,input_shape=None, weights=None, include_top=True, classes=6) model=build_model(6) Adadelta0 = optimizers.Adadelta(lr=0.13) monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=30, verbose=1, mode='auto', restore_best_weights=True) model.compile( optimizer=Adadelta0, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history0 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size16, epochs=epochs, verbose=1) model.save_weights('Weight/BS32_AUG_KF5_proeardrum_inceptionv3_013/KF'+str(i)+'Weight000120_Aug_inceptionV3_ji.h5') ''' model.compile( optimizer=Adadelta1, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history1 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e1.h5') model.compile( optimizer=Adadelta2, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history2 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e2.h5') model.compile( optimizer=Adadelta3, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history3 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e3.h5') model.compile( optimizer=Adadelta4, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history4 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e4.h5') ''' # Save cross validation train history history_location = 'history/BS32_AUG_KF5_proeardrum_inceptionv3_013/KF'+str(i)+'_cv_history000120_train50_Aug_inceptionV3_ji.h5' #print(history_location) h5f = h5py.File(history_location, 'w') h5f.create_dataset('history0_train_accuracy', data=history0.history['sparse_categorical_accuracy']) #h5f.create_dataset('history1_train_accuracy', data=history1.history['sparse_categorical_accuracy']) #h5f.create_dataset('history2_train_accuracy', data=history2.history['sparse_categorical_accuracy']) #h5f.create_dataset('history3_train_accuracy', data=history3.history['sparse_categorical_accuracy']) #h5f.create_dataset('history4_train_accuracy', data=history4.history['sparse_categorical_accuracy']) h5f.create_dataset('history0_train_loss', data=history0.history['loss']) #h5f.create_dataset('history1_train_loss', data=history1.history['loss']) #h5f.create_dataset('history2_train_loss', data=history2.history['loss']) #h5f.create_dataset('history3_train_loss', data=history3.history['loss']) #h5f.create_dataset('history4_train_loss', data=history4.history['loss']) h5f.create_dataset('history0_val_accuracy', data=history0.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history1_val_accuracy', data=history1.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history2_val_accuracy', data=history2.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history3_val_accuracy', data=history3.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history4_val_accuracy', data=history4.history['val_sparse_categorical_accuracy']) h5f.create_dataset('history0_val_loss', data=history0.history['val_loss']) #h5f.create_dataset('history1_val_loss', data=history1.history['val_loss']) #h5f.create_dataset('history2_val_loss', data=history2.history['val_loss']) #h5f.create_dataset('history3_val_loss', data=history3.history['val_loss']) #h5f.create_dataset('history4_val_loss', data=history4.history['val_loss']) h5f.close()
def main(): # Get Hyperparameters os.environ['CUDA_DEVICE_ORDER'] = "PCI_BUS_ID" os.environ['CUDA_VISIBLE_DEVICES'] = "1" os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' batch_size16, batch_size32, epochs = Parameters.train_parameters() image_path = Parameters.get_image_path() train_test_set_name = 'train_test_sets.h5' if not os.path.isfile(train_test_set_name): ImgGen = DataGenerator(image_path) images, labels = ImgGen.__getimage__() # Load images ImgGen.__save__(images, labels, FileName=train_test_set_name) KFold_train_test_set_name = 'KFold_image_data.h5' if not os.path.isfile(KFold_train_test_set_name): # Read all images by theirs labels images, labels = Function.load_data(train_test_set_name) # Split to disease or normal types NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.split_types( images, labels) print(NR.shape, Traumatic_preforation.shape, AOM.shape, COM.shape, Congenital_cholesteatoma.shape) NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.enlarge_data( NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME, times=3) n_splits = 5 NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME = Function.data_ratio_equalization( NR, Traumatic_preforation, AOM, COM, Congenital_cholesteatoma, OME, n_splits=n_splits) print(NR.shape, Traumatic_preforation.shape, AOM.shape, COM.shape, Congenital_cholesteatoma.shape) NR_train, NR_validation, NR_test = Function.kfold_split( NR, n_splits=n_splits) Traumatic_preforation_train, Traumatic_preforation_validation, Traumatic_preforation_test = Function.kfold_split( Traumatic_preforation, n_splits=n_splits) AOM_train, AOM_validation, AOM_test = Function.kfold_split( AOM, n_splits=n_splits) COM_train, COM_validation, COM_test = Function.kfold_split( COM, n_splits=n_splits) Congenital_cholesteatoma_train, Congenital_cholesteatoma_validation, Congenital_cholesteatoma_test = Function.kfold_split( Congenital_cholesteatoma, n_splits=n_splits) OME_train, OME_validation, OME_test = Function.kfold_split( OME, n_splits=n_splits) train_images, train_labels = Function.combine_images( NR_train, Traumatic_preforation_train, AOM_train, COM_train, Congenital_cholesteatoma_train, OME_train, n_splits=n_splits) validation_images, validation_labels = Function.combine_images( NR_validation, Traumatic_preforation_validation, AOM_validation, COM_validation, Congenital_cholesteatoma_validation, OME_validation, n_splits=n_splits) test_images, test_labels = Function.combine_images( NR_test, Traumatic_preforation_test, AOM_test, COM_test, Congenital_cholesteatoma_test, OME_test, n_splits=n_splits) Function.save_kfold_data(train_images, train_labels, validation_images, validation_labels, test_images, test_labels, FileName=KFold_train_test_set_name) shuffled_train_validation_set_name = 'shuffled_train_validation_set.h5' if not os.path.isfile(shuffled_train_validation_set_name): # Load train images and labels h5f = h5py.File(KFold_train_test_set_name, 'r') train_images = h5f['train_images'][:] train_labels = h5f['train_labels'][:] validation_images = h5f['validation_images'][:] validation_labels = h5f['validation_labels'][:] h5f.close() shuffled_train_images, shuffled_train_labels = Function.shuffle_data( train_images, train_labels, random_state=5) shuffled_validation_images, shuffled_validation_labels = Function.shuffle_data( validation_images, validation_labels, random_state=5) # Save train images and labels h5f = h5py.File(shuffled_train_validation_set_name, 'a') h5f.create_dataset('shuffled_train_images', data=shuffled_train_images) h5f.create_dataset('shuffled_train_labels', data=shuffled_train_labels) h5f.create_dataset('shuffled_validation_images', data=shuffled_validation_images) h5f.create_dataset('shuffled_validation_labels', data=shuffled_validation_labels) h5f.close() # Load train images and labels h5f = h5py.File(shuffled_train_validation_set_name, 'r') shuffled_train_images = h5f['shuffled_train_images'][:] shuffled_train_labels = h5f['shuffled_train_labels'][:] shuffled_validation_images = h5f['shuffled_validation_images'][:] shuffled_validation_labels = h5f['shuffled_validation_labels'][:] h5f.close() print(shuffled_train_images.shape[1]) for i in range(1, 4): model = resnet.resnet50(6) #model.summary() '''dataGenerator = ImageDataGenerator( rotation_range=8, width_shift_range=0.2, brightness_range=(1,1.5), shear_range=0.01, zoom_range=0.2, channel_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True) dataGenerator.fit(shuffled_train_images[i])''' #print(shuffled_train_labels[i]) #for c in range(shuffled_train_images.shape[1]): #Display.Im3D(shuffled_train_images[i][c]) Adadelta0 = optimizers.Adadelta(lr=0.13) #Adadelta1 = optimizers.Adadelta(lr=1e-1) #Adadelta2 = optimizers.Adadelta(lr=1e-2) #Adadelta3 = optimizers.Adadelta(lr=1e-3) #Adadelta4 = optimizers.Adadelta(lr=1e-4) monitor = EarlyStopping(monitor='val_loss', min_delta=1e-3, patience=30, verbose=1, mode='auto', restore_best_weights=True) model.compile(optimizer=Adadelta0, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history0 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size16, epochs=epochs, verbose=1) model.save_weights('Weight/BS32_AUG_KF5_proeardrum_resnet50_013/KF' + str(i) + 'Weight000120_train50_Aug_ji.h5') ''' model.compile( optimizer=Adadelta1, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history1 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e1.h5') model.compile( optimizer=Adadelta2, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history2 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e2.h5') model.compile( optimizer=Adadelta3, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history3 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e3.h5') model.compile( optimizer=Adadelta4, loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy']) history4 = model.fit(shuffled_train_images[i], shuffled_train_labels[i], validation_data=(shuffled_validation_images[i], shuffled_validation_labels[i]), callbacks=[monitor], batch_size=batch_size, epochs=epochs, verbose=1) model.save_weights('Weight/HE_patience20_BS64_20190829/KF'+str(i)+'Weight1e4.h5') ''' # Save cross validation train history history_location = 'history/BS32_AUG_KF5_proeardrum_resnet50_013/KF' + str( i) + '_cv_history000120_train50_Aug_ji.h5' #print(history_location) h5f = h5py.File(history_location, 'w') h5f.create_dataset( 'history0_train_accuracy', data=history0.history['sparse_categorical_accuracy']) #h5f.create_dataset('history1_train_accuracy', data=history1.history['sparse_categorical_accuracy']) #h5f.create_dataset('history2_train_accuracy', data=history2.history['sparse_categorical_accuracy']) #h5f.create_dataset('history3_train_accuracy', data=history3.history['sparse_categorical_accuracy']) #h5f.create_dataset('history4_train_accuracy', data=history4.history['sparse_categorical_accuracy']) h5f.create_dataset('history0_train_loss', data=history0.history['loss']) #h5f.create_dataset('history1_train_loss', data=history1.history['loss']) #h5f.create_dataset('history2_train_loss', data=history2.history['loss']) #h5f.create_dataset('history3_train_loss', data=history3.history['loss']) #h5f.create_dataset('history4_train_loss', data=history4.history['loss']) h5f.create_dataset( 'history0_val_accuracy', data=history0.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history1_val_accuracy', data=history1.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history2_val_accuracy', data=history2.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history3_val_accuracy', data=history3.history['val_sparse_categorical_accuracy']) #h5f.create_dataset('history4_val_accuracy', data=history4.history['val_sparse_categorical_accuracy']) h5f.create_dataset('history0_val_loss', data=history0.history['val_loss']) #h5f.create_dataset('history1_val_loss', data=history1.history['val_loss']) #h5f.create_dataset('history2_val_loss', data=history2.history['val_loss']) #h5f.create_dataset('history3_val_loss', data=history3.history['val_loss']) #h5f.create_dataset('history4_val_loss', data=history4.history['val_loss']) h5f.close()