TensorFlow學(xué)習(xí)筆記(1)

在新的算法理論不斷涌現(xiàn)的同時(shí),各種深度學(xué)習(xí)框架也不斷出現(xiàn)在人們視野,比如Torch,Caffe等等。TensorFlow是Google開發(fā)的第二代機(jī)器學(xué)習(xí)系統(tǒng),于2015年底開源,成為了新一代流行的機(jī)器學(xué)習(xí)的算法框架,感覺有必要掌握一下,所以報(bào)了個(gè)初級(jí)班學(xué)習(xí),做點(diǎn)筆記。

名詞

使用圖(graphs)來表示計(jì)算任務(wù)
其中每一個(gè)運(yùn)算操作(operation)將作為一個(gè)節(jié)點(diǎn)(node)
在計(jì)算圖邊中流動(dòng)(flow)的數(shù)據(jù)被稱為tensor張量
在會(huì)話(Session)的上下文中執(zhí)行圖
通過變量(Variable)維護(hù)狀態(tài)

實(shí)戰(zhàn)案例一

首先通過pip install安裝tensorflow

#導(dǎo)入tf,以下同
import tensorflow as tf 

#創(chuàng)建一行兩列的矩陣常量,
m1= tf.constant([[3,3]])

#創(chuàng)建兩行一列的矩陣常量
m2= tf.constant([[2],[3]])

#創(chuàng)建乘法矩陣,matmul是矩陣乘法函數(shù)
product = tf.matmul(m1,m2)

不能直接print(product),必須放到對(duì)話里。

#調(diào)用sess的run方法來執(zhí)行矩陣乘法op,啟用默認(rèn)值Session()
with tf.Session() as sess:  
    result = sess.run(product)
    print(result)

實(shí)戰(zhàn)案例二 變量的使用

#創(chuàng)建變量
x= tf.Variable([1,2])
a= tf.constant([3,3])

#創(chuàng)建減法和加法op
sub= tf.subtract(x,a)
add= tf.add(x,sub)

#初始化全局所有的變量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(sub))
    print(sess.run(add))

實(shí)戰(zhàn)案例三 創(chuàng)建循環(huán)

#創(chuàng)建變量,初始化為0
state = tf.Variable(0,name="counter")
#創(chuàng)建op,使state加1
new_value= tf.add(state,1)
#tf中,不能直接用等號(hào)賦值,所以要用assign來賦值
update= tf.assign(state,new_value)

#變量初始化
init= tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(state)) #這里打印出來是0
    for i in range(5):
        sess.run(update)
        print(sess.run(state))

上面這個(gè)例子有點(diǎn)繞,state這里老師還唯恐不亂的又給了個(gè)名字counter。要搞清楚state,new_value,update之間的關(guān)系。

實(shí)戰(zhàn)案例四 Fetch 同時(shí)運(yùn)行

#定義三個(gè)常量
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)

add = tf.add(input2,input3)
mul = tf.multiply(input1,add)

with tf.Session() as sess:
    result = sess.run([mul,add])
#這里同時(shí)運(yùn)行乘法和加法op
    print(result)

fetch并不是一個(gè)命令,它是指同時(shí)運(yùn)行,這里就是乘法和加法op

實(shí)戰(zhàn)案例五 Feed 占位符

定義三個(gè)占位符
input1 = tf.placeholder(tf.float32) 
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)

with tf.Session() as sess:
    #feed的數(shù)據(jù)以字典形式傳入,用feed_dict
    print(sess.run(output,feed_dict={input1:[7.],input2:[2]}))

結(jié)果是14.

實(shí)戰(zhàn)案例六 簡單的綜合示例

import numpy as np
#使用np生產(chǎn)100個(gè)隨機(jī)點(diǎn)
x_data = np.random.randn(100)
y_data= x_data*0.1 +0.2

#構(gòu)建一個(gè)線性模型
k = tf.Variable(0.)
b = tf.Variable(0.)
y = k*x_data + b

#定義一個(gè)二次代價(jià)函數(shù)
y_data是樣本的真實(shí)值,y是預(yù)測(cè)值,求出誤差的square平方,再求mean平均值。就是loss啦。
loss = tf.reduce_mean(tf.square(y_data-y))

定義一個(gè)梯度下降法訓(xùn)練的優(yōu)化器 運(yùn)用已經(jīng)封裝好的GradientDescentOptimizer,學(xué)習(xí)率是0.2

optimizer = tf.train.GradientDescentOptimizer(0.2)

#訓(xùn)練的目的就是最小化代價(jià)函數(shù),用minimize
train = optimizer.minimize(loss)

如果loss越小,那么就應(yīng)該k越接近0.1,b越接近0.2.

#初始化變量
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for step in range(201): #迭代201次
        sess.run(train) #每次會(huì)最小化loss
#每20次打印k和b的值:
        if step%20 == 0:
            print(step,sess.run([k,b]))

以上案例運(yùn)行結(jié)果,可以看出,tensorflow的擬合結(jié)果很強(qiáng)。

運(yùn)行結(jié)果

課程是dataguru的,有興趣者自行搜索吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容