TesnsorflowとKerasを用いてじゃんけんを学習する。
import pickle
import numpy as np
hands={ 'グー':0, 'チョキ':1, 'パー':2 }
results=['あいこ', '負け', '勝ち' ]
judge=lambda a,b: (a-b+3)%3
import random
random_hand=lambda:random.randint(0,2)
x_items=[]
y_items=[]
for i in range(3000):
a=random_hand()
b=random_hand()
result=judge(a,b)
x_items.append([a,b])
y_items.append(result)
print(x_items)
print(y_items)
x_train=x_items[0:2000]
y_train=y_items[0:2000]
x_test=x_items[2000:]
y_test=y_items[2000:]
items=[[x_train,y_train],[x_test,y_test]]
with open("janken-data.pkl","wb") as fp:
pickle.dump(items,fp)import tensorflow as tf
import numpy as np
import pickle
with open("janken-data.pkl","rb") as fp:
data=pickle.load(fp)
(x_train,y_train),(x_test,y_test)=data
model=tf.keras.models.Sequential(
[tf.keras.layers.Dense(30,activation='relu',input_dim=2),
tf.keras.layers.Dense(3,activation='softmax')])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
result=model.fit(x_train,y_train,epochs=20)
score=model.evaluate(x_test,y_test,verbose=2)
def janken(a,b):
hands={ 'グー':0, 'チョキ':1, 'パー':2 }
results=['あいこ', '負け', '勝ち' ]
x=np.array([[hands[a],hands[b]]])
r=model.predict(x)
print(r)
print(a,b,'→',results[r[0].argmax()])
janken('グー','グー')
janken('チョキ','パー')
janken('パー','チョキ')import tensorflow as tf
import numpy as np
import pickle
with open("janken-data.pkl","rb") as fp:
data=pickle.load(fp)
(x_train,y_train),(x_test,y_test)=data
model=tf.keras.models.Sequential(
[tf.keras.layers.Dense(30,activation='relu',input_dim=2),
tf.keras.layers.Dense(3,activation='softmax')])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 追加その1:モデルの表示
model.summary()
tf.keras.utils.plot_model(model,to_file='janken-model.png')
result=model.fit(x_train,y_train,epochs=20)
score=model.evaluate(x_test,y_test,verbose=2)
def janken(a,b):
hands={ 'グー':0, 'チョキ':1, 'パー':2 }
results=['あいこ', '負け', '勝ち' ]
x=np.array([[hands[a],hands[b]]])
r=model.predict(x)
print(r)
print(a,b,'→',results[r[0].argmax()])
janken('グー','グー')
janken('チョキ','パー')
janken('パー','チョキ')
# 追加その2:学習の様子を視覚化
import matplotlib.pyplot as plt
hist=result.history
plt.plot(range(1,21),hist['accuracy'],label="training")
plt.plot(range(1,21),hist['loss'],label='loss')
plt.xlabel("Epochs=20")
plt.ylabel('Accuracy')
plt.legend()
plt.show()
#print("-----")
#r=model.predict([[0,2],[1,1]])
#print(r)
# 追加その3:対話的じゃんけん
while True:
print("あなたの手は?",end="")
h1=input()
if h1=="q": break
print("相手の手は?",end="")
h2=input()
x=np.array([[hands[h1],hands[h2]]])
# [[0,2]] ← グーとパーの場合
r=model.predict(x)
print(r)
print(h1,h2,'→',results[r[0].argmax()]) import pandas as pd
iris_data=pd.read_csv("iris.csv",encoding="utf-8")
y_labels=iris_data.loc[:,"Name"]
x_data=iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
labels={
"Iris-setosa": [1,0,0],
"Iris-versicolor": [0,1,0],
"Iris-virginica": [0,0,1]
}
y_nums=list(map(lambda v:labels[v],y_labels))
print(y_nums)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x_data,y_nums,train_size=0.8)
import keras
from keras.models import Sequential
from keras.layers import Dense
model=Sequential()
model.add(Dense(10,activation='relu',input_shape=(4,)))
model.add(Dense(3,activation='softmax'))
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)
import pandas as pd
iris_data=pd.read_csv("iris.csv",encoding="utf-8")
y_labels=iris_data.loc[:,"Name"]
x_data=iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
labels={
"Iris-setosa": [1,0,0],
"Iris-versicolor": [0,1,0],
"Iris-virginica": [0,0,1]
}
y_nums=list(map(lambda v:labels[v],y_labels))
print(y_nums)
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x_data,y_nums,train_size=0.8)
import keras
from keras.models import Sequential
from keras.layers import Dense
model=Sequential()
model.add(Dense(10,activation='relu',input_shape=(4,)))
model.add(Dense(3,activation='softmax'))
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy']
)