Tensorflow 구덩이 밟기

여기는 구덩이 밟기 기록입니다. 레슨을 보고 싶으면 나가서 우회전하세요~
옛날에 어떤 아이가 TF를 공부하고 있었어요. 처음에 논리 회귀의 최적화 프로그램을 썼어요.
import tensorflow as tf
import numpy as np

x=tf.placeholder("float")
y=tf.placeholder("float")
w=tf.Variable([1.0,2.0],name='w')
y_pred=tf.mul(x,w[0])+w[1]
error=tf.square(y-y_pred)

train_op=tf.train.GradientDescentOptimizer(0.02).minimize(error)
model=tf.initialize_all_variables()

with tf.Session() as session:
    session.run(model)
    for i in range(1000):
        x_value=np.random.rand() 
        y_value=x_value*2+6
        session.run([train_op],feed_dict={x:x_value,y:y_value})

    w_value=session.run(w)# get w
    print "ax+b,a=%.3f,b=%.3f"%(w_value[0],w_value[1])

이 함수는 결과를 출력하기 위해 잘 작동합니다.
ax+b,a=2.057,b=5.965

나중에 이 아이는 오차를 그림으로 그려서 자신의 성과를 보려고 리스트 errors를 추가해서 매번 출력을 저장하고 실행할 때 매번 error 값이 바뀐 곳을 출력한다.
errors=[]
with tf.Session() as session:
    session.run(model)
    for i in range(1000):
        x_value=np.random.rand() 
        y_value=x_value*2+6
        _,error=session.run([train_op,error],feed_dict={x:x_value,y:y_value})#
        errors.append(error) #

결과, 실행 중 오류 보고: TypeError!마지막으로 찾은 근원은 error 입력입니다:np입니다.float 유형, must be a string or Tensor for operation 입니다. 그렇지 않으면 이 작업을 수행할 수 없습니다.아이는 바로 입력을 바꾸어 아래와 같이 해서 문제가 없을 줄 알았다.
x_value=tf.random_normal((1,),mean=5,stddev=2.0)

결과 오류: TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays.피드의 입력이 하나의 텐서가 될 수 없다는 뜻입니다!이 아이의 마음은 사실 붕괴되었다!!!!!!방금 np 포맷을 바꿨는데, 어렵게도 또 바꾸려고 합니까?다시 돌아가면 틀림없이 아까의 잘못을 보고할 것이다. 그래서 아이는 이렇게 고쳤다.
with tf.Session() as session:
    session.run(model)
    for i in range(1000):
#         x_value=np.random.rand() #TypeError,must be a string or Tensor for operation
        x_value=tf.random_normal((1,),mean=5,stddev=2.0)
        y_value=x_value*2+6
        x_r,y_r=session.run([x_value,y_value])
        _,error_value=session.run([train_op,error],feed_dict={x:x_r,y:y_r})
#         error_value=session.run(error) can't work
        errors.append(error_value) 
    print type(x_r)
    w_value=session.run(w)# get w
    print "ax+b,a=%.3f,b=%.3f"%(w_value[0],w_value[1])

import matplotlib.pyplot as plt
plt.plot([np.mean(errors[i-50:i]) for i in range(len(errors))])
plt.show()
plt.savefig("errors.png")

마침내 정상 출력값은 ax+b, a=2.004, b=5.979
Tips:    , tf        numpy  ndarray   tensor,   tf.convert_to_tensor(),            ,         ndarray    

좋은 웹페이지 즐겨찾기