Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Keras 機械学習 (Machine Learning)

Kerasで「AttributeError: ‘Sequential’ object has no attribute ‘XXX’」エラー原因・対処(+predict_classes関数やpredict_proba関数の解説)

投稿日:2022年9月24日 更新日:

 

<目次>

(1) Kerasで「AttributeError: ‘Sequential’ object has no attribute ‘XXX’」エラー原因・対処(+predict_classes関数やpredict_proba関数の解説)
 (1-1) 事象
 (1-2) 原因
 (1-3) 対策
 (1-4) 参考①:predict_classes()関数について
 (1-5) 参考②:predict_proba()関数について
 (1-6) 参考③:対処の背景

(1) Kerasで「AttributeError: ‘Sequential’ object has no attribute ‘XXX’」エラー原因・対処(+predict_classes関数やpredict_proba関数の解説)

(1-1) 事象

Kerasでロジスティクス回帰を実装した際、実行結果に下記のエラーが出現。
 
(エラー例1)
Traceback (most recent call last):
  File "c:\\ xxxxxx\\xxxxx.py", line NN, in XXXXX
    classes = model.predict_classes(X,batch_size=1)
AttributeError: 'Sequential' object has no attribute 'predict_classes'
(エラー例2)
Traceback (most recent call last):
  File "c:\\ xxxxxx\\xxxxx.py", line NN, in XXXXX
    prob = model.predict_proba(X,batch_size=1)
AttributeError: 'Sequential' object has no attribute 'predict_proba'
(図111①)
(図111②)

(1-2) 原因

・エラーの原因となっている「predict_classes」や「」関数がTensorFlow 2.6以降では削除された事が原因。
⇒ご自身のTensorFlowのバージョン下記のコードで確認できます。
(バージョン確認コード)

import tensorflow as tf

def main():
    print(tf.__version__)
(図121)

(1-3) 対策

コードを以下のように修正する事で、エラーを回避できます。

●「predict_classes」の対策

 
(Before)
    classes = model.predict_classes(X,batch_size=1)
 
(After)
・パターン①:多クラスの分類(multi-class classification)を行う場合
⇒(例)ソフトマックス関数など
    classes = np.argmax(model.predict(X),axis=1)
 
または
・パターン②:二項分類(Binary Classification)を行う場合
⇒(例)シグモイド関数など
    classes = (model.predict(X) > 0.5).astype("int32")

●「predict_proba」の対策

 
(Before)
    prob = model.predict_proba(X,batch_size=1)
(After)
    prob = model.predict(X,batch_size=1)
(図131)修正後のコードで実行

(1-4) 参考①:predict_classes()関数について

モデルに対して、引数で与えた「入力データ(=電気信号)」(例:2次元配列「X」)に対する、分類が完了しているか?の情報を返却する関数。
 
例えば「OR回路」を「ロジスティクス回帰」のモデルで学習させる場合の正解値は
t = np.array([[0],[1],[1],[1]])
となりますが、実際に学習した結果はepoch=51の場合は1つ目のデータに対するyの計算値「0.5082121」>0.5であるため、誤った発火結果になってしまいます。そのためFalse(誤分類)となっています。
classified:  [[False]
 [ True]
 [ True]
 [ True]]
probability:  [[0.5082121]
 [0.7830747]
 [0.8921545]
 [0.9665527]]
(図141)
しかし、epoch=53の場合は1つ目のデータに対するyの計算値「0.45884573」<0.5であるため、正しい発火結果になってしまいます。そのためTrue(正分類)となっています。
classified:  [[True]
 [ True]
 [ True]
 [ True]]
probability:  [[0. 45884573]
 [0.7830747]
 [0.8921545]
 [0.9665527]]
(図142)

(1-5) 参考②:predict_proba()関数について

モデルに対して、引数で与えた「入力データ(=電気信号)」(例:2次元配列「X」)に対する、「ネットワークの出力y」の値を計算する関数。
 
例えば「OR回路」を「ロジスティクス回帰」のモデルで学習(★)させる場合の正解値は
t = np.array([[0],[1],[1],[1]])
 
となりますが、実際に学習した結果はepoch=500の場合は
y = [[0.10048033] [0.95947146] [0.96101344] [0.9998086 ]]
である、という事が分かります。
(※かなり正解値に近い値ではあるものの、まだ少しずれている状態)

(1-6) 参考③:対処の背景

Tensorflow 2.5より前のバージョンを使用した場合は、次のようなエラーが出ます。
 
(例)predict_classを使用した場合
C:\\XXXXXXX\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\sequential.py:455: 
UserWarning: model.predict_classes() is deprecated and will be removed after 2021-01->01. 
Please use instead:
* np.argmax(model.predict(x), axis=-1), if your >model does multi-class classification (e.g. if it uses a softmax last->layer activation).
* (model.predict(x) > 0.5).astype("int32"), if your >model does binary classification (e.g. if it uses a sigmoid last-layer >activation). warnings.warn('model.predict_classes() is deprecated and '
 
(※読みやすいよう、改行入れています)
 
この文章に記載の通り「model.predict_class()」は非推奨となり、代わりとして以下を使うように指示が出ており、それに従った対応になります。
 
・①多クラスの分類(multi-class classification)を行う場合
⇒ np.argmax(model.predict(x), axis=-1)
 
・②二項分類(Binary Classification)を行う場合
⇒ (model.predict(x) > 0.5).astype(“int32”)

Adsense審査用広告コード


Adsense審査用広告コード


-Keras, 機械学習 (Machine Learning)

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Tensorflowにおけるplaceholderとは?v2.0以降での置き換え

  <目次> (1) Tensorflowにおけるplaceholderとは?v2.0以降での置き換え  (1-1) 「placeholder」とは  (1-2) サンプルプログラム  (1 …

no image

最尤推定の計算を正規分布で行った例をご紹介

  <目次> (1) 最尤推定の計算を正規分布で行った例をご紹介  (1-1) 最尤推定とは?  (1-2) 最尤推定の計算の流れ  (1-3) STEP1:分布の種類を仮定(例:正規分布、 …

no image

確率と尤度の違いとは?概念や数式なども交えて比較紹介

  <目次> (1) 確率と尤度の違いとは?概念や数式なども交えて比較紹介  (1-1) 確率:「パラメータ」からデータの「確率」を算出した値?  (1-2) 尤度:「データ」からパラメータ …

ディープラーニングのロジスティクス回帰をPythonで実装した例をご紹介

  <目次> (1) ディープラーニングのロジスティック回帰をPythonで実装した例をご紹介  (1-1) 実装のフロー  (1-2) 実装例 (1) ディープラーニングのロジスティック回 …

no image

AzureのMachine Learning(機械学習)の始め方

  <目次> (1) AzureのMachine Learning(機械学習)の始め方  (1-0) やりたいこと  (1-1) STEP1:(事前準備)ワークスペースの作成  (1-2) …

  • English (United States)
  • 日本語
Top