当前位置: 首页 > 知识库问答 >
问题:

“Sequential”对象没有属性“loss”-当我使用GridSearchCV调优Keras模型时

冯野
2023-03-14

下面是我的代码:


    from tensorflow.keras.models import Sequential, Model
    from tensorflow.keras.layers import Input, Dense, Activation, Dropout, BatchNormalization
    from tensorflow.keras.datasets import mnist
    from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
    from sklearn.model_selection import GridSearchCV

    ...
    ...
    ...


    def get_model(dropout_rate=0.2, hidden_units=512):
        model = Sequential()
        model.add(Dropout(dropout_rate, input_shape=(28*28,)))
        model.add(Dense(hidden_units, activation='relu'))
        model.add(BatchNormalization())
        model.add(Dropout(dropout_rate))
        model.add(Dense(hidden_units, activation='relu'))
        model.add(BatchNormalization())
        model.add(Dropout(dropout_rate))
        model.add(Dense(hidden_units, activation='relu'))
        model.add(BatchNormalization())
        model.add(Dropout(dropout_rate))
        model.add(Dense(10, activation='softmax'))
        return model

    model = KerasClassifier(build_fn=get_model, batch_size=128, epochs=10)
    para_dict = {'dropout_rate':[0.2,0.5,0.8], 'hidden_units':[128,256,512,1024]}
    clf = GridSearchCV(model, para_dict, cv=5, scoring='accuracy')
    clf.fit(x_train, y_train)

谢谢你!

共有1个答案

袁晟
2023-03-14

上面的build_model函数没有为训练配置模型。您已经添加了loss和其他参数。

您可以使用keras顺序方法compile来编译模型。https://keras.io/models/sequential/

所以您的build_model函数应该是:

loss = 'binary_crossentropy' #https://keras.io/optimizers
optimizer = 'adam'           #https://keras.io/losses
metrics = ['accuracy']
def get_model(dropout_rate=0.2, hidden_units=512):
    model = Sequential()
    model.add(Dropout(dropout_rate, input_shape=(28*28,)))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(hidden_units, activation='relu'))
    model.add(BatchNormalization())
    model.add(Dropout(dropout_rate))
    model.add(Dense(10, activation='softmax'))
    model.compile(optimizer = optimizer, loss = loss, metrics = metrics)
    return model
 类似资料:
  • 问题内容: 我正在使用以下内容:python 3.6.4 flask= 1.1.1, Keras = 2.3.0, TensorFlow = 1.14.0,我有一个Flask服务器,可以从客户端获取图片。将Keras模型与TensorFlow后端结合使用时,我尝试从预先训练的模型中获得预测。 我正在使用以下函数上传模型(作为类的一部分) 我使用以下代码进行预测: 直到今天,我还没有任何问题,总能得

  • 我在Jupyter Notebook中运行Keras神经网络模型(Python 3.6) 我得到以下错误 属性错误:列表对象没有属性ndim 从K调用. fi()方法后eras.model 我检查了Keras的requirements.txt文件(在Anaconda3中),Numpy、smpy和六个模块版本都是最新的。 什么可以解释这个属性错误? 完整的错误消息如下(似乎与Numpy有些关联):

  • 问题内容: 我正在尝试使用cPickle在远程环境中加载该功能。但是我得到了错误“’模块’对象没有属性…”。我真正困扰的是,即使无法加载,命名空间也已经包含了该属性。 这是run.py 错误是 问题答案: 我发现此链接很有帮助:http : //stefaanlippens.net/python-pickling-and-dealing-with-attributeerror-module- ob

  • 我试图将keras.initializers引入我的网络,以下链接: 并且它失败,出现以下错误: 你知道为什么会这样吗?

  • 我正在尝试使用Tensorflow在谷歌云上运行一个培训工作。我试图通过运行以下命令来运行培训。 但是当我运行一个作业时,我得到了以下错误。知道为什么吗?

  • 问题内容: 我只是想像这样将列表转换为一维数组: 但是我收到以下错误: 我尝试重新安装numpy,因为这似乎对其他人有用,但这不能解决问题。 问题答案: 您很可能在工作目录中有一个名为numpy.py的文件,该文件遮盖了实际的numpy模块。重命名该文件并删除其numpy.pyc文件。