실전 데이터를 사용해서 모델을 만들어 보자
MNIST라는 dataset이다
옛날에 미국 우체국에서 우편번호를 손으로 쓰는데
이 글씨를 자동으로 컴퓨터가 읽게 만들도록 하려고 만들어둔 data set이라고 한다.
데이터를 자세히 살펴보자
다음은 28픽셀 * 28픽셀 의 데이터이다
한자리씩 따지면 784개의 픽셀이 될 것이다.
X 의 placeholder를 만들때 shape로 784개를 줄 것이다.
None인 것은 우리가 원하는 만큼 데이터를 줄 수 있다는 의미이고.
Y 데이터는 예측하는 것이다.
0부터 9까지의 수가 있을 거다. 결과는 10개로 나누어 나올 것이다.
우리는 전에 softmax에서 one-hot encoding을 사용했었다
10개의 출력이 될 것이므로 shape로 nb_classes (=10)을 넣어준다
간단하게 텐서플로우에서 라이브러리로 만들어 놓은게 있다
mnist에다가 데이터를 불러오고 (데이터 불러올때 y를 one-hot = True로 해놓으면 label을 one-hot 방식으로 내놓는다)
batch_xs, batch_ys 에 training data set을 100개 불러온다
데이터가 너무 많으니까 다 가져올필요 없고 100개씩 가져오려고 하는거다
그다음에 학습을 할거고...
학습이 끝나면 test set을 가지고 평가를 할거다(처음 써보는 데이터)
X에 label을 넘겨주고 Y에도 label을 넘겨주겠지
클래스가 10개가 될 거고
X에 784개인거 확인하고
nb_classes 은 10이겠지 숫자가 0부터 9까지 10개니까
W의 shape을 신경써야 한다
784개 입력이고 나가는건 10개
bias는 나가는게 10개.
그다음에는 softmax
cost는 cross entropy 를 사용
one-hot으로 주어진 Y와
hypothesis에는 로그를 곱하고
axis = 1 -> 축을 1로 해서
합하고 평균내기
cost를 minimize하기
그러면 마지막으로 확인해보자
one-hot으로 주어진 Y(=label)를 arg_max에 넣은 것과 hypothesis로 주어진 one-hot 값이 같은지를 비교하자
같으면 True
다르면 False
이걸로 정확도까지 구하면 끝
여기서 배울게 있는데
학습시킬 데이터가 너무 크다
조금씩 잘라서 학습시킬수있는데
이 사이즈를 batch_size라고 하고
epoch은 무슨뜻이냐면
우리가 학습시킬 전체 데이터를 한바퀴 돌린것을 1epoch이라고 한다
그래서 15개 돈다고 쓴거고..
학습이 끝나면 평가를 해야한다.
test data를 가지고 해야할거다
session run으로 돌릴수도 있고
.eval() 이렇게 쓸수도 있다.
전체코드이다
각 epoch 을 돌면서
돌면 돌수록 cost가 줄어든다
정확도도 88%가 나온다.
랜덤하게 하나를 읽어와서
label이 얼마인지 나오게 하고
prediction 도 출력하기
예측과 label이 맞는지 비교해보자
plit.imshow()로 화면에 이미지가 보이도록 띄울수 있다