지난주와 이번주 보고 있는 머신러닝, 딥러닝 관련 쉬운 입문서들입니다.

in #kr6 years ago

매년 1월달과 2월달, 10월달은 여유 시간이 많은 기간입니다. 작년말까지 무척 바쁘게 강의를 해서 시간적인 여유가 없었는데 1월과 2월은 2주씩만 강의를 합니다. 잉여 시간이 늘어나서 이것 저것 자료와 책들을 챙겨서 보고 있습니다.
매년 공부를 하면서 느끼는 것은 AI(인공지능)분야의 발전 속도가 너무 빨라서 점점 책이나 자료를 보면 무척 진입장벽이 낮아지고 쉬워지고 있다는 것입니다. 혹시 파이썬과 판다스에 대한 약간의 지석을 가지고 있다면 아래의 책들을 보시는 것이 가능합니다.

  1. 윤인성님이 번역한 "텐서플로로 시작하는 딥러닝 입문"입니다. 교보문고에서 책을 보고 바로 구매를 했습니다. 책이 분량이 적기 때문에 마음먹으면 3일정도면 실습도 하면서 볼 수 있습니다. 텐서플로와 tflearn을 같이 사용하는데 예제와 설명이 정말 잘 되어 있습니다. 관심 있는 분들은 한번 보시면 될 것 같습니다. 추천합니다. ^^

스크린샷 2019-01-31 오전 10.38.24.png

책에서는 윈도우에 버추얼박스를 사용해서 개발환경을 셋팅하도록 되어 있습니다. 저는 개인적으로 맥을 선호해서 맥에 아나콘다 패키지를 설치하고 실습을 했습니다.

export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.0.1-py3-none-any.whl

pip3 install --upgrade $TF_BINARY_URL

pip install tflearn

손글씨를 인식하는 간단한 예제입니다.
import tensorflow as tf
import tflearn

import tflearn.datasets.mnist as mnist

from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np

(출판사에서 내려받은 이미지들을 모두 압축을 풀고 비밀번호는 ten1270으로 되어 있음
데스크탑에 data라를 폴더를 만들어서 모두 저장함)

trainX, trainY, testX, testY = mnist.load_data('Desktop/data/mnist', one_hot=True)
Extracting Desktop/data/mnist/train-images-idx3-ubyte.gz
Extracting Desktop/data/mnist/train-labels-idx1-ubyte.gz
Extracting Desktop/data/mnist/t10k-images-idx3-ubyte.gz
Extracting Desktop/data/mnist/t10k-labels-idx1-ubyte.gz

#데이터 확인하기
#학습 전용 이미지 픽셀 데이터와 정답 데이터의 크기 확인하기
print(len(trainX), len(trainY))
55000 55000

#테스트 전용 이미지 픽셀 데이터와 정답 데이터의 크기 확인하기
print(len(testX), len(testY))
10000 10000

print(trainX)
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]]

print(trainY)
[[0. 0. 0. ... 1. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 1. 0.]]

#학습 전용 이미지 데이터 세트는 55,000개, 테스트 전용 이미지 데이터 세트는 10,000개가 있는 것을 확인할 수 있습니다.
#중간에 생략이 되어서 어떤 이미지가 있는지를 확인하기 어렵습니다. 따라서 학습 전용 데이터를 하나만 출력해 봅니다.
#픽셀 데이터 trainX[0]와 정답 데이터 trainY[0]를 출력해 봅니다.
#학습 전용 이미지 픽셀 데이터 확인하기
trainX[0]

