訓練データが4つしかないのに・・・ | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

ただひたすらエポック数を増やす作戦です

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import numpy as np

# 訓練データ
train = np.array([[0, 0],  # 0と1の組み合わせの行列(4x2)             
                  [0, 1],
                  [1, 0],
                  [1, 1]])
target = np.array([[0],     # 正解ラベル(4x1)
                  [1],
                  [1],
                  [0]])
# KerasのSequentialオブジェクト生成
model = Sequential()
# 第1層:隠れ層
model.add(
    Dense(units=3,               # 隠れ層のニューロン数:3
          input_dim=2,           # 入力層のニューロン数:2
          activation='sigmoid')) # 活性化関数:シグモイド
# 第2層:出力層
model.add(
    Dense(units=1,               # 出力層のニューロン数:1
          activation='sigmoid')) # 活性化関数:シグモイド
model.compile(
    loss='binary_crossentropy', # 0と1のみ誤差関数はバイナリ用
    optimizer=SGD(lr=0.1),      # 勾配降下法
)
# ニューラルネットワークの概要(サマリー)
print(model.summary())
model.fit(
    train,       
    label,       
    epochs=5000,  # 学習回数
    batch_size=4, # ミニバッチのサイズ
    verbose=1,    # 学習の進捗状況を出力
)
# predict_classes()で出力
# 0.5の閾値から0または1を取得

classes = model.predict_classes(train, batch_size=4)
# 実際に出力された値
prob = model.predict_proba(train, batch_size=4)
print('Output:')
print(classes)
print('Output Probability:')
print(prob)
 
Output:
[[0]
 [1]
 [1]
 [0]]
Output Probability:
[[0.02274431]
 [0.94424313]
 [0.933342  ]
 [0.09513296]]