ただひたすらエポック数を増やす作戦です
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import numpy as np
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')) # 活性化関数:シグモイド
model.add(
Dense(units=3, # 隠れ層のニューロン数:3
input_dim=2, # 入力層のニューロン数:2
activation='sigmoid')) # 活性化関数:シグモイド
# 第2層:出力層
model.add(
Dense(units=1, # 出力層のニューロン数:1
activation='sigmoid')) # 活性化関数:シグモイド
model.add(
Dense(units=1, # 出力層のニューロン数:1
activation='sigmoid')) # 活性化関数:シグモイド
model.compile(
loss='binary_crossentropy', # 0と1のみ誤差関数はバイナリ用
optimizer=SGD(lr=0.1), # 勾配降下法
)
loss='binary_crossentropy', # 0と1のみ誤差関数はバイナリ用
optimizer=SGD(lr=0.1), # 勾配降下法
)
# ニューラルネットワークの概要(サマリー)
print(model.summary())
print(model.summary())
model.fit(
train,
label,
epochs=5000, # 学習回数
batch_size=4, # ミニバッチのサイズ
verbose=1, # 学習の進捗状況を出力
)
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)
# 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)
print(classes)
print('Output Probability:')
print(prob)
Output:
[[0]
[1]
[1]
[0]]
Output Probability:
[[0.02274431]
[0.94424313]
[0.933342 ]
[0.09513296]]
[[0]
[1]
[1]
[0]]
Output Probability:
[[0.02274431]
[0.94424313]
[0.933342 ]
[0.09513296]]