메뉴 건너뛰기

프로그래밍


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

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

# 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" 오류 날때... 2 2016.02.20
[TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 2015.04.03
[TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) 3 2016.04.16
[TIP] 인터넷으로 문자메시지 (SMS) 보내기 2008.03.23
[TIP] 파이선에서 Redis 이벤트 받기 2017.10.12
[TIP] 파이선에서 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position ... 오류 해결 방법 2017.09.29
[TIP] The function size must be used with a prefix when a default namespace is not specified 오류 해결하기 2017.08.02
[TIP] 페이스북 개인 담벼락의 좋아요수 크롤링하기 2017.07.15
[TIP] 자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP) 2017.03.16
[TIP] GUNMAN의 영화 점수 테이블을 이용한 딥러닝 예제 2017.02.15
[TIP] R에서 페이스북 페이지 정보 크롤링 하기 2 2017.02.11
[TIP] 네이버 영화 정보와 전문가 평점 얻어오기 2017.02.10
[TIP] 네이버 오픈 API를 로컬 PC에서 호출하기 2017.02.01
[TIP] php로 기상청에서 제공하는 기상정보 API 호출하기 2017.01.17
[TIP] node 에서 Basic authentication 인증과 함께 http, https 요청하기 2016.09.01
[TIP] node의 lambda-local 테스트 팁 2016.08.19
[TIP] 데이터를 Node에서 암호화하고 PHP에서 복호화 하기 2016.08.19
[TIP] Docker상의 Syntaxnet 결과 포맷을 수정하기 2016.08.07
[TIP] SyntaxNet을 Windows에서 실행하기 1 2016.05.25
[TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) 3 2016.04.16
[TIP] 파이선으로 TED에서 가장많이 사용된 단어들 줄세우기 2016.04.03
[TIP] 파이선에서 구글 스프레드시트 사용하기 5 2016.03.27
[TIP] 파이선에서 리스트를 사용하는 재미있는 예제 2016.03.15
[TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... 2 2016.02.20
태그 목록
위로