Tensorflow簡明教程(一)

導讀:本文第一部分會介紹tensorflow基本的一些概念殖演,流程圖,占位符年鸳,模型的持久化等趴久;第二部分會結合具體的案例來進行對上述的概念進行綜合的理解和教程
part1:
tensorflow初識
tensorflow=tensor(張量,也可以理解為多維數組)+flow(流)
1.1計算圖的概念
tensorflow的程序執(zhí)行通常會分為兩個階段:
第一階段定義變量和變量之間的運算關系

import tensorflow as tf
a=tf.constant([1.0,2.0],name="a") #定義常量
b=tf.constant([2.0,4.0],name="b")
c=a+b

第二階段執(zhí)行計算

sess =tf.Session()
sess.run(c)

計算圖可以抽象理解為畫板搔确,不特殊指定的話會在默認的畫板上畫畫彼棍,不同畫板上的圖案不會共享

import  tensorflow as tf 
g1=tf.Graph() #生成畫板1
with  g1.as_default():
#定義變量,設置初始值為0
   v=tf.get_variable("v",shape=[1],initializer=tf.zeros_initializer) #定義了一只貓的繪制方法

g2=tf.Graph() #生成畫板1
with  g2.as_default():
#定義變量,設置初始值為1
   v=tf.get_variable("v",shape=[1],initializer=tf.ones_initializer) #定義了一只狗的會話方法

with tf.Session(graph=g1)  as sess:  #打開畫板1
  tf.global_variables_initializer().run()#初始化所有變量,并運行(開始畫畫)
  with tf.variable_scope(" ",reuse=True):
  #獲得畫板上的內容
    print(sess.run(tf.get_variable("v"))) #看到一只貓

with tf.Session(graph=g2)  as sess:  #打開畫板2
  tf.global_variables_initializer().run()#初始化所有變量,并運行(開始畫畫)
  with tf.variable_scope(" ",reuse=True):
  #獲得畫板上的內容
    print(sess.run(tf.get_variable("v"))) #看到一只狗

1.2張量
張量可以理解為n維度數組(臨摹的時候畫筆的粗細),主要用來對中間結果的引用和獲得計算的結果

import tensorflow as tf
a=tf.constant([1.0,2.0],name="a") #定義常量
b=tf.constant([2.0,3.0],name="b")
c=tf.add(a,b,name="add")  #定義c節(jié)點的處理步驟
print(c)
#Tensor("add:0",shape(2,),dtype=float32) #這時候并沒有進行計算
#一個張量有三個屬性
(1)名字屬性 "add:0"   -畫筆的名稱
 (2)維度屬性“shape(2,)” -畫筆的粗細
(3)類型屬性 dtype=float32  --畫筆的顏料膳算,不同成分的顏料不能混用

1.3會話session
會話執(zhí)行的主要是Tensorflow的第二個階段滥酥,根據定義好的流程進行計算
調用session有兩種方法,類似正常讀取文件的方法

method 1:
#創(chuàng)建會話
sess=tf.Session()
#執(zhí)行定義好的計算
sess.run()
#關閉會話畦幢,釋放資源
sess.close()

method 2: 常用自動釋放資源
with  tf.Session() as sess:
  sess.run(……)

完整的通過會話計算張量

import tensorflow as tf
a=tf.constant([1.0,2.0],name="a") #定義常量
b=tf.constant([2.0,3.0],name="b")
c=a+b
with tf.Session() as sess: #運行會話得到c的計算結果[3.0,5,0]
  print(c.eval())

#with tf.Session() as sess: 只是進行運算并不會顯示
#   sess.run(c)
#with tf.Session() as sess: #計算并打印結果
#   print(sess.run(c))

1.4神經網路參數和變量
神經網路參數是實現神經網路的重要部分,在tensorflow中就是用變量來更新和保存神經網路中的參數缆蝉,使用變量的時候要給變量指定初始值

#生成初始值為隨機正態(tài)分布的變量
weights=tf.Variable(tf.random_normal([2,3],stddev=2))
#生成初始值為0的變量
biases=tf.Variable(tf.zeros([3]))
#通過其他變量的初始值來定義變量
w2=tf.Variable(weights.initialized_value()) #生成初始值跟weights一樣的變量
w2=tf.Variable(weights.initialized_value()*2)

在tensorflow中宇葱,定義變量只是定義了變量的生成過程祝旷,變量并沒有被賦值毅厚,需要通過初始化來對變量進行真正的賦值

import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=2,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=2,seed=1))
x=tf.constant([[0.7,0.9]])
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
with  tf.Session() as sess:
  sess.run(w1.initializer) #初始化w1
  sess.run(w2.initializer) #初始化w2
#當變量過多時候可以用下面的方式替換
  #init_op=tf.global_variables_initializer() #獲得所有變量
  ###tf.global_variables() #獲得存在的所有變量
  #sess.run(init_op)
  print(sess.run(y))

我們提到了張量和變量胶果,張量是一種存放數據的結構撞秋,變量的輸出結果就是張量怒见,可以理解為變量是一種特殊的張量;與張量一樣變量也有三個屬性
名字盯拱,維度事甜,類型订歪,其中維度可以進行修改(通常不會修改)穿肄,類型一旦指定就不能修改(默認為tf.flaot64)

import tensorflow as tf
w1=tf.Variable(tf.random_normal([2,3],stddev=2,seed=1),name='w1')
#數據類型錯誤
w2=tf.Variable(tf.random_normal([2,3],stddev=2,seed=1),dtype=tf.float64,name='w2')
w1.assign(w2)   #只是定義關系并沒有執(zhí)行
#維度錯誤
w2=tf.Variable(tf.random_normal([2,2],stddev=2,seed=1),name='w2')
tf.assign(w1,w2)  #會報維度不匹配的錯誤
tf.assign(w1,w2,validate_shape=False)  #允許更改維度年局,會被正常執(zhí)行

