목차
1. 삼목게임 학습 ------------------------------- 1
- 서론 (문제설명) ------------------------------ 1
- 본론 (코드내용 설명) ------------------------ 2
- 실험결과 (화면 덤프 및 결과 분석 설명) - 11
2. 부록 ----------------------------------------- 13
- 서론 (문제설명) ------------------------------ 1
- 본론 (코드내용 설명) ------------------------ 2
- 실험결과 (화면 덤프 및 결과 분석 설명) - 11
2. 부록 ----------------------------------------- 13
본문내용
값이 줄어 0에 가까워지고, accuracy값이 늘어 1에 가까워졌음을 확인한다.
학습 과정에서의 loss 값 변화를 그래프로 확인한다.
모델이 2층 신경망(2뉴런 출력층)임을 확인한다.
훈련 데이터의 loss: 0.0014, accuracy: 0.9986이고,
테스트 데이터의 loss: 0.214, accuracy: 0.9792 임을 확인한다.
마지막으로 훈련데이터를 통해 계산한 컨퓨전 행렬 C를 확인한다.
텐서보드에서 확인하기 위해 명령창에 tensorboard logdir c:\\tmp\\logs\\project를 입력한다.
http://localhost:6006 에 들어가서 확인한다.
텐서보드에서 정확도, 손실에 대한 그래프와 모델의 그래프 구조를 확인한다.
2. 부록
[1] 삼목게임 소스 코드
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def load_tictactoe(shuffle=False):
label={\'o\':0, \'x\':1, \'b\':2}
result = {\'true\':1, \'false\':0}
data = np.loadtxt(\"tic-tac-toe.csv\", skiprows=1, delimiter=\',\',
converters={0: lambda name: label[name.decode()],
1: lambda name: label[name.decode()],
2: lambda name: label[name.decode()],
3: lambda name: label[name.decode()],
4: lambda name: label[name.decode()],
5: lambda name: label[name.decode()],
6: lambda name: label[name.decode()],
7: lambda name: label[name.decode()],
8: lambda name: label[name.decode()],
9: lambda resultname: result[resultname.decode()]})
if shuffle:
np.random.shuffle(data)
return data
def train_test_data_set(tictactoe_data, test_rate=0.25): # train: 0.75, test: 0.25
n = int(tictactoe_data.shape[0]*(1-test_rate))
x_train = tictactoe_data[:n,:-1]
y_train = tictactoe_data[:n, -1]
x_test = tictactoe_data[n:,:-1]
y_test = tictactoe_data[n:,-1]
return (x_train, y_train), (x_test, y_test)
tictactoe_data = load_tictactoe(shuffle=True)
(x_train, y_train), (x_test, y_test) = train_test_data_set(tictactoe_data, test_rate=0.25)
print(\"x_train.shape:\", x_train.shape)
print(\"y_train.shape:\", y_train.shape)
print(\"x_test.shape:\", x_test.shape)
print(\"y_test.shape:\", y_test.shape)
# one-hot encoding: \'mse\', \'categorical_crossentropy\'
y_train = tf.keras.utils.to_categorical(y_train)
y_test = tf.keras.utils.to_categorical(y_test)
print(\"y_train=\", y_train)
print(\"y_test=\", y_test)
n = 15 # number of neurons in a hidden layer 은닉층의 뉴런 갯수
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units=n, input_dim=9, activation=\'sigmoid\')) # 입력 9개
model.add(tf.keras.layers.Dense(units=2, activation=\'softmax\')) # 출력 2개
model.summary()
opt = tf.keras.optimizers.RMSprop(learning_rate=0.1)
model.compile(optimizer=opt, loss= \'MSE\', metrics=[\'accuracy\'])
import os
path = \"C:/tmp/logs/\"
if not os.path.isdir(path):
os.mkdir(path)
logdir = path + \"project\"
callback = tf.keras.callbacks.TensorBoard(log_dir=logdir, update_freq=\'epoch\',
histogram_freq=2, write_images=True)
ret = model.fit(x_train, y_train, epochs=100, verbose=2, callbacks=[callback])
print(\"len(model.layers):\", len(model.layers))
loss = ret.history[\'loss\']
plt.plot(loss)
plt.xlabel(\'epochs\')
plt.ylabel(\'loss\')
plt.show()
train_loss, train_acc = model.evaluate(x_train, y_train, verbose=2)
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
y_pred = model.predict(x_train)
y_label = np.argmax(y_pred, axis = 1)
C = tf.math.confusion_matrix(np.argmax(y_train, axis = 1), y_label)
print(\"confusion_matrix(C):\", C)
학습 과정에서의 loss 값 변화를 그래프로 확인한다.
모델이 2층 신경망(2뉴런 출력층)임을 확인한다.
훈련 데이터의 loss: 0.0014, accuracy: 0.9986이고,
테스트 데이터의 loss: 0.214, accuracy: 0.9792 임을 확인한다.
마지막으로 훈련데이터를 통해 계산한 컨퓨전 행렬 C를 확인한다.
텐서보드에서 확인하기 위해 명령창에 tensorboard logdir c:\\tmp\\logs\\project를 입력한다.
http://localhost:6006 에 들어가서 확인한다.
텐서보드에서 정확도, 손실에 대한 그래프와 모델의 그래프 구조를 확인한다.
2. 부록
[1] 삼목게임 소스 코드
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def load_tictactoe(shuffle=False):
label={\'o\':0, \'x\':1, \'b\':2}
result = {\'true\':1, \'false\':0}
data = np.loadtxt(\"tic-tac-toe.csv\", skiprows=1, delimiter=\',\',
converters={0: lambda name: label[name.decode()],
1: lambda name: label[name.decode()],
2: lambda name: label[name.decode()],
3: lambda name: label[name.decode()],
4: lambda name: label[name.decode()],
5: lambda name: label[name.decode()],
6: lambda name: label[name.decode()],
7: lambda name: label[name.decode()],
8: lambda name: label[name.decode()],
9: lambda resultname: result[resultname.decode()]})
if shuffle:
np.random.shuffle(data)
return data
def train_test_data_set(tictactoe_data, test_rate=0.25): # train: 0.75, test: 0.25
n = int(tictactoe_data.shape[0]*(1-test_rate))
x_train = tictactoe_data[:n,:-1]
y_train = tictactoe_data[:n, -1]
x_test = tictactoe_data[n:,:-1]
y_test = tictactoe_data[n:,-1]
return (x_train, y_train), (x_test, y_test)
tictactoe_data = load_tictactoe(shuffle=True)
(x_train, y_train), (x_test, y_test) = train_test_data_set(tictactoe_data, test_rate=0.25)
print(\"x_train.shape:\", x_train.shape)
print(\"y_train.shape:\", y_train.shape)
print(\"x_test.shape:\", x_test.shape)
print(\"y_test.shape:\", y_test.shape)
# one-hot encoding: \'mse\', \'categorical_crossentropy\'
y_train = tf.keras.utils.to_categorical(y_train)
y_test = tf.keras.utils.to_categorical(y_test)
print(\"y_train=\", y_train)
print(\"y_test=\", y_test)
n = 15 # number of neurons in a hidden layer 은닉층의 뉴런 갯수
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(units=n, input_dim=9, activation=\'sigmoid\')) # 입력 9개
model.add(tf.keras.layers.Dense(units=2, activation=\'softmax\')) # 출력 2개
model.summary()
opt = tf.keras.optimizers.RMSprop(learning_rate=0.1)
model.compile(optimizer=opt, loss= \'MSE\', metrics=[\'accuracy\'])
import os
path = \"C:/tmp/logs/\"
if not os.path.isdir(path):
os.mkdir(path)
logdir = path + \"project\"
callback = tf.keras.callbacks.TensorBoard(log_dir=logdir, update_freq=\'epoch\',
histogram_freq=2, write_images=True)
ret = model.fit(x_train, y_train, epochs=100, verbose=2, callbacks=[callback])
print(\"len(model.layers):\", len(model.layers))
loss = ret.history[\'loss\']
plt.plot(loss)
plt.xlabel(\'epochs\')
plt.ylabel(\'loss\')
plt.show()
train_loss, train_acc = model.evaluate(x_train, y_train, verbose=2)
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
y_pred = model.predict(x_train)
y_label = np.argmax(y_pred, axis = 1)
C = tf.math.confusion_matrix(np.argmax(y_train, axis = 1), y_label)
print(\"confusion_matrix(C):\", C)
추천자료
- 인공지능이란 무엇인가?
- 인공지능이란 무엇인가?
- [인공지능][인공지능의 개념][인공지능의 역사][인공지능의 연구분야][인공지능의 연구현황]...
- [인공지능][인공지능 개념][인공지능 역사][인공지능 분야][인공지능 문제풀이방법][인공지능...
- (인간과과학 공통) 인공지능의 발달이 인류사회를 어떻게 변화시킬 수 있을지 생각해 보시오 ...
- 인간과과학 : [인간과 과학] 인공지능의 발달이 인류사회에 어떤 영향을 미치고, 사회를 어...
- 2018년 2학기 인공지능 기말시험 핵심체크
- [세계의 역사] 4차 산업혁명과 관련된 10건 이상의 언론 기사들을 참조하여 4차 산업혁명에 ...
- 2019년 2학기 인공지능 기말시험 핵심체크
소개글