tensorflow是google公司2023年11月開源的第二代深度學習框架,是第一代框架distbelief的改進版本.
tensorflow支援python和c/c++語言, 可以在cpu或gpu上進行運算, 支援使用virtualenv或docker打包發布.
tensorflow支援python2.7可以使用pip安裝.僅使用cpu的版本:
pip install
若安裝了cuda可以使用開啟gpu支援的版本:
pip install
tensorflow並不是乙個純粹的神經網路框架, 而是使用資料流圖進行數值分析的框架.
tensorflow使用有向圖(graph)表示乙個計算任務.圖的節點稱為ops
(operations)表示對資料的處理,圖的邊flow
描述資料的流向.
該框架計算過程就是處理tensor組成的流. 這也是tensorflow名稱的**.
tensorflow使用tensor
表示資料.tensor
意為張量即高維陣列,在python中使用numpy.ndarray
表示.
tensorflow使用session執行圖, 使用variable維護狀態.tf.constant是只能輸出的ops, 常用作資料來源.
下面我們構建乙個只有兩個constant做輸入, 然後進行矩陣乘的簡單圖:
from tensorflow import session, device, constant, matmul
with session() as session: # 建立執行圖的上下文
with device('/cpu:0'): # 指定運算裝置
mat1 = constant([[3, 3]]) # 建立源節點
mat2 = constant([[2], [2]])
product = matmul(mat1, mat2) # 指定節點的前置節點, 建立圖
result = session.run(product) # 執行計算
print(result)
# i tensorflow/core/common_runtime/local_device.cc:25] local device intra op parallelism threads: 4
#i tensorflow/core/common_runtime/local_session.cc:45] local session inter op parallelism threads: 4
#[[12]]
如果不使用with session()
語句, 需要手動執行session.close()
.
with device
裝置指定了執行計算的裝置:
下面使用variable做乙個計數器:
from tensorflow import session, constant, variable, add, assign, initialize_all_variables
state = variable(0, name='counter') # 建立計數器
one = constant(1) # 建立資料來源: 1
val = add(state, one) # 建立新值節點
update = assign(state, val) # 更新計數器
setup = initialize_all_variables() # 初始化variable
with session() as session:
session.run(setup) # 執行初始化
print(session.run(state)) # 輸出初值
for i in range(3):
session.run(update) # 執行更新
print session.run(state) # 輸出計數器值
# 0# 1
# 2# 3
在使用變數前必須執行initialize_all_variables()
返回的圖, 執行variable節點將返回變數的值.
本示例中將構建圖的過程寫在了上下文之外, 而且沒有指定執行裝置.
上面示例中session.run
只接受乙個op作為引數, 實際上run可以接受op列表作為輸入:
session.run([op1, op2])
上述示例一直使用constant作為資料來源, feed可以在執行時動態地輸入資料:
from tensorflow import session, placeholder, mul, float32
input1 = placeholder(float32)
input2 = placeholder(float32)
output = mul(input1, input2)
with session() as session:
print session.run(output, feed_dict=)
參考資料:
首先定義乙個bpneuralnetwork類:
class bpneuralnetwork:
def __init__(self):
self.session = tf.session()
self.input_layer = none
self.label_layer = none
self.loss = none
self.trainer = none
self.layers =
def __del__(self):
self.session.close()
編寫乙個生成單層神經網路函式,每層神經元用乙個資料流圖表示.使用乙個variable矩陣表示與前置神經元的連線權重, 另乙個variable向量表示偏置值, 並為該層設定乙個激勵函式.
def make_layer(inputs, in_size, out_size, activate=none):
weights = tf.variable(tf.random_normal([in_size, out_size]))
basis = tf.variable(tf.zeros([1, out_size]) + 0.1)
result = tf.matmul(inputs, weights) + basis
if activate is none:
return result
else:
return activate(result)
使用placeholder作為輸入層.
self.input_layer = tf.placeholder(tf.float32, [none, 2])
placeholder的第二個引數為張量的形狀,[none, 1]
表示行數不限, 列數為1的二維陣列, 含義與numpy.array.shape相同.這裡,self.input_layer
被定義為接受二維輸入的輸入層.
同樣使用placeholder表示訓練資料的標籤:
self.label_layer = tf.placeholder(tf.float32, [none, 1])
使用make_layer
為神經網路定義兩個隱含層, 並用最後一層作為輸出層:
可以看到第乙個隱含層接受input_layer
的二維輸入並產生十維輸出, 第二隱含層接受來自第一隱含層的十維輸入並產生一維輸出.
可以對比第二隱含層的輸出和訓練標籤定義損失函式:
self.loss = tf.reduce_mean(tf.reduce_sum(tf.square((self.label_layer - self.layers[1])), reduction_indices=[1]))
tf.train提供了一些優化器, 可以用來訓練神經網路.以損失函式最小化為目標:
self.trainer = tf.train.gradientdescentoptimizer(learn_rate).minimize(self.loss)
使用session執行神經網路模型:
initer = tf.initialize_all_variables()
# do training
self.session.run(initer)
for i in range(limit):
self.session.run(self.trainer, feed_dict=)
使用訓練好的模型進行**:
self.session.run(self.layers[-1], feed_dict=)
完整源**在這裡檢視.
上述模型雖然簡單但是使用不靈活, 作者採用同樣的思想實現了乙個可以自定義輸入輸出維數以及多層隱含神經元的網路, 可以參見這裡.
tensorflow 安裝指南
查詢 cuda cudnn 不用選預設python直接安裝就行了 安裝完成後可在環境變數中加入 anaconda scripts 資料夾,這樣就可以在cmd中使用了。conda 建立python虛擬環境 conda create n tensorflow python 3.6 tensorflow為...
python入門指南 Python 入門指南
python 入門指南 release 3.6.3 date dec 10,2017 python 是一門簡單易學且功能強大的程式語言。它擁有高效的高階資料結構,並且能夠用簡單而又高效的方式進行物件導向程式設計。python 優雅的語法和動態型別,再結合它的解釋性,使其在大多數平台的許多領域成為編寫...
Tensorflow 入門記錄
tensor為張量,flow為流圖。tensorflow內含有很多寫好的工具,如梯度下降演算法,卷積操作等。在使用tensorflow時,先導入包import tensorflow as tf,在進行定義tensorflow變數時,使用tf.variable 引數 有趣的是乙個叫做佔位符的工具,tf...