array([0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,

#실행결과를 스크롤해야 확인할 수 있습니다.
#그럼 이러한 픽셀값을 이미지로 출력해봅니다.

#학습 전용 이미지 데이터 확인하기
plt.imshow(trainX[0].reshape(28, 28), cmap=cm.gray_r, interpolation='nearest')
plt.show()

#이어서 정답 데이터 배열인 trainY[0]의 요소를 확인해 봅니다.
#학습 전용 정답 데이터 확인
trainY[0]
array([0., 0., 0., 0., 0., 0., 0., 1., 0., 0.])

#결과를 보면 숫자 7을 나타내고 있다는 것을 알 수 있습니다.

#결과를 보면 숫자 7을 나타내고 있다는 것을 알 수 있습니다.

#신경망 만들기
#초기화 하기
tf.reset_default_graph()

#입력 레이어 만들기
net = tflearn.input_data(shape=[None, 784] )

#중간 레이어 만들기
net = tflearn.fully_connected(net, 128, activation='relu')
net = tflearn.dropout(net, 0.5)

#출력 레이어 만들기
net = tflearn.fully_connected(net, 10, activation='softmax')
net = tflearn.regression(net, optimizer='sgd', learning_rate=0.5, loss='categorical_crossentropy')

#모델 만들기(학습하기)
model = tflearn.DNN(net)
model.fit(trainX, trainY, n_epoch=20, batch_size=100, validation_set=0.1, show_metric=True)

Training Step: 9899 | total loss: 0.63888 | time: 3.541s
| SGD | epoch: 020 | loss: 0.63888 - acc: 0.9237 -- iter: 49400/49500
Training Step: 9900 | total loss: 0.58500 | time: 4.569s
| SGD | epoch: 020 | loss: 0.58500 - acc: 0.9303 | val_loss: 0.07496 - val_acc: 0.9758 -- iter: 49500/49500
--

#모델 적용하기(예측하기)
pred = np.array(model.predict(testX)).argmax(axis=1)
print(pred)

[7 2 1 ... 4 5 6]

label = testY.argmax(axis=1)
print(label)

[7 2 1 ... 4 5 6]

accuracy = np.mean(pred == label, axis=0)
print(accuracy)
0.9749

#하나의 픽셀값 크기 출력하기
len(trainX[0])
28

#신경망 만들기
tf.reset_default_graph()

#입력 레이어 만들기
net = input_data(shape=[None, 28, 28, 1])

#중간 레이어 만들기
#합성곱 레이어 만들기
net = conv_2d(net, 32, 5, activation='relu')
#폴링 레이어 만들기
net = max_pool_2d(net, 2)
#합성곱 레이어 만들기
net = conv_2d(net, 64, 5, activation='relu')
#폴링 레이어 만들기
net = max_pool_2d(net, 2)
#전결합 레이어 만들기
net = fully_connected(net, 128, activation='relu')
net = dropout(net, 0.5)

##출력 레이어 만들기
net = tflearn.fully_connected(net, 10, activation='softmax')
net = tflearn.regression(net, optimizer='sgd', learning_rate=0.5, loss='categorical_crossentropy')

#모델 만들기(학습)
#학습하기
model = tflearn.DNN(net)
model.fit(trainX, trainY, n_epoch=20, batch_size=100, validation_set=0.1, show_metric=True)

Training Step: 9899 | total loss: 0.60181 | time: 146.467s
| SGD | epoch: 020 | loss: 0.60181 - acc: 0.9654 -- iter: 49400/49500
Training Step: 9900 | total loss: 0.54352 | time: 151.505s
| SGD | epoch: 020 | loss: 0.54352 - acc: 0.9689 | val_loss: 0.03953 - val_acc: 0.9880 -- iter: 49500/49500

Sort:  

저도 머신러닝에 관심이 많아서 공부하고 있는데, 딥러닝부터는 너무 어려워서 이해하는 게 힘드네요. 좋은 자료 공유해주셔서 감사합니다. 그리고 kr-dev 태그도 넣어주면 좋겠습니다. 제가 자주 들낙거리는 곳이라서요. ㅋ

어려운 주제이긴 합니다. 최근에 좋은 책들이 많이나왔습니다 ^^ 계속 소개하겠습니다.

짱짱맨 호출에 응답하여 보팅하였습니다.

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.027
BTC 60003.48
ETH 2309.22
USDT 1.00
SBD 2.49