Python 当输出变量连续时,我们如何调整神经网络的超参数?

Python 当输出变量连续时,我们如何调整神经网络的超参数?,python,tensorflow,neural-network,grid-search,hyperparameters,Python,Tensorflow,Neural Network,Grid Search,Hyperparameters,我一直在寻找使用Python中的TensorFlow调优ANN模型超参数的资源,到目前为止,我遇到的每个解决方案/讨论都涉及分类输出数据集的分类问题,并使用简单的逻辑回归模型或通过sklearn进行的GridSearch(到目前为止,仅涉及二进制输出的那些). 然而,我的问题有一个连续的输出,我试图实现GridSearch,但我遇到了一个错误: “ValueError:不支持连续” 我不确定当输出变量连续时GridSearch是否工作,但即使它不工作,也必须有一些其他函数可以帮助我优化参数

我一直在寻找使用Python中的TensorFlow调优ANN模型超参数的资源,到目前为止,我遇到的每个解决方案/讨论都涉及分类输出数据集的分类问题,并使用简单的逻辑回归模型或通过sklearn进行的GridSearch(到目前为止,仅涉及二进制输出的那些).

然而,我的问题有一个连续的输出,我试图实现GridSearch,但我遇到了一个错误:
“ValueError:不支持连续”

  • 我不确定当输出变量连续时GridSearch是否工作,但即使它不工作,也必须有一些其他函数可以帮助我优化参数
  • 在这个场景中,我们需要规范化输入和输出变量吗?对于连续输入和输出变量,最好的方法是什么
  • 来自keras.wrappers.scikit\u了解导入KerasClassifier
    从sklearn.model_选择导入GridSearchCV
    从keras.models导入顺序
    从keras.layers导入稠密
    def构建_分类器(优化器):
    分类器=顺序()
    add(稠密(10,input\u dim=5,activation='relu',kernel\u initializer=“uniform”))
    add(稠密(5,激活='relu',内核\初始化器='uniform'))
    add(稠密(1,激活='linear',内核\初始值设定项='uniform'))
    compile(优化器=优化器,损耗='mse',度量=['accurity'])
    返回分类器
    分类器=KerasClassifier(build\u fn=build\u分类器)
    参数={'batch_size':[25,32],
    “时代”:[100500],
    '优化器':['adam','rmsprop']}
    网格搜索=网格搜索cv(估计器=分类器,参数网格=参数,评分=准确度,cv=3)
    网格搜索=网格搜索.fit(X\u列,y\u列)
    最佳参数=网格搜索。最佳参数_
    最佳精确度=网格搜索。最佳分数_
    
    首先,在函数中定义您的模型(您也可以定义为带有keras子类API的类),然后,由于您的输出是一个连续值,因此调用keras scikit learn wrapper
    KerasRegressionor
    以使用GridSearchCV或RandomizedSearchCV

    阅读以更好地理解分类和回归问题之间的差异

    def build_model(n_neurons=30, learning_rate=1e-3, input_shape=[8]):
        model = keras.models.Sequential()
        model.add(keras.layers.InputLayer(input_shape))
        model.add(keras.layers.Dense(n_neurons, activation="relu"))
        model.add(keras.layers.Dense(1))
        optimizer = keras.optimizers.SGD(lr=learning_rate)
        model.compile(loss="mse", optimizer=optimizer)
        return model
    
    keras_reg = keras.wrappers.scikit_learn.KerasRegressor(build_model)
    params_distrib = { #  params you want try with }
    rnd_search_cv = RandomizedSearchCV(keras_reg, params_distrib, n_iter=5, cv=3)
    rnd_search_cv.fit(x_train, y_train, epochs=50, 
                        validation_data=(x_valid, y_valid))   
    

    请共享所有相关代码/数据。见:,@AMC我这样做了。很抱歉给您带来不便。您正在使用包装器KerasClassifier,您应该改用KerasRegressionor。@非常感谢您。我将相应地更改代码。