前言
本文只是tensorflow的簡單介紹。
安裝
很簡單直接
pip install tensorflow
就可以了。
如果喜歡用Pycharm ,可以直接按照下包的流程把它下載下來即可。
驗證安裝:hello world程序
import tensorflow as tf
hello=tf.constant("hello ,world")
sess=tf.Session()
print(sess.run(hello))
sess.close()
工作方式
tensorflow 的名字已經說明了它最重要的兩個概念——Tensor和Flow。
Tensor(張量)
在tensorflow中所有的數據都是通過張量進行表示的,在這里可以把張量理解為一個數據結構。
它既可以表示常量也可以表示為變量和多維度矩陣。
在Tensorflow中 一個數 就是一個0階張量,也稱做標量(scalar)
那么一個向量(一維數組)就是一個1階張量。
那么N維數組就是N階張量.
既然它是一個數據結構的話那就有自己的屬性。張量有三個屬性。名字(name),維度(shape)和類型(type)
import tensorflow as tf
a=tf.constant(1,name="a")
b=tf.constant([1,2],name="b")
c=tf.constant([[1],[2]],name="c")
print a
print b
print c
結果是:
Tensor("a_1:0", shape=(), dtype=int32)
Tensor("b_2:0", shape=(2,), dtype=int32)
Tensor("c:0", shape=(2, 1), dtype=int32)
shape=() 就說明它是個標量。
shape=(2,)說明它是個一維數組長度為2
shape=(2,1)說明它是一個二維數組
tensor顯示指定數據的類型其實就是在數據計算的時候做類型檢查。
Tensorflow 支持14種不同的類型,主要包括了小數(tf.float32,tf.float64)整數(tf.int8、tf.int16、tf.int32、tf.int64、tf.uint8)、布爾類型(tf.bool)、復數(tf.complex64、tf.complex128)
Flow(流)
我們把所有的數據理解成一個節點,然而每個數據的計算無非就是這個節點到另外一個節點的流向過程。例如
執行c=a+b
我們可以理解為a和b的數據經過add這個操作流向了C。flow也就很形象的去解釋了這個概念。
計算圖
結合上面的 張量和流的概念,我們甚至可以把上面的c=a+b理解為一個節點組成的圖。
沒錯,這就是Tensorflow中非常重要的一個概念計算圖。上面的是最小的圖。經過我們設計變化,圖會變得很大。但是無非也就是輸入流向計算過程流向輸出僅此而已。
計算圖的使用
根據上述概念可以知道我們的tensorflow就是一個一個的tensor。一條一條的flow以及一個個的op 組成的圖。所以我們使用tensorflow需要兩步。
設計圖
用實際的例子來看,就是之前的c=a+b
我們需要首先設計圖。
#定義常量op
a=tf.constant(2)
b=tf.constant(3)
#定義一個op操作
add=tf.add(a,b)
#定義一個占位變量(因為c不知道等于多少)
c=tf.placeholder(tf.int16)
ok這就是我們畫出的那張圖的各個節點和操作。
啟動圖(會話)
會話也叫session
在tensorflow中session可以管理運行時候所有的資源。也就是相當于前面都是初始化、必須在會話里面進行運行。代碼很簡單。
#定義一個會話
sess=tf.Session()
c=sess.run(add)
print c
sess.close()
輸出是5.
如果這樣寫。最后一個必須顯式的關閉這個會話,然而當程序一場推出的時候,關閉會話的那條命令可能不會執行從而導致資源泄漏。我們可以使用python的上下文管理器使用會話。
with tf.Session() as sess:
c=sess.run(add)
print c
代碼
# -*- coding: utf-8 -*-
# @Time : 2017/12/4 下午3:35
# @Author : SkullFang
# @Email : yzhang.private@gmail.com
# @File : demo1.py
# @Software: PyCharm
import tensorflow as tf
#定義常量op
a=tf.constant(2)
b=tf.constant(3)
#定義一個op操作
add=tf.add(a,b)
#定義一個占位變量(因為c不知道等于多少)
c=tf.placeholder(tf.int16)
# #定義一個會話
with tf.Session() as sess:
c=sess.run(add)
print c