메뉴 건너뛰기

프로그래밍


아래는 이 집구석 주인장이 "딥러닝 실패사례 : 말 해 줄거라 생각했다" 의 제목으로 작성한 글에 실린 예제 코드입니다.

"밑바닥부터 시작하는 딥러닝" 서적에 실린 코드를 기반으로 작성하였습니다.

# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from two_layer_net import TwoLayerNet
import re
 
 
def deepLearn(gun_scores, naver_scores, train_size, batch_size):
    x_train = naver_scores[:train_size]
    t_train = gun_scores[:train_size]
 
    x_test = naver_scores[train_size:]
    t_test = gun_scores[train_size:]
 
    network = TwoLayerNet(input_size=2, hidden_size=10, output_size=5)
 
    # 하이퍼파라미터
    iters_num = 10000  # 반복 횟수를 적절히 설정한다.
    train_size = x_train.shape[0]
    learning_rate = 0.1
 
    train_loss_list = []
    train_acc_list = []
    test_acc_list = []
 
    # 1에폭당 반복 수
    iter_per_epoch = max(train_size / batch_size, 1)
 
    for i in range(iters_num):
        # 미니배치 획득
        batch_mask = np.random.choice(train_size, batch_size)
        x_batch = x_train[batch_mask]
        t_batch = t_train[batch_mask]
 
        # 기울기 계산
        #grad = network.numerical_gradient(x_batch, t_batch)
        grad = network.gradient(x_batch, t_batch)
 
        # 매개변수 갱신
        for key in ('W1', 'b1', 'W2', 'b2'):
            network.params[key] -= learning_rate * grad[key]
 
        # 학습 경과 기록
        loss = network.loss(x_batch, t_batch)
        train_loss_list.append(loss)
 
        # 1에폭당 정확도 계산
        if i % iter_per_epoch == 0:
            train_acc = network.accuracy(x_train, t_train)
            test_acc = network.accuracy(x_test, t_test)
            train_acc_list.append(train_acc)
            test_acc_list.append(test_acc)
            print("train acc, test acc | " + str(train_acc) + ", " + str(test_acc))
 
    x = np.arange(len(train_acc_list))
    plt.plot(x, train_acc_list, label='train acc')
    plt.plot(x, test_acc_list, label='test acc', linestyle='--')
    plt.xlabel("epochs")
    plt.ylabel("accuracy")
    plt.ylim(0, 1.0)
    plt.legend(loc='lower right')
    plt.show()
 
#
def readScore():
    gun_score = []
    naver_score = []
 
    f = open("gunman_scores.txt", 'r')
    while True:
        line = f.readline()
        if not line: break
        scores = re.split("::", line)
 
        myscore = int(scores[1])
        netiscore = float(scores[2])
        spscore = float(scores[3])
 
        naver_score.append([netiscore, spscore])
 
        scoreboard = [0, 0, 0, 0, 0]
        scoreboard[myscore - 1] = 1
        gun_score.append(scoreboard)
    f.close()
 
    naver_score = np.array(naver_score)
    gun_score = np.array(gun_score)
 
    return naver_score, gun_score
 
naver_score, gun_score = readScore()
train_size = 600
batch_size = 100
deepLearn(gun_score, naver_score, train_size, batch_size)


그리고 아래 코드는 상기 코드를 텐서 플로우를 사용하여 구현한 것입니다.
"텐서 플로 첫걸음" 서적에 실린 코드를 참고하여 작성했습니다. 

# -*- coding: utf-8 -*-
 
import tensorflow as tf
import numpy as np
import re
import matplotlib.pyplot as plt
 
