首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NoneType”对象在keras中没有带有hyperas的属性“计算”错误

“NoneType”对象在keras中没有带有hyperas的属性“计算”错误
EN

Stack Overflow用户
提问于 2018-09-22 21:24:23
回答 2查看 1K关注 0票数 0

我一直得到一个'NoneType‘对象没有属性’计算‘错误,下面的代码使用了hyperas和keras。任何帮助都将不胜感激!

错误是AttributeError:'NoneType‘对象没有属性’计算‘

这是我的第一个keras和hyperas项目。

代码语言:javascript
复制
#First keras program
from keras.datasets import mnist
from keras import models
from keras import layers
from keras import optimizers
from keras.utils import to_categorical
from hyperas import optim
from hyperas.distributions import choice
from hyperopt import Trials, STATUS_OK, tpe
#Loading Data
#Train_images has shape (60000,28,28)
#Train_labels has shape (60000)
def data():
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    train_images = train_images.reshape((60000, 28 * 28))
    train_images = train_images.astype('float32') / 255
    test_images = test_images.reshape((10000, 28 * 28))
    test_images = test_images.astype('float32') / 255
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    return train_images,train_labels,test_images,test_labels

#Defining Network and adding Dense Layers
#Compiling Network
def create_model(train_images,train_labels,test_images,test_labels):

    network = models.Sequential()
    network.add(layers.Dense({{choice([256,512,1024])}}, activation='relu', input_shape=(28 * 28,)))
    network.add(layers.Dense(10, activation='softmax'))
    network.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
    network.fit(train_images,
                train_labels,
                validation_split=0.33,
                epochs=5,
                batch_size=128)

    score,acc = network.evaluate(train_images,train_labels,verbose=0)
    print('Test accuracy:',acc)
    out={'loss':-acc,'score':score,'status':STATUS_OK}
    return out

if __name__ == '__main__':
    best_run, best_model = optim.minimize(model=create_model,
                                          data=data,
                                          algo=tpe.suggest,
                                          max_evals=1,
                                          trials=Trials())
    x_train, y_train, x_test, y_test = data()
    # mnist_model=create_model(x_train,y_train,x_test,y_test)
    print("Evaluation of best performing model:")
    print(best_model.evaluate(x_test, y_test,verbose=0))
    print("Best performing model chosen hyper-parameters:")
    print(best_run)

这是完整的回溯

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:/Users/anubhav/Desktop/Projects/chollet/keras_mnist_dense_hyperas.py", line 51, in <module>
    print(best_model.evaluate(x_test, y_test,verbose=0))
AttributeError: 'NoneType' object has no attribute 'evaluate'
EN

回答 2

Stack Overflow用户

发布于 2018-09-22 22:15:22

好的,您的optim.minimize函数似乎没有返回模型。

查看图书馆,我发现默认情况下best_model= None,如果您没有输入有效的trials,那么它将一直保持到最后。我在Keras之上没有太多的知识,所以hyperas在Trials()中所做的事情超出了我的知识范围。

检查这个函数,看看它会输出什么,或者它是否需要任何输入来生成输出等等。

祝好运。

票数 1
EN

Stack Overflow用户

发布于 2018-10-18 18:44:27

看起来,您正在create_model()中运行实验,然后丢弃模型。如果您返回模型,这可能解决您的问题。尝试:

代码语言:javascript
复制
out={'loss':-acc,'score':score,'status':STATUS_OK, 'model': network}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52461011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档