Rainbow Engine

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

IT技術 (Technology)

Kerasでロジスティクス回帰を実装した例をご紹介

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

 

<目次>

(1) Kerasでロジスティクス回帰を実装した例をご紹介
 (1-1) 実装のフローとポイント
 (1-2) 実装例

(1) Kerasでロジスティクス回帰を実装した例をご紹介

ロジスティクス回帰を実装する際のポイント(実装のステップ)と、Kerasで実装したサンプルコードをご紹介します。
※ロジスティクス回帰とは?について知りたい方はこちらもご覧ください。
(参考)ロジスティクス回帰とは?Excelで計算する方法もご紹介

(1-1) 実装のフローとポイント

●STEP1:モデルの定義

・入力の電気信号xの初期化
・正解値tの定義
・シグモイド関数:y = σ(wx + b)の定義
 
(補足①)
Kerasの場合、以下の項目は「Sequentialクラスのインスタンス生成時に、引数で指定するDenseインスタンスやActivationインスタンス」の中に内包されているため、単独の変数としては定義していない。
 
・重みwの定義
・バイアスbの定義
 
(補足②)
Kerasの場合、以下の項目は「Sequentialクラスの中のcompile関数」の中に内包されているため、単独の変数としては定義していない。
 
・重みwの勾配(∂E(w,b)/∂w)の定義
・バイアスbの勾配(∂E(w,b)/∂b)の定義
・学習率:ηの定義

●STEP2:誤差関数の定義

・交差エントロピー誤差関数:E(w,b) = -Σ[n=1…N]{tn*log(yn) + (1-tn)*log(1-yn)}
⇒今回は不要(確率的勾配降下法を使うため、誤差関数Eは計算不要)

●STEP3:最適化手法の定義(例:勾配降下法)

⇒Kerasの場合、確率的勾配降下法。よって、通常の実装で行っていた下記の様な計算の記述は不要。
(不要)↓Kerasでは明示的にこれらの処理を記述する必要なし
・シグモイド関数:y = σ(wx + b)の計算
・重みwの勾配(∂E(w,b)/∂w)の計算
・バイアスbの勾配(∂E(w,b)/∂b)の計算
・重みwの再計算
・バイアスbの再計算
 

●STEP4:セッションの初期化

⇒今回は不要(TensorFlow v2以降はSessionを使用しないため)

●STEP5:学習

⇒fit関数でエポックを指定して実行

(1-2) 実装例

(サンプルプログラム)
############################################
# ロジスティック回帰(Keras版)
# 2022/XX/XX 初版作成
# 2022/08/10 X,tを関数の引数として外出し
#
# ※numpy未導入の場合「pip install numpy」を実行
# ※keras未導入の場合「pip install tensorflow」を実行
############################################
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD

# 入力層xの次元
M = 2
# 出力層yの次元(クラス数)
K = 1
# Epoc数の定義
epocs = 300