def deepLearn(gun_scores, naver_scores, train_size, batch_size):
    x_train = naver_scores[:train_size]
    t_train = gun_scores[:train_size]
 
    x_test = naver_scores[train_size:]
    t_test = gun_scores[train_size:]
 
    W1 = tf.Variable(tf.random_uniform([2, 10], -1.0, 1.0))
    #W2 = tf.Variable(tf.random_uniform([10, 10], -1.0, 1.0))
    #W3 = tf.Variable(tf.random_uniform([10, 10], -1.0, 1.0))
    #W4 = tf.Variable(tf.random_uniform([10, 10], -1.0, 1.0))
    #W5 = tf.Variable(tf.random_uniform([10, 10], -1.0, 1.0))
    W6 = tf.Variable(tf.random_uniform([10, 5], -1.0, 1.0))
 
    b1 = tf.Variable(tf.zeros([10]))
    #b2 = tf.Variable(tf.zeros([10]))
    #b3 = tf.Variable(tf.zeros([10]))
    #b4 = tf.Variable(tf.zeros([10]))
    #b5 = tf.Variable(tf.zeros([4]))
    b6 = tf.Variable(tf.zeros([5]))
 
    x = tf.placeholder("float", [None, 2])
 
    L2 = tf.sigmoid(tf.matmul(x, W1) + b1)
    #L3 = tf.sigmoid(tf.matmul(L2, W2) + b2)
    #L4 = tf.sigmoid(tf.matmul(L3, W3) + b3)
    #L5 = tf.sigmoid(tf.matmul(L4, W4) + b4)
    #L6 = tf.sigmoid(tf.matmul(L5, W5) + b5)
    hypothesis = tf.nn.softmax(tf.matmul(L2, W6) + b6)
 
    y_ = tf.placeholder("float", [None, 5])
    cross_entropy = -tf.reduce_sum(y_ * tf.log(hypothesis))
    train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
 
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())
 
    train_acc_list = []
    test_acc_list = []
 
    for i in range(1000):
        batch_mask = np.random.choice(train_size, batch_size)
        x_batch = x_train[batch_mask]
        y_batch = t_train[batch_mask]
        sess.run(train_step, feed_dict={x: x_batch, y_: y_batch})
        correct_prediction = tf.equal(tf.argmax(hypothesis,1), tf.argmax(y_,1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
        #if i % 100 == 0:
        acc_train = sess.run(accuracy, feed_dict={x: x_batch, y_: y_batch})
        acc_test = sess.run(accuracy, feed_dict={x: x_test, y_: t_test})
        train_acc_list.append(acc_train)
        test_acc_list.append(acc_test)
 
 
    x = np.arange(len(train_acc_list))
    plt.plot(x, train_acc_list, label='train acc')
    plt.plot(x, test_acc_list, label='test acc', linestyle='--')
    plt.xlabel("epochs")
    plt.ylabel("accuracy")
    plt.ylim(0, 1.0)
    plt.legend(loc='lower right')
    plt.show()
#
def readScore():
    gun_score = []
    naver_score = []
 
    f = open("gunman_scores.txt", 'r')
    while True:
        line = f.readline()
        if not line: break
        scores = re.split("::", line)
 
        myscore = int(scores[1])
        netiscore = float(scores[2])
        spscore = float(scores[3])
 
        naver_score.append([netiscore, spscore])
 
        scoreboard = [0, 0, 0, 0, 0]
        scoreboard[myscore-1] = 1
        gun_score.append(scoreboard)
    f.close()
 
    naver_score = np.array(naver_score)
    gun_score = np.array(gun_score)
 
    return naver_score, gun_score
 
train_size = 600
batch_size = 100
naver_score, gun_score = readScore()
 
deepLearn(gun_score, naver_score, train_size, batch_size)





profile
제목 날짜
[TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... 8 2016.02.20
[TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 2015.04.03
[TIP] R에서 페이스북 페이지 정보 크롤링 하기 2 2017.02.11
Gunshadow가 관련된 질문 입니다. 1 2007.12.17
2000에서는,,왜....병렬포트를.,, 1 2002.05.01
485 컨버터를 이용한 통신 RTS제어 3 2005.11.29
C/C++:Short-Circuit evaluation바로알자 2000.08.03
CRC - 16 소스 수정할려고 하는데 어떻게 해야할지.. 질문드립니다. 1 2006.06.23
CRC 체크 C 소스 입니다. 2003.03.24
CRC 체크 소스 관련 질문 드립니다. 1 2005.12.11
crc체크기??crc체크? 1 2006.01.08
C에서 string사용건에 대한 문의 1 2000.05.26
Devpia 질문 답변 부탁합니다. 1 2004.10.07
Extern을 이용하여 모듈화 할때 문제점 질문드립니다!!! 1 2006.06.23
Gunshadow.sys 파일의 바이러스 진단 여부에 대한 문의입니다. 5 2007.12.11
Gunshadow.sys,dll파일 삭제에 관해서, 1 2007.12.01
HTML의 INPUT 테그값을 얻어오는 방법 1 2003.07.20
HTTP프로토콜을 이용한 파일 업로드 2002.12.24
JDK라면 WINDOWS에 있는 걸 말하는건지 1 2001.08.18
Lex와 Yacc의 사용법 강좌 2000.10.09
MainFrm.cpp에서 ConnectDlg.cpp 함수쓰기 1 2003.07.03
nt베이스에서 컴포트 인터럽트제어 1 2005.09.29
PCI 시리얼통신카드 드라이버 관련 1 2005.08.23
태그 목록
위로