2016-12-01 10 views
2

tensorflow python api를 통해 텐서 값을 업데이트하는 방법에 대한 기본적인 질문이 있습니다.tensorflow의 변수 값 업데이트

x = tf.placeholder(shape=(None,10), ...) 
y = tf.placeholder(shape=(None,), ...) 
W = tf.Variable(randn(10,10), dtype=tf.float32) 
yhat = tf.matmul(x, W) 

이제 나는 반복적 W의 값 (예를 들어, 일부 최적화 너 한테)를 업데이트 알고리즘의 일종을 구현하려는 가정하자 :

는 코드를 생각해 보자. 여기 LHS에 W 새로운 텐서하지 yhat = tf.matmul(x, W)에서 사용되는 W 점이다

for i in range(max_its): 
    resid = y_hat - y 
    W = f(W , resid) # some update 

문제 :이 같은 단계를 포함 할 것이다! 즉, 새 변수가 만들어지고 내 "모델"에 사용 된 W 값이 업데이트되지 않습니다.

지금이 주위에 한 가지 방법은 내 루프의 각 반복에 대한 새로운 "모델"의 생성을 초래

for i in range(max_its): 
    resid = y_hat - y 
    W = f(W , resid) # some update 
    yhat = tf.matmul(x, W) 

이 될 것입니다!

루프를 반복 할 때마다 새로운 모델을 만들지 않고 (파이썬에서)이 방법을 구현하는 것이 더 좋은 방법일까요? 대신 원래의 텐서 W을 업데이트하면됩니다.

답변

2

변수에는 assign 메서드가 있습니다. 시도해보십시오 : W.assign(f(W,resid))

+0

그럴 것 같습니다! 감사. – firdaus

0

@ aarbelle의 간결한 대답은 정확합니다. 누군가가 더 많은 정보를 필요로 할 경우에 대비하여 조금 확장 할 것입니다. 아래의 마지막 두 줄은 W 업데이트에 사용됩니다.

x = tf.placeholder(shape=(None,10), ...) 
y = tf.placeholder(shape=(None,), ...) 
W = tf.Variable(randn(10,10), dtype=tf.float32) 
yhat = tf.matmul(x, W) 

... 

for i in range(max_its): 
    resid = y_hat - y 
    update = W.assign(f(W , resid)) # do not forget to initialize tf variables. 
    # "update" above is just a tf op, you need to run the op to update W. 
    sess.run(update) 
관련 문제