TFboy養成記 簡單小程序(Variable & placeholder)


 學習參考周莫煩的視頻。

Variable:主要是用於訓練變量之類的。比如我們經常使用的網絡權重,偏置。

值得注意的是Variable在聲明是必須賦予初始值。在訓練過程中該值很可能會進行不斷的加減操作變化。

placeholder:也是用於存儲數據,但是主要用於feed_dict的配合,接收輸入數據用於訓練模型等。placeholder值在訓練過程中會不斷地被賦予新的值,用於批訓練,基本上其值是不會輕易進行加減操作。

placeholder在命名時是不會需要賦予值得,其被賦予值得時間實在feed_dict時。

 

Variable使用:

這是一個簡單的加法訓練。需要注意的是tensorflow 中很多操作都可以看做是一個節點。比如這里的assign操作,需要專門做一個update操作節點。

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出現訓練時,在給予值(個人看法,不一定對)。

不過placeholder 在命名時時需要指定類型的。如:

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))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM