机器学习实战一:人马识别
项目总体思路:用keras库编写model,用数据集对model进行训练,用验证集进行验证。考虑到需要对参数进行优化,采用的是kerastuner库中的hyperband函数进行参数优化,并且使用kerastuner库中的HyperParameters超参数在模型的构建时进行参数填充,以方便自动调参。
实际执行思路:
第一步:
引入kerastuner库中的hyperband 和 hyperParameters模块后,,定义一个超参数实例hp。以后所有的需要调整的参数都是hp对象空间中的内容,可以像引用成员那样进行使用。
def一个build_model函数,从而实现把超参数hp封装进去。在build_model中做的就是模型的构造,包括先构造一个sequential(顺序)类型的模型,依次添加一个卷积层(参数依次是hp.Choice(“num_filters_layer0”,values=[16,64],default=16)),activation=‘relu’,input_shape=(300,300,3)
1个池化层(参数依次是(2,2)),
再来一个for循环来自动优化之后的卷积层和池化层的最佳个数:
for range(hp.Int(num_con_layers,1,3)):
model.add(keras.layers.cov2D(hp.Choice(f"num_filters_layer{i}",values=[16,64],default=16)),activation=‘relu’,input_shape=(300,300,3) ))
model.add(keras.layers,MaxPooling(2,2))
之后再加1个flatten层,用于将输入一维化以连接全连接层。
再加一个全连接层 Dense(hp.Int(‘hidden_units’,128,256,step=32),activation=‘relu’)
如果到这里结束的话,就要加一个最后的全连接层
Dense()用于输出0/1判断,二分用sigmoid激活,多分类用softmax激活。
最后设置model.compile规定目标函数,参数为;
loss=‘binary_crossentropy’, 设置损失函数为对数似然函数
optimizer=RMSprop(lr=0.001)设置学习率和优化函数
metrics=[‘acc’]设置优化指标?
整个build_model写完后返回一个model。
第二步
是使用hyperband进行参数调优
hyperband(指定函数,
objective=‘val_acc’,
max_epochs=15,
指定临时数据的存储目录:directory=‘horse_human_params’,
hyperparameters=hp,
project_name=“给临时数据的文件进行命名”
)
第三步
类似于fit函数,使用tuner.search进行训练。
参数分别为:训练集数据,epochs,verbose( = 0,在控制台没有任何输出
verbose = 1 :显示进度条,默认为1),验证集,验证集步长validation_steps=8