본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

AI/Model Selection

ModelCheckpoint() 확장자가 반드시 .keras여야한다. + ValueError:The filepath provided must end in `.keras`


+ ValueError:
The filepath provided must end in `.keras`
Received:
kera1-5fold-run-01-v1-fold-02-run-02.check

최신 Keras3 에서는 ModelCheckpoint() 모델을 저장할때 확장자가 반드시 .keras여야한다.

callbacks = [
						EarlyStopping(monitor='val_loss', patience=10, mode='min', verbose=1),
					    CSVLogger('keras-5fold-run-01-v1-epochs_ib.log', separator=',', append=False),reduce_lr,
						ModelCheckpoint(
								# 'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.check',
								'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.keras',
								monitor='val_loss', mode='min',
								save_best_only=True,
								verbose=1)]

 

 

 

해당 함수전체코드

def train_model(self,train_X,train_y,n_fold=5,batch_size=16,epochs=40,dim=224,lr=1e-5,model='ResNet50'):
		print(">>> train_model() 시작")
		
		model_save_dest = {}
		k = 0
		kf = KFold(n_splits=n_fold, random_state=0, shuffle=True)

		for train_index, test_index in kf.split(train_X):


			k += 1 
			X_train,X_test = train_X[train_index],train_X[test_index]
			y_train, y_test = train_y[train_index],train_y[test_index]
			
			if model == 'Resnet50':
				model_final = self.resnet_pseudo(dim=224,freeze_layers=10,full_freeze='N')
			
			if model == 'VGG16':
				model_final = self.VGG16_pseudo(dim=224,freeze_layers=10,full_freeze='N') 
			
			if model == 'InceptionV3':
				model_final = self.inception_pseudo(dim=224,freeze_layers=10,full_freeze='N')
				print(">>> InceptionV3 생성 완료")

			datagen = ImageDataGenerator(
					horizontal_flip = True,
					vertical_flip = True,
					width_shift_range = 0.1,
					height_shift_range = 0.1,
					channel_shift_range=0,
					zoom_range = 0.2,
					rotation_range = 20)
			  
				
			adam = optimizers.Adam(
				# lr=lr, 
				learning_rate=lr,
				beta_1=0.9, beta_2=0.999, epsilon=1e-08
				# , decay=0.0
				)
			model_final.compile(optimizer=adam, loss=["categorical_crossentropy"],metrics=['accuracy'])
			reduce_lr = keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.50,
			     		                                  patience=3, min_lr=0.000001)
			
			callbacks = [
						EarlyStopping(monitor='val_loss', patience=10, mode='min', verbose=1),
					    CSVLogger('keras-5fold-run-01-v1-epochs_ib.log', separator=',', append=False),reduce_lr,
						ModelCheckpoint(
								# 'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.check',
								'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.keras',
								monitor='val_loss', mode='min',
								save_best_only=True,
								verbose=1)]
								
			# model_final.fit_generator(datagen.flow(X_train,y_train, batch_size=batch_size),
			model_final.fit(datagen.flow(X_train,y_train, batch_size=batch_size),
				   
			# steps_per_epoch=X_train.shape[0]/batch_size
			steps_per_epoch=X_train.shape[0] // batch_size

			,epochs=epochs,verbose=1,
			validation_data=(X_test,y_test),callbacks=callbacks,
                                          class_weight={0:0.012,1:0.12,2:0.058,3:0.36,4:0.43})
		 
			model_name = 'kera1-5fold-run-01-v1-fold-' + str('%02d' % (k + 1)) + '-run-' + str('%02d' % (1 + 1)) + '.check'
			del model_final
			f = h5py.File(model_name, 'r+')
			# del f['optimizer_weights']
			f.close()
			model_final = keras.models.load_model(model_name)
			model_name1 = self.outdir + str(model) + '___' + str(k) 
			model_final.save(model_name1)
			model_save_dest[k] = model_name1
				
		return model_save_dest

 

 

 

완료