반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 병럴프로그래밍
- k8s
- 안드로이드
- ReactiveProgramming
- 병렬프로그래밍
- 알고리즘
- Gradle
- 커스텀상태
- 회고
- viewmodel
- g 단위테스트
- theming
- 글또
- 안드로이드스튜디오
- Compose
- 알게되는
- 스레드
- Coroutine
- kotlin강좌
- 디자인패턴
- mockito
- 테스트
- Kotlin
- 자바
- Rxjava
- 안드로이드강좌
- android
- 코루틴
- 책
- 코틀린
Archives
- Today
- Total
선생님, 개발을 잘하고 싶어요.
tensorflow mnist 초급 본문
텐서플로 튜토리얼 한글 문서 : https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/tutorials/mnist/beginners/
소프트맥스 회귀
1. 입력한 데이터가 각 클래스에 속한다는 증거를 수치적으로 계산
2. 계산한 값을 확률로 변환
특정 클래스에 속하는지 계산
1. 픽셀의 어두운 정도를 가중치 합(서로 다른 계수를 곱해 합하는 연산) 한다.
- 가중치는 '해당 픽셀이 진하다는 것'이 '특정 클래스에 속한다는 것'애 반하는 내용이면 -의 값 / 맞다는 내용이면 +의 값
2. 바이어스 (bias)라는 추가적인 항을 더해 준다.
3. 위와 같은 증거값들을 '소프트맥스' 함수를 활용해 확률로 변환
- 선형 함수를 원하는 형태로 변환하는 함수! (예의 경우 10가지 경우에 대한 확률분포로 변환)
-> 각 클래스에 속할 확률로 변환하는 것
소프트 맥스란? : http://neuralnetworksanddeeplearning.com/chap3.html#softmax
학습
모델의 손실을 정의 (크로스 엔트로피 : http://colah.github.io/posts/2015-09-Visual-Information/)
샘플 코드 및 주석
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
# 상호작용하는 연산들을 심볼릭 변수를 활용해 기술
# 784차원의 벡터로 변형된 mnist 이미지의 데이터가 들어갈것
# None은 해당 차원의 길이가 어떤 길이든 가능하다.
# 즉 x는, 784차원 벡터인 이미지가 여러개 있는 자료형이라는것
x = tf.placeholder(tf.float32, [None, 784])
# 가중치 w 와 바이어스 b
# Variable은 수정 가능한 텐서
# 연산을 통해 사용되고, 수정된다.
# w [784, 10] 인 이유는 784차원 이미지 벡터를 곱해서 증거값을 나타내는 10차원 벡터를 얻고자 함
w = tf.Variable(tf.zeros([784, 10]))
# b [10] 인 이유는 위에서 만든 10차원 벡터에 더하기 위함
b = tf.Variable(tf.zeros([10]))
# 소프트맥스 : http://neuralnetworksanddeeplearning.com/chap3.html#softmax
y = tf.nn.softmax(tf.matmul(x, w) + b)
y_ = tf.placeholder(tf.float32, [None, 10])
# 크로스 엔트로피 : http://colah.github.io/posts/2015-09-Visual-Information/
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
# 역 전파 알고리즘 : http://colah.github.io/posts/2015-08-Backprop/
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
# 작성한 변수들을 초기화
init = tf.global_variables_initializer()
sess = tf.Session()
# 실제 초기화
sess.run(init)
# 1000번! 학습
for i in range(1000):
# 학습 데이터셋에서 무작위로 선택된 100개의 데이터로 구성된 배치를 가져온다.
batch_xs, batch_ys = mnist.train.next_batch(100)
# placeholder 자리에 데이터를 넣도록 데이터를 넘긴다.
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
# tf.argmax(y,1) : 우리 모델이 생각하기에 각 데이터에 적합하다고 판단하는 값 (예측값))
# tf.argmax(y_,1) : 실제 라벨
# 부울 값 리스트를 얻는다.
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print (sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
소프트맥스, 크로스 엔트로피, 역 전파 알고리즘 정리 필요성 존재!
Comments