tensorflow 是google大腦小組的工程師們開發的用於機器學習和深度神經網路方面的研究,它通過乙個資料流圖來進行計算。[本文是對tensorflow社群資料進行學習和實踐,其中文社群還是很好的學習資源]
一、基本概念:
1、 資料流程圖 data flow graphs
2、 節點【nodes】: 圖中的各種形狀的方塊,表示的是某種數學操作【op】
3、 線【edges】: 表示節點間相互聯絡的多維資料陣列,在tensorflow中,稱為 張量【tensor】。個人理解為數學中的向量矩陣如:
三個元素的一維向量 [ 1, 2, 3 ], 2x2 的二維向量 [ [ 1, 1],[1, 1 ] ]
4、 重塑節點【reshape】:前面說了 節點表示計算, 所以reshape是乙個計算節點,用於進行矩陣的行數、列數、維度的調整。經常用這個節點進行降低維度計算
5、 啟用函式層【relulayer】:實現了對輸入資料的非負處理,將小於零的資料進行了截斷。
6、 邏輯層【logit layer】: 實現邏輯回歸,實現分類器計算
7、 計算梯度【gradients】:計算梯度
8、 梯度下降訓練【sgd trains】:進行梯度下降訓練優化
二、tensorflow的基本使用
一般來說,tensorflow使用圖(graph)來表示計算任務,在會話 (session) 的上下文 (context) 中執行圖 ;使用tensor 表示資料,變數 (variable)記錄計算狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取資料;
import tensorflow as tf
# 建立乙個常量 op, 產生乙個 1x2 矩陣. 這個 op 被作為乙個節點
# 加到預設圖中.
## 構造器的返回值代表該常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])
# 建立另外乙個常量 op, 產生乙個 2x1 矩陣.
matrix2 = tf.constant([[2.],[2.]])
# 建立乙個矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 作為輸入.
# 返回值 'product' 代表矩陣乘法的結果.
product = tf.matmul(matrix1, matrix2)
#session 物件在使用完後需要關閉以釋放資源. 除了顯式呼叫 close 外, 也可以使用 "with" **塊 來自動完成關閉動作.
#注意下面第二句和第三局的縮排
with tf.session() as sess:
result = sess.run([product])
print result
下面看看執行結果
1、變數
變數的使用,需要通過初始化加入到圖中
import tensorflow as tf
# 建立乙個變數, 初始化為標量 0.
count = tf.variable(0, name="counter")
# 建立乙個 op, 其作用是使 count 增加 1
one = tf.constant(1)
new_value = tf.add(count, one)
update = tf.assign(count, new_value)
# 啟**後, 變數必須先經過初始化,
# 首先必須增加乙個`初始化` op 到圖中.
init_op = tf.initialize_all_variables()
# 啟**, 執行 op
with tf.session() as sess:
# 執行 'init' op
result = sess.run(init_op)
print sess.run(count)
# 執行 op, 更新count值
sess.run(update)
print sess.run(count)
執行結果如下
之所以會多列印乙個1,是因為 tf.assign( oldvalue, newvalue) 函式會列印
2) fetch 拿取、獲取
可以一次傳入多個tensor 獲取結果
import tensorflow as tf
#定義兩個常量
x = tf.constant(3)
y = tf.constant(4)
# 建立3個 op,計算x平方和y平方和
xx = tf.mul(x, x)
yy = tf.mul(y, y)
zz = tf.add(xx, yy)
# 啟**, 執行 op
with tf.session() as sess:
result = sess.run([xx, yy, zz])
print result
執行結果 不因為 sess.run([xx,yy,zz]) 中間的tensor 順序而改變結果
tensorflow提供了佔位符和feed填入的機制,對於計算中的引數(預先用佔位符定義),通過feed_dict的方式進行代入實際計算值的方法
import tensorflow as tf
#定義兩個常量
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
# 建立3個 op,計算x平方和y平方和
xx = tf.mul(x, x)
yy = tf.mul(y, y)
zz = tf.add(xx, yy)
# 啟**, 執行 op
with tf.session() as sess:
result = sess.run([xx, yy, zz], feed_dict= )
print result
計算結果如下:
原文:
Linux C語言程式設計基本原理與實踐
命令列模式下 a 在字元後插入字元 i 在字元前插入字元 shift a 在行尾插入字元 shift i 在行首插入字元 o 在下一行插入字元 shift o 在上一行插入字元 x 刪除當前字元 shift x 刪除當前字元的前乙個字元 dd 刪除當前行 u 撤銷操作 ctrl r 恢復操作 gg ...
雙指標演算法基本原理和實踐
雙指標,指的是在遍歷物件的過程中,不是普通的使用單個指標進行訪問,而是使用兩個相同方向 快慢指標 或者相反方向 對撞指標 的指標進行掃瞄,從而達到相應的目的。換言之,雙指標法充分使用了陣列有序這一特徵,從而在某些情況下能夠簡化一些運算。在leetcode題庫中,關於雙指標的問題還是挺多的。雙指標 截...
雙指標演算法基本原理和實踐
雙指標,指的是在遍歷物件的過程中,不是普通的使用單個指標進行訪問,而是使用兩個相同方向 快慢指標 或者相反方向 對撞指標 的指標進行掃瞄,從而達到相應的目的。換言之,雙指標法充分使用了陣列有序這一特徵,從而在某些情況下能夠簡化一些運算。在leetcode題庫中,關於雙指標的問題還是挺多的。雙指標 截...