part2:
神經網絡訓練過程和簡單實現

2.1神經網絡算法示意圖

神經網絡反向傳播優(yōu)化.png

2.2一些新的名詞

batch_size:由于神經網絡一次訓練是選取部分數據進行訓練的际看,需要指定這部分數據的大小(一次訓練多少行的數據)
數據量小的時候是可以一次性使用全部數據矢否,數據量大的時候這樣會造成內存溢出
steps or train_steps:表示訓練輪數
tf.placeholder() #定義輸入數據的格式仲闽,類似函數的形參
learning_rate #學習率

2.3定義完整神經網絡參數

神經網絡的訓練大致分為下面三個步驟
1.定義神經網絡的結構和前項傳播算法的輸出結果
2.定義損失函數和選擇反向傳播算法
3.定義會話,并在訓練數據上不斷優(yōu)化反向傳播算法

import tensorflow as tf 
from numpy.random import RandomState
import matplotlib.pyplot as plt 
#定義訓練數據的大小
batch_size=8
#定義神經網絡參數
w1=tf.Variable(tf.random_normal([2,3],stddev=2,seed=1),name='w1')
w1=tf.Variable(tf.random_normal([3,1],stddev=2,seed=1),name='w2')
#定義神經網絡接收參數的格式
x=tf.placeholder(tf.float32,shape=(None,2),name='x-input') #定義輸入形參僵朗,兩列
y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input') #定義輸出形參赖欣,一列
#定義向前傳播的算法過程
a=tf.matmul(x,w1)
y=tf.matmul(y,w2)
y=tf.sigmod(y)
#定義損失函數和反向傳播算法
cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))+(1-y_)*tf.log(tf.clip_by_value(1-y,1e-10,1.0))) #分類算法常用的損失函數
    #反向傳播算法
train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
#生成自定義數據集大大小
rdm=RandomState(1)
dateset_size=128
X=rdm.rand(dateset_size,2) #生成128行兩列矩陣
y=[[int(x1+x2)] for (x1,x2) in X] #數據示意見下圖
with  tf.Session() as sess:
#初始化并運行所有變量
  init_op=tf.global_variables_initializer()
  sess.run(init_op)
#設定訓練輪數
STEPS=5000
for i in range(STEPS):
  start =(i*batch_size)%dataset_size
  end=min(start+batch_size,dataset_size)
  #輸入參數,執(zhí)行訓練流程
  sess.run(train_step,feed_dict=feed_dict{x:X[start:end],y_:Y[start:end]})
  #每隔一段時間验庙,計算所有數據的交叉熵
  if  i%1000==0:
    total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})
    print("經過%s次訓練現在的誤差是%"%(i,total_cross_entropy))
生成數據示意圖.png
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末顶吮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子粪薛,更是在濱河造成了極大的恐慌悴了,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汗菜,死亡現場離奇詭異让禀,居然都是意外死亡,警方通過查閱死者的電腦和手機陨界,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門巡揍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菌瘪,你說我怎么就攤上這事腮敌。” “怎么了俏扩?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵糜工,是天一觀的道長。 經常有香客問我录淡,道長捌木,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任嫉戚,我火速辦了婚禮刨裆,結果婚禮上,老公的妹妹穿的比我還像新娘彬檀。我一直安慰自己帆啃,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布窍帝。 她就那樣靜靜地躺著努潘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疯坤,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天报慕,我揣著相機與錄音,去河邊找鬼贴膘。 笑死卖子,一個胖子當著我的面吹牛,可吹牛的內容都是我干的刑峡。 我是一名探鬼主播洋闽,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼突梦!你這毒婦竟也來了诫舅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤宫患,失蹤者是張志新(化名)和其女友劉穎刊懈,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體娃闲,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡虚汛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了皇帮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卷哩。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖属拾,靈堂內的尸體忽然破棺而出将谊,到底是詐尸還是另有隱情,我是刑警寧澤渐白,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布尊浓,位于F島的核電站,受9級特大地震影響纯衍,放射性物質發(fā)生泄漏栋齿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一襟诸、第九天 我趴在偏房一處隱蔽的房頂上張望瓦堵。 院中可真熱鬧,春花似錦励堡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春鹅龄,著一層夾襖步出監(jiān)牢的瞬間揩慕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工扮休, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迎卤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓玷坠,卻偏偏與公主長得像蜗搔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子八堡,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容

  • 關于 TensorFlow TensorFlow? 是一個采用數據流圖(data flow graphs)樟凄,用于數...
    Bobby0322閱讀 77,591評論 2 55
  • (第一部分 機器學習基礎)第01章 機器學習概覽第02章 一個完整的機器學習項目(上)第02章 一個完整的機器學習...
    SeanCheney閱讀 7,720評論 3 44
  • 家里只要有個還在上學的孩子,你的生活作息和所有的活動安排就必須以孩子為中軸線來進行兄渺。每天過的就像打仗一樣缝龄,緊張忙碌...
    竹林吉祥老爸閱讀 342評論 0 2
  • 晶瑩剔透的雪花為城堡穿上潔白紗裙,來方特賞白雪紛飛挂谍,圓你一個夢幻童話夢叔壤!想穿越到《熊出沒之雪嶺熊風》里的唯美場景嗎...
    Ailsa丶閱讀 88評論 0 0
  • 所謂祖宗十八代是指自己上下九代的宗族成員。 上按次序稱謂: 生己者為父母口叙, 父之父為祖炼绘, 祖父之父為曾祖, 曾祖之...
    洞仙子閱讀 2,319評論 0 0