[파이톤] 신경망을 통해 소라 아가씨의 가위바위보를 예측합니다.
카탈로그
개시하다
나는 방금'LSTM의 소라 아가씨에 대한 가위바위보 예측'이라는 제목의 글을 썼는데 바로 다른 모델을 시도했기 때문에 결과를 썼다.
소스 코드 import numpy as np
import pandas as pd
from keras.layers import Activation, Dense
from keras.models import Sequential
data_file = 'サザエさんじゃんけん.tsv'
res_file = 'small_neural'
def shuffle_lists(list1, list2):
'''リストをまとめてシャッフル'''
seed = np.random.randint(0, 1000)
np.random.seed(seed)
np.random.shuffle(list1)
np.random.seed(seed)
np.random.shuffle(list2)
def get_data():
'''データ作成'''
df = pd.read_csv(data_file, sep='\t',
usecols=['rock', 'scissors', 'paper'])
X_data = [[0, 0, 0]]
for row in df.values:
data = [d + 1 for d in X_data[-1]]
data[row.argmax()] = 0
X_data.append(data)
# numpy.array型に変換
# X_data = np.array(X_data[:-1])
# y_data = np.array(df.values)
X_data = np.array(X_data[-501:-1])
y_data = np.array(df.values[-500:])
last_data = np.array(X_data[-1:])
# 正規化
X_data = X_data.astype(np.float32)
last_data = last_data.astype(np.float32)
X_data /= 255.0
last_data /= 255.0
# シャッフル
shuffle_lists(X_data, y_data)
return X_data, y_data, last_data
def get_model():
'''モデルを構築'''
model = Sequential()
model.add(Dense(32, input_shape=(3,)))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
def pred(model, X, Y, label):
'''正解率 出力'''
predictX = model.predict(X)
correct = 0
for real, predict in zip(Y, predictX):
if real.argmax() == predict.argmax():
correct += 1
correct = correct / len(Y)
print(label + '正解率 : %02.2f ' % correct)
def main():
X_data, y_data, last_data = get_data()
# データ分割
mid = int(len(y_data) * 0.7)
train_X, train_y = X_data[:mid], y_data[:mid]
test_X, test_y = X_data[mid:], y_data[mid:]
# 学習
model = get_model()
hist = model.fit(train_X, train_y, epochs=1000, batch_size=8,
validation_data=(test_X, test_y))
# 正解率出力
pred(model, train_X, train_y, 'train')
pred(model, test_X, test_y, 'test')
# 来週の手
next_hand = model.predict(last_data)
print(next_hand[0])
hands = ['グー', 'チョキ', 'パー']
print('来週の手 : ' + hands[next_hand[0].argmax()])
if __name__ == '__main__':
main()
간단히 설명하다
이번에는 간단한 신경 모형으로 공부를 해 보았다.
데이터는 각자의 손이 나오지 않은 횟수다.
소라 가위바위보.tsv는 다음과 같은 형식으로 데이터를 총결하였다.
소라 가위바위보.tsvyear month day rock scissors paper
1991 11 10 0 1 0
1991 11 17 1 0 0
1991 11 24 1 0 0
...
그리고 데이터를 다음과 같이 성형한다[[0 0 0] <- 最初はすべて0
[1 0 1] <- チョキが出たので1番目を0に。ほかは+1
[0 1 2] <- グーが出たので0番目を0に。ほかは+1
...
데이터를 모두 사용하면 왠지 정밀도가 떨어지기 때문에 최근의 100회만 사용했다.
결실
매개 변수와 층수를 바꾸어 보아라. 가장 좋은 결과는 바로 이것이다.
import numpy as np
import pandas as pd
from keras.layers import Activation, Dense
from keras.models import Sequential
data_file = 'サザエさんじゃんけん.tsv'
res_file = 'small_neural'
def shuffle_lists(list1, list2):
'''リストをまとめてシャッフル'''
seed = np.random.randint(0, 1000)
np.random.seed(seed)
np.random.shuffle(list1)
np.random.seed(seed)
np.random.shuffle(list2)
def get_data():
'''データ作成'''
df = pd.read_csv(data_file, sep='\t',
usecols=['rock', 'scissors', 'paper'])
X_data = [[0, 0, 0]]
for row in df.values:
data = [d + 1 for d in X_data[-1]]
data[row.argmax()] = 0
X_data.append(data)
# numpy.array型に変換
# X_data = np.array(X_data[:-1])
# y_data = np.array(df.values)
X_data = np.array(X_data[-501:-1])
y_data = np.array(df.values[-500:])
last_data = np.array(X_data[-1:])
# 正規化
X_data = X_data.astype(np.float32)
last_data = last_data.astype(np.float32)
X_data /= 255.0
last_data /= 255.0
# シャッフル
shuffle_lists(X_data, y_data)
return X_data, y_data, last_data
def get_model():
'''モデルを構築'''
model = Sequential()
model.add(Dense(32, input_shape=(3,)))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(3))
model.add(Activation('softmax'))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
def pred(model, X, Y, label):
'''正解率 出力'''
predictX = model.predict(X)
correct = 0
for real, predict in zip(Y, predictX):
if real.argmax() == predict.argmax():
correct += 1
correct = correct / len(Y)
print(label + '正解率 : %02.2f ' % correct)
def main():
X_data, y_data, last_data = get_data()
# データ分割
mid = int(len(y_data) * 0.7)
train_X, train_y = X_data[:mid], y_data[:mid]
test_X, test_y = X_data[mid:], y_data[mid:]
# 学習
model = get_model()
hist = model.fit(train_X, train_y, epochs=1000, batch_size=8,
validation_data=(test_X, test_y))
# 正解率出力
pred(model, train_X, train_y, 'train')
pred(model, test_X, test_y, 'test')
# 来週の手
next_hand = model.predict(last_data)
print(next_hand[0])
hands = ['グー', 'チョキ', 'パー']
print('来週の手 : ' + hands[next_hand[0].argmax()])
if __name__ == '__main__':
main()
간단히 설명하다
이번에는 간단한 신경 모형으로 공부를 해 보았다.
데이터는 각자의 손이 나오지 않은 횟수다.
소라 가위바위보.tsv는 다음과 같은 형식으로 데이터를 총결하였다.
소라 가위바위보.tsvyear month day rock scissors paper
1991 11 10 0 1 0
1991 11 17 1 0 0
1991 11 24 1 0 0
...
그리고 데이터를 다음과 같이 성형한다[[0 0 0] <- 最初はすべて0
[1 0 1] <- チョキが出たので1番目を0に。ほかは+1
[0 1 2] <- グーが出たので0番目を0に。ほかは+1
...
데이터를 모두 사용하면 왠지 정밀도가 떨어지기 때문에 최근의 100회만 사용했다.
결실
매개 변수와 층수를 바꾸어 보아라. 가장 좋은 결과는 바로 이것이다.
year month day rock scissors paper
1991 11 10 0 1 0
1991 11 17 1 0 0
1991 11 24 1 0 0
...
[[0 0 0] <- 最初はすべて0
[1 0 1] <- チョキが出たので1番目を0に。ほかは+1
[0 1 2] <- グーが出たので0番目を0に。ほかは+1
...
매개 변수와 층수를 바꾸어 보아라. 가장 좋은 결과는 바로 이것이다.
train正解率 : 0.61
test正解率 : 0.58
[0.17965864 0.07733747 0.7430039 ]
来週の手 : パー
최후
정밀도와LSTM 시는 큰 변화가 없지만 다음 주 손은'파라'가 된다.다만, 매개 변수를 만지작거리면 때때로'돌'이 나오기도 한다.어느 것을 믿으면 좋을까 orz)
사용한 내력에 따라 개선할 여지가 있다고 생각합니다. 꼭 도전해 주십시오.
어쨌든 이번 주 소라 아가씨가 기대됩니다.
추기
(18/08/19)
아쉽게도 이번에는 없어요.(정답은'돌')
참조 링크
LSTM의 소라 아가씨에 대한 가위바위보 예측
Reference
이 문제에 관하여([파이톤] 신경망을 통해 소라 아가씨의 가위바위보를 예측합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/derodero24/items/65d710960c6fbeda16ef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(18/08/19)
아쉽게도 이번에는 없어요.(정답은'돌')
참조 링크
LSTM의 소라 아가씨에 대한 가위바위보 예측
Reference
이 문제에 관하여([파이톤] 신경망을 통해 소라 아가씨의 가위바위보를 예측합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/derodero24/items/65d710960c6fbeda16ef
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([파이톤] 신경망을 통해 소라 아가씨의 가위바위보를 예측합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/derodero24/items/65d710960c6fbeda16ef텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)