import tensorflow as tf import matplotlib.pyplot as plt from tensorflow import keras from tensorflow.keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale=1.0/255) val_datagen = ImageDataGenerator(rescale=1.0/255) train_generator = train_datagen.flow_from_directory(r"/jupyter/horse-or-human/",target_size=(300,300), batch_size=32,class_mode='binary') validation_generator = val_datagen.flow_from_directory(r"/jupyter/validation-horse-or-human/",target_size=(300,300), batch_size=32,class_mode='binary') from kerastuner.tuners import Hyperband from kerastuner.engine.hyperparameters import HyperParameters hp=HyperParameters() def build_model(hp): model = keras.Sequential() model.add(keras.layers.Conv2D(hp.Choice("num_filters_layer0",values=[16,64],default=16),kernel_size=(3,3), activation='relu'),input_shape=(300,300,3)) model.add(keras.layers.MaxPool2D(2,2)) for i in range(hp.Int("num_Cov_layer",1,3)): model.add(keras.layers.Conv2D(hp.Int(f"num_filters_layer{i}",16,64,48), kernel_size=(3,3),activation='relu')) model.add(keras.layers.MaxPool2D(2,2)) model.add(keras.layers.Flatten()) model.add(keras.layers.Dense(hp.Int("num_Dense",128,256,128),activation='relu')) model.add(keras.layers.Dense(1,activation='sigmoid')) model.compile(optimizer=keras.optimizers.RMSprop(learning_rate=hp.Float("lr",0.001,0.01,0.005)), loss='binary_crossentropy',metrics=['acc']) return model tuner = Hyperband(hypermodel=build_model,objective='val_acc', max_epochs=10,directory='horse-or-human_parameters', project_name='my_project_para') tuner.search(train_generator,epochs=5,validation_data=validation_generator) best_hp = tuner.get_best_hyperparameters()[0] print(best_hp.values) model = tuner.hypermodel.build(best_hp) model.summary()
主要是使用hp.Int(),Choice,float来代替需要调整的超参数,最后使用search函数进行搜索。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)