def or_gate(X_arg,t_arg):
    ############################################
    # STEP1:モデルの定義
    ############################################

    # 入力の電気信号xの初期化
    X = X_arg
    # 正解値tの定義
    t = t_arg
    # 入力層 - 出力層の定義
    #  Dense(input_dim=2, units=1):入力が2次元、出力が1次元のネットワーク
    #   ⇒ w1*x1 + w2+x2 + bに相当
    #  Activation('sigmoid'):活性化関数として、シグモイド関数を指定
    #   ⇒ y = σ(wx + b)に相当
    model = Sequential([
        Dense(input_dim=M, units=K),
        Activation('sigmoid')
    ])

    # 別の記述方法:add関数でも記述可能
    #model = Sequential()
    #model.add(Dense(input_dim=2, units=1))
    #model.add(Activation('sigmoid'))

    ############################################
    # STEP2:誤差関数の定義
    ############################################
    # ⇒今回は不要
    # (確率的勾配降下法の最終式を使うため、誤差関数Eは計算不要)

    ############################################
    # STEP3:最適化手法の定義(例:確率的勾配降下法)
    ############################################

    # loss='binary_crossentropy'
    #  誤差関数の種類を指定。
    #  2値(発火する/しない)の交差エントロピー関数の計算をさせる。
    # SGD(lr=0.1)
    #  最適化の手法を指定している。「SGD」は確率的勾配降下法で「lr」はその学習率。
    #  それぞれ「Stochastic Gradient Descent」と「learning rate」の頭文字を取っている。
    model.compile(loss='binary_crossentropy',optimizer=SGD(lr=0.1))

    ############################################
    # STEP4:セッションの初期化
    ############################################
    # ⇒今回は不要
    # (TensorFlow v2以降はSessionを使用しないため)

    ############################################
    # STEP5:学習
    ############################################

    # 指定したエポック数、繰り返し学習を行う
    #  第1引数:Xは入力データ(入力の電気信号)
    #  第2引数:tは正解データ(出力の電気信号の正解値)
    #  第3引数:エポック(データ全体に対する反復回数)の数
    #  第4引数:ミニバッチ勾配降下法(N個の入力データをM個ずつのグループに分けて学習する際のMの値)
    model.fit(X,t,epochs=epocs,batch_size=1)

    ############################################
    # STEP6:学習結果の確認
    ############################################

    # 分類が正しい結果になっているか?(発火するかどうか?が正しい結果になっているか)
    classes = (model.predict(X,batch_size=1) > 0.5).astype("int32")
    # ネットワークの出力「y」の計算結果を取得
    prob = model.predict(X,batch_size=1)

    print("===================",classes)
    print("===================",t)

    print("*******************************")
    print("classified: ",t==classes)
    print("probability: ",prob)
    print("*******************************")

def main():

    # 入力の電気信号xの初期化
    X = np.array([[0,0],[0,1],[1,0],[1,1]])
    # 正解値tの定義([0., 1., 1., 1.])
    t = np.array([[0],[1],[1],[1]])
    or_gate(X,t)
    
if __name__ == "__main__":
    main()
(実行結果)
Epoch 1/300
4/4 [==============================] - 0s 2ms/step - loss: 0.6296
Epoch 2/300
4/4 [==============================] - 0s 2ms/step - loss: 0.5790
~中略~
Epoch 299/300
4/4 [==============================] - 0s 2ms/step - loss: 0.0762
Epoch 300/300
4/4 [==============================] - 0s 2ms/step - loss: 0.0759
*******************************
classified:  [[ True]
 [ True]
 [ True]
 [ True]]
probability:  [[0.15845212]
 [0.9381554 ]
 [0.9379867 ]
 [0.9991801 ]]
*******************************
(図121)

Adsense審査用広告コード


Adsense審査用広告コード


-IT技術 (Technology)

執筆者:


comment

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

関連記事

Anaplanのトレーニングの受講方法について

  <目次> (1) Anaplanのトレーニングの受講方法について  (1-1) 受講方法の概要  (1-2) Anaplan Communityの登録手順  (1-3) Anaplanの …

Interstage Application ServerにJavaのWebアプリ(Servlet)をデプロイする流れ

  <目次> (1) Interstage Application ServerにJavaのWebアプリ(Servlet)をデプロイする流れ  (1-1) STEP1:EARファイル/WAR …

Slackで匿名のメッセージや返信を送る方法

  <目次> (1) Slackで匿名のメッセージや返信を送る方法  (1-1) 概要  (1-2) STEP1:Anonymity Botの導入  (1-3) STEP2:匿名投稿のテスト …

Azure Machine Learningでエラー「Experiment name must be 1-256 characters」が発生した際の原因と対処方法について

  <目次> (1) Azure Machine Learningでエラー「Experiment name must be 1-256 characters」が発生した際の原因と対処方法につ …

RESTful APIとは?概要や6つの原則についてご紹介

  <目次> (1) RESTful APIとは?概要や6つの原則についてご紹介  (1-1) RESTful APIの概要  (1-2) RESTの6つの原則 (1) RESTful AP …

  • English (United States)
  • 日本語
Top