2016-10-17 5 views
3

Tensorflow를 MNIST 튜토리얼과 함께 사용하는 방법을 배우고 있지만 튜토리얼 시점에서 차단하고 있습니다.Tensorflow MNIST (무게 및 바이어스 변수)

from tensorflow.examples.tutorials.mnist import input_data 
import tensorflow as tf 

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 
x = tf.placeholder(tf.float32, [None, 784]) 
W = tf.Variable(tf.zeros([784, 10])) 
b = tf.Variable(tf.zeros([10])) 
y = tf.nn.softmax(tf.matmul(x, W) + b) 
y_ = tf.placeholder(tf.float32, [None, 10]) 

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 
saver = tf.train.Saver() 
init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 
for i in range(1000): 
    batch_xs, batch_ys = mnist.train.next_batch(100) 
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 

을하지만 실제로 모든 컴퓨팅 동안 변수 "W"(무게)와 "B"(바이어스)를 변경하는 방법을 이해하지 않습니다 여기에

은 코드가 제공됩니다? 각 배치에서 0으로 초기화되지만 이후에는? 코드에서 변경 될 부분이 전혀 보이지 않습니까?

미리 감사드립니다.

답변

9

TensorFlow variables은 상태를 하나의 run()에서 다음 상태로 유지합니다. 프로그램에서는 0으로 초기화 된 다음 교육 과정에서 점진적으로 업데이트됩니다.

이 라인에 의해 내재적으로 생성되는 변수의 값을 변경하는 코드

하십시오 tf.train.Optimizer 변수를 업데이트하기위한 동작을 생성하는 클래스이다

TensorFlow에서
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) 

은 통상의 기울기에 기초 그 변수들에 대한 일부 텐서 (예 : 손실). 기본적으로 을 Optimizer.minimize()으로 호출하면 TensorFlow는의 모든 변수 (이 경우 cross_entropy)가 종속 된 모든 변수 을 업데이트하는 작업을 만듭니다.

sess.run(train_step)을 호출하면 업데이트 작업이 포함 된 그래프가 실행되어 TensorFlow에 변수 값을 업데이트하도록 지시합니다.

+0

와우 많은 감사! 나는 오늘 아침 이후로 이것을 줄이지 않고 있었다! 완전히 붙어 있었어. 대단히 감사합니다! –

+1

기본 Optimizer 클래스 (https://www.tensorflow.org/versions/r0.11/api_docs/python/train.html#Optimizer)의 문서를 보면 minimize()가 두 작업을 결합한 것을 볼 수 있습니다 . 그것은 가중치와 편향에 대한 그라디언트를 계산하고이를 그래프의 각 가중치와 바이어스에 적용합니다. GradientDescentOptimizer는 기본 SGD 알고리즘을 구현하는 Optimizer의 하위 클래스입니다. –