keras 当HyperModel.fit`objective`未指定时,www.example.com()的返回值应为单个浮点数

4jb9z9bj  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(95)

我正在使用keras tuner训练我的LSTM模型。我得到一个错误
当HyperModel.fitobjective未指定时,www.example.com()的返回值应为单个浮点数。收到的返回值:〈tensorflow.python.keras.callbacks.History object at 0x7fa3e80be710〉of type〈class 'tensorflow.python.keras.callbacks. History'〉.
我不熟悉这个错误,也搜索了一下。我也不是那么熟悉keras调谐器。
我的密码是

x_test = x_test[FeaturesSelected]
            totalColumns = len(FeaturesSelected)

                   
            
            
            
            callback = EarlyStopping(monitor='val_loss', patience=3)
            
            def build_model(hp):
                model=keras.Sequential()
                model.add(layers.Flatten(input_shape=(totalColumns,1)))
                for i in range(hp.Int('layers',2,8)):
                    model.add(layers.Dense(units=hp.Int('units_'+str(i),50,100,step = 10),
                                           activation=hp.Choice('act_'+str(i),['relu','sigmoid'])))
                model.add(layers.Dense(10,activation='softmax'))
                model.compile(optimizer =keras.optimizers.Adam(hp.Choice('learning_rate',values=[1e-2,1e-4])),
                                  loss='mean_absolute_error')
                return model
            tuner = RandomSearch(build_model,max_trials = 20,executions_per_trial=5)
            tuner.search(x_train,y_train,epochs = 10,validation_data=(x_test,y_test),callbacks=[callback])
            
            best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]
            
            best_model = tuner.hypermodel.build(best_hps)
            
            history = best_model.fit(img_train, label_train, epochs=50, validation_split=0.2)
            val_acc_per_epoch = history.history['val_accuracy']
            best_epoch = val_acc_per_epoch.index(max(val_acc_per_epoch)) + 1
            
            hypermodel = tuner.hypermodel.build(best_hps)
            
            hypermodel.fit(x_train,y_train, epochs=best_epoch, validation_split=0.2)

            test_pred = hypermodel.predict(x_test)
byqmnocz

byqmnocz1#

Randomsearch对象(以及所有其他kerastuner.Tuner对象)利用www.example.com()返回的History对象model.fit来比较不同的试验结果。如果没有为RandomSearch对象指定目标,则假定您通过compile()'metrics'参数指定了感兴趣的指标。但是,如果你没有指定一个指标参数- model.fit()将返回一个默认指标列表。要解决这个问题,你可以指定模型的指标和Randomsearch调优器的目标,如下所示:

model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate',values=[1e-2,1e4])),loss='mean_absolute_error', metrics=['accuracy'])

并且,为了最大化验证步骤的准确度结果:

RandomSearch(build_model,max_trials = 20,executions_per_trial=5, objective=kerastuner.Objective('val_accuracy', 'max'))

或者,为了在训练期间最大化准确性:

RandomSearch(build_model,max_trials = 20,executions_per_trial=5, objective=kerastuner.Objective('accuracy', 'max'))

目标参数可以是任何单个指标,也可以是一个指标列表。如果您提供了一个指标列表,则调优器将引用所提供的所有指标的总和。

相关问题