學習參考周莫煩的視頻。c++
Variable:主要是用於訓練變量之類的。好比咱們常常使用的網絡權重,偏置。網絡
值得注意的是Variable在聲明是必須賦予初始值。在訓練過程當中該值極可能會進行不斷的加減操做變化。dom
placeholder:也是用於存儲數據,可是主要用於feed_dict的配合,接收輸入數據用於訓練模型等。placeholder值在訓練過程當中會不斷地被賦予新的值,用於批訓練,基本上其值是不會輕易進行加減操做。學習
placeholder在命名時是不會須要賦予值得,其被賦予值得時間實在feed_dict時。spa
Variable使用:code
這是一個簡單的加法訓練。須要注意的是tensorflow 中不少操做均可以看作是一個節點。好比這裏的assign操做,須要專門作一個update操做節點。orm
import tensorflow as tf import numpy as np #Variable 在聲明是必需要給定一個 初始值的。同時也要規定他的shape,這裏是一個常數,因此就不準要在給定一個shape了。 one = tf.Variable(tf.constant(1)) get = tf.Variable(0) state = tf.add(one,get) update = tf.assign(get,state) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) for i in range(10): sess.run(update) print(sess.run(get))
placeholder使用:視頻
placeholder是做爲一個容器,在聲明時,並不須要給定一個初始值,與c++等語言不一樣,你能夠把它看作成在運行時他並不執行,只有在feed_dict出現訓練時,在給予值(我的見解,不必定對)。blog
不過placeholder 在命名時時須要指定類型的。如:utf-8
xs = tf.placeholder(tf.float32,[None,1],name = "x_input")
這裏的xs不只指定了類型,也定義的shape。若是不定義shape,只要是後續代碼中一致,那麼能夠是任意形式的。
這裏給出兩個版本的代碼,一個用了placeholder去擬合一個曲線,另外一個沒有使用
placeholder:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue Jun 13 15:41:23 2017 4 5 @author: Jarvis 6 """ 7 import tensorflow as tf 8 import numpy as np 9 10 x_data = np.random.rand(100).astype(np.float32) 11 y_data = x_data*0.1+0.3 12 print (x_data.shape) 13 xs = tf.placeholder(tf.float32) 14 ys = tf.placeholder(tf.float32) 15 W = tf.Variable(1.0) 16 #W = tf.Variable(tf.random_uniform([1],-1.0,1)) 17 b = tf.Variable(tf.zeros([1])) 18 y_pre = W*xs+b 19 20 loss = tf.reduce_mean((tf.square(ys-y_pre))) 21 22 train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss) 23 24 init = tf.initialize_all_variables() 25 sess = tf.Session() 26 sess.run(init) 27 for i in range(1000): 28 sess.run(train_step,feed_dict={xs:x_data,ys:y_data}) 29 if i%50 == 0: 30 print (sess.run(W),sess.run(b))
沒有用,直接使用原始數據:
import tensorflow as tf import numpy as np x_data = np.random.rand(100).astype(np.float) y_data = x_data*0.3+0.1 W = tf.Variable(tf.zeros([1]))#這裏可能你們會有疑問,W的shape究竟是多少?這個Wshape和以前 那個版本的w.shape到底有什麼區別呢?詳見shape的內容。 b = tf.Variable(tf.zeros([1])) y_pre = W*x_data+b loss = tf.reduce_mean(tf.square(y_data-y_pre)) train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) for i in range(1000): sess.run(train_step) print(sess.run(W),sess.run(b))