tensorflow 首先要定義神經網路的結構, 然後再把資料放入結構當中去運算和 training.
因為tensorflow是採用資料流圖(data flow graphs)來計算, 所以首先我們得建立乙個資料流圖, 然後再將我們的資料(資料以張量(tensor)的形式存在)放在資料流圖中計算. 節點(nodes)在圖中表示數學操作,圖中的線(edges)則表示在節點間相互聯絡的多維資料陣列, 即張量(tensor). 訓練模型時tensor會不斷的從資料流圖中的乙個節點flow到另一節點, 這就是tensorflow名字的由來.
張量(tensor):
張量有多種. 零階張量為 純量或標量 (scalar) 也就是乙個數值. 比如 [1]
一階張量為 向量 (vector), 比如 一維的 [1, 2, 3]
二階張量為 矩陣 (matrix), 比如 二維的 [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
以此類推, 還有 三階 三維的 …
建立資料
匯入tensorflow和numpy,使用numpy建立 x 和 y 的資料。另外,由於tensorflow中大部分的資料都是float32型別,所以這裡使用numpy建立float32型別的資料。
2.搭建模型import tensorflow as tf
import numpy as np
# create data
x_data=np.random.rand(100).astype(np.float32)
y_data=x_data*0.1+0.3
用 tf.variable 來建立描述 y 的引數. 我們可以把 y_data = x_data*0.1 + 0.3 想象成 y=weights * x + biases, 然後神經網路也就是學著把 weights 變成 0.1, biases 變成 0.3.
3.計算誤差weights = tf.variable(tf.random_uniform([1], -1.0, 1.0))
biases = tf.variable(tf.zeros([1]))
y = weights*x_data + biases
將殘差平方的均值作為誤差
loss = tf.reduce_mean(tf.square(y-y_data))
4.傳播誤差
反向傳遞誤差的工作就交給optimizer了, 我們使用的誤差傳遞方法是梯度下降法: gradient descent 讓後我們使用 optimizer 來進行引數的更新.
訓練optimizer = tf.train.gradientdescentoptimizer(0.5)
train = optimizer.minimize(loss)
到目前為止, 我們只是建立了神經網路的結構, 還沒有使用這個結構. 在使用這個結構之前, 我們必須先初始化所有之前定義的variable, 所以這一步是很重要的!
接著,我們再建立會話 session. 我們用 session 來執行 init 初始化步驟. 並且, 用 session 來 run 每一次 training 的資料. 逐步提公升神經網路的**準確性.# init = tf.initialize_all_variables() # tf 馬上就要廢棄這種寫法
init = tf.global_variables_initializer() # 替換成這樣就好
session 是 tensorflow 為了控制,和輸出檔案的執行的語句. 執行 session.run() 可以獲得你要得知的運算結果, 或者是你所要運算的部分。sess = tf.session()
sess.run(init) # very important
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(weights), sess.run(biases))
先建立兩個矩陣m1和m2,計算它們的乘積product,然後在使用session來啟用product 並得到計算結果. 有兩種形式使用會話控制 session。
tensorflow中需要使用tensorflow.variable來定義變數import tensorflow as tf
# create two matrices
m1= tf.constant([[3,3]])
m2= tf.constant([[2],
[2]])
product = tf.matmul(m1,m2)
# method 1
sess = tf.session()
result = sess.run(product)
print(result)
sess.close()
# output: [[12]]
# method 2
with tf.session() as sess:
result2 = sess.run(product)
print(result2)
# output: [[12]]
如果在 tensorflow 中設定了變數,那麼初始化變數是最重要的!!所以定義了變數以後, 一定要定義tf.global_variables_initializer()。到這裡變數還是沒有被啟用,需要再在 sess 裡, sess.run(init) , 啟用 init 這一步。mport tensorflow as tf
state = tf.variable(0, name='counter')
# 定義常量 one
one = tf.constant(1)
# 定義加法步驟 (注: 此步並沒有直接計算)
new_value = tf.add(state, one)
# 將 state 更新成 new_value
update = tf.assign(state, new_value)
注意:直接 print(state) 不起作用!!# 如果定義 variable, 就一定要 initialize
# init = tf.initialize_all_variables() # tf 馬上就要廢棄這種寫法
init = tf.global_variables_initializer() # 替換成這樣就好
# 使用 session
with tf.session() as sess:
sess.run(init)
for _ in range(3):
sess.run(update)
print(sess.run(state))
一定要把 sess 的指標指向 state 再進行 print 才能得到想要的結果!
placeholder 是 tensorflow 中的佔位符,暫時儲存變數。
tensorflow 如果想要從外部傳入data, 那就需要用到 tf.placeholder(), 然後以這種形式傳輸資料 sess.run(***, feed_dict=)。
接下來, 傳值的工作交給了 sess.run() , 需要傳入的值放在了feed_dict={} 並一一對應每乙個 input. placeholder 與 feed_dict={} 是繫結在一起出現的。import tensorflow as tf
#在 tensorflow 中需要定義 placeholder 的 type ,一般為 float32 形式
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
# mul = multiply 是將input1和input2 做乘法運算,並輸出為 output
ouput = tf.multiply(input1, input2)
激勵函式執行時啟用神經網路中某一部分神經元,將啟用資訊向後傳入下一層的神經系統。激勵函式的實質是非線性方程。 tensorflow 的神經網路 裡面處理較為複雜的問題時都會需要運用激勵函式 activation function 。with tf.session() as sess:
print(sess.run(ouput, feed_dict=))
# output: [ 14.]
Anaconda環境下安裝Tensorflow
安裝過程中會讓你選擇是否將anaconda新增到系統環境中去,此時可以勾選這個選項框,避免後期自己新增路徑。1 開啟anaconda prompt 2 為了加快其他庫的安裝速度,我們首先要替換清華源 在anaconda prompt裡輸入以下命令 conda config add channels ...
Anaconda平台下安裝tensorflow
平台 windows 版本 tensorflow2.0.0 alpha0 cpu版本 安裝方式 pip 一 安裝環境 tensorflow2.0.0的cpu版本環境需求簡單,安裝比較簡潔。二 安裝過程 anaconda安裝 在anaconda安裝不需要重新下乙個python版本,只需要後面新建乙個虛...
小白 Anaconda下安裝tensorflow
本人是笨蛋小白,安裝的時候才知道建立虛擬環境的時候,環境裡可以直接安裝不同版本的python,不必考慮anaconda本身的python版本。為了搭配tensorflow更好的學習其他人的 我安裝的的是python3.6安裝版本,tensorflow對應的版本為1.4.0 keras的版本要對應te...