即使使用顺序模型,我也会收到“AttributeError:'Model' object has no attribute 'predict_classes'”

Posted

技术标签:

【中文标题】即使使用顺序模型,我也会收到“AttributeError:\'Model\' object has no attribute \'predict_classes\'”【英文标题】:Even when using Sequential model, I am getting "AttributeError: 'Model' object has no attribute 'predict_classes' "即使使用顺序模型,我也会收到“AttributeError:'Model' object has no attribute 'predict_classes'” 【发布时间】:2021-05-26 10:36:06 【问题描述】:

正如this 问题中提到的,我们需要顺序模型才能使用.predict_classes 我正在使用这个模型,但仍然得到

AttributeError: 'function' object has no attribute 'predict_classes' 

错误。我正在使用以下代码

def Build_Model_RNN_Text(word_index, embeddings_index, nclasses,  MAX_SEQUENCE_LENGTH=500, EMBEDDING_DIM=50, dropout=0.5):
 
    model = Sequential()
    hidden_layer = 3
    gru_node = 32    
    embedding_matrix = np.random.random((len(word_index) + 1, EMBEDDING_DIM))
    for word, i in word_index.items():
        embedding_vector = embeddings_index.get(word)
        if embedding_vector is not None:
            # words not found in embedding index will be all-zeros.
            if len(embedding_matrix[i]) != len(embedding_vector):
                print("could not broadcast input array from shape", str(len(embedding_matrix[i])),
                      "into shape", str(len(embedding_vector)), " Please make sure your"
                                                                " EMBEDDING_DIM is equal to embedding_vector file ,GloVe,")
                exit(1)
            embedding_matrix[i] = embedding_vector
    model.add(Embedding(len(word_index) + 1,
                                EMBEDDING_DIM,
                                weights=[embedding_matrix],
                                input_length=MAX_SEQUENCE_LENGTH,
                                trainable=True))
    print(gru_node)
    for i in range(0,hidden_layer):
        model.add(GRU(gru_node,return_sequences=True, recurrent_dropout=0.2))
        model.add(Dropout(dropout))
    model.add(GRU(gru_node, recurrent_dropout=0.2))
    model.add(Dropout(dropout))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(nclasses, activation='softmax'))
    model.compile(loss='sparse_categorical_crossentropy',
                      optimizer='adam',
                      metrics=['accuracy'])
    return model

即使使用.predict,而不是.predict_classes,我也会遇到同样的错误

编辑:我正在使用以下代码调用方法

predicted = Build_Model_RNN_Text.predict_classes(X_test_Glove)

【问题讨论】:

我看不到您尝试调用 .predict_classes 的位置,但从错误中可以明显看出您正尝试在 function 对象上这样做。请提供您遇到此错误时正在运行的代码。好像是语法错误。 我已经添加了调用方法的代码,请看一下 完全符合我的预期。你没有调用你的函数Build_Model_RNN_Text,这意味着它没有返回任何东西。您需要调用您的函数以获取其输出。 你能告诉我我怎么不在这里调用函数吗?我无法理解,因为我以同样的方式调用了其他模型 您在 Python 中使用() 调用函数,例如my_function() 【参考方案1】:

这个错误是由于你没有调用你的函数来获取它的输出。干脆做

predicted = Build_Model_RNN_Text(<<args>>).predict_classes(X_test_Glove)

您需要将&lt;&lt;args&gt;&gt; 替换为您的函数所需的参数。似乎您原本打算将 Build_Model_RNN_Text 改为 class

无论哪种方式,由于您没有提供word_indexembeddings_indexnclasses 所需的参数,您究竟希望它如何工作...

【讨论】:

以上是关于即使使用顺序模型,我也会收到“AttributeError:'Model' object has no attribute 'predict_classes'”的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使我使用 sparse_categorical_crossentrpy,我也会收到“收到超出 [0, 1) 有效范围的标签值 6”?

即使我只有一个参数,我也会收到“包装承诺不可迭代错误”

为啥即使在包含 math.h 并使用 -lm 链接到数学库之后我也会收到“未定义的符号:.sqrtf”

为啥即使实现了 Iterable,我也会收到 foreach 编译器错误?

即使代码在 try/catch 块中,我也会不断收到异常 [关闭]

即使在添加 ojdbc14.jar 文件后,我也会收到 HTTP 错误 500