在之前的文章中介紹過,tensorflow框架的核心是將各式各樣的神經網絡抽象為一個有向無環圖,圖是由tensor以及tensor變換構成;
雖然現在有很多高階API可以讓開發者忽略這層抽象,但對於靈活度要求比較高的算法仍然需要開發者自定義網絡圖,所以建議開發者儘量先學習tf1.x中的基礎概念,這樣才能在深度學習道路上走得更遠;
首先來看定義圖時最常用的算子:
1. 常量定義
tf.constant()
2. 變量的定義
tf.Variable tf.get_variable
前者是調用構造方法創建一個新的對象,並且不能被復用 後者通過設置reuse=tf.AUTO_REUSE,優先看當前scope下面是否有符合要求的變量,有則返回這個值,沒有則創建新的對象; 設置為tf.reuse=True,會拋異常,可能與版本有關係
3. 相同維度的張量,進行對應元素的加減乘除操作
tf.addtf.subtracttf.multiplytf.div以上幾個算子都支持廣播,具體廣播原則後面的文章中介紹
4. 矩陣的點積與轉置
tf.matmultf.transpose
除了以上最基本算子之外,工程實踐中常用的幾個算子如下:
5. 維度變換算子
tf.reshape()
6. 維度增減算子
tf.expand_dimstf.squeeze
7. 生成符合正態分布的tensor
tf.random.normal
8. 某一維度求和
tf.reduce_sum
9. 將python中的列表或者ndarray對象轉為tensor
tf.convert_to_tensor
在定義圖的時候,儘量不要用+、-、*、/等符號,也儘量不要用math或者ndarray包下面的計算函數,而是應該使用tensorflow提供的計算函數,tf提供的函數還是十分全面的,即便某些比較複雜的函數沒有提供,也應該用其提供的基礎函數來實現。
想更進一步了解以上算子的使用DEMO可以關注並私信我;