1,327
社区成员
发帖
与我相关
我的任务
分享
import os
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import tensorflow as tf
from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters
#创建两个生成器,指定scaling范围为0~1
train_datagen = ImageDataGenerator(rescale=1/255)
validation_datagen = ImageDataGenerator(rescale=1/255)
#指向训练数据的文件夹
train_generator = train_datagen.flow_from_directory(
'./tmp/horse-or-human', #训练数据的文件夹
target_size=(150,150), #指定输出尺寸
batch_size=32,
class_mode='binary' #指定二分类
)
#指向测试数据文件夹
validation_generator = validation_datagen.flow_from_directory(
'./tmp/validation-horse-or-human',
target_size=(150,150),
batch_size=32,
class_mode='binary'
)
hp = HyperParameters()
def build_model(hp):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0',values=[16,64],default=16),(3,3),activation='relu',input_shape=(150,150,3)))
model.add(tf.keras.layers.MaxPooling2D(2,2))
for i in range(hp.Int('num_conv_layers',1,3)):
model.add(tf.keras.layers.Conv2D(hp.Choice(f'num_filters_layer{i}',values=[16,64],default=16),(3,3),activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(2,2))
# model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu'))
# model.add(tf.keras.layers.MaxPooling2D(2,2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(hp.Int('hidden_units',128,512,step=32),activation='relu'))
model.add(tf.keras.layers.Dense(1,activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=RMSprop(lr=0.001), metrics=['acc'])
return model
tuner = Hyperband(
build_model,
objective = 'val_acc',
max_epochs = 15,
directory = 'horse_human_params',
hyperparameters = hp,
project_name = 'my_horse_human_project'
)
tuner.search(train_generator,epochs = 10,validation_data = validation_generator)