åºæ¬ä½¿ç¨
ä½¿ç¨ TensorFlow, ä½ å¿
é¡»æç½ TensorFlow:
使ç¨å¾ (graph) æ¥è¡¨ç¤ºè®¡ç®ä»»å¡.
å¨è¢«ç§°ä¹ä¸º ä¼è¯ (Session) çä¸ä¸æ (context) ä¸æ§è¡å¾.
ä½¿ç¨ tensor 表示æ°æ®.
éè¿ åé (Variable) ç»´æ¤ç¶æ.
ä½¿ç¨ feed å fetch å¯ä»¥ä¸ºä»»æçæä½(arbitrary operation) èµå¼æè
ä»å
¶ä¸è·åæ°æ®.
综述
TensorFlow æ¯ä¸ä¸ªç¼ç¨ç³»ç», 使ç¨å¾æ¥è¡¨ç¤ºè®¡ç®ä»»å¡. å¾ä¸çèç¹è¢«ç§°ä¹ä¸º op
(operation ç缩å). ä¸ä¸ª op è·å¾ 0 个æå¤ä¸ª Tensor, æ§è¡è®¡ç®,
产ç 0 个æå¤ä¸ª Tensor. æ¯ä¸ª Tensor æ¯ä¸ä¸ªç±»ååçå¤ç»´æ°ç».
ä¾å¦, ä½ å¯ä»¥å°ä¸å°ç»å¾åé表示为ä¸ä¸ªåç»´æµ®ç¹æ°æ°ç»,
è¿å个维度åå«æ¯ [batch, height, width, channels].
ä¸ä¸ª TensorFlow å¾æè¿°äºè®¡ç®çè¿ç¨. 为äºè¿è¡è®¡ç®, å¾å¿
é¡»å¨ ä¼è¯ é被å¯å¨.
ä¼è¯ å°å¾ç op ååå°è¯¸å¦ CPU æ GPU ä¹ç±»ç è®¾å¤ ä¸, åæ¶æä¾æ§è¡ op çæ¹æ³.
è¿äºæ¹æ³æ§è¡å, å°äº§çç tensor è¿å. å¨ Python è¯è¨ä¸, è¿åç tensor æ¯
numpy ndarray 对象; å¨ C å C++ è¯è¨ä¸, è¿åç tensor æ¯
tensorflow::Tensor å®ä¾.
计ç®å¾
TensorFlow ç¨åºé常被ç»ç»æä¸ä¸ªæ建é¶æ®µåä¸ä¸ªæ§è¡é¶æ®µ. å¨æ建é¶æ®µ, op çæ§è¡æ¥éª¤
被æè¿°æä¸ä¸ªå¾. å¨æ§è¡é¶æ®µ, 使ç¨ä¼è¯æ§è¡æ§è¡å¾ä¸ç op.
ä¾å¦, é常å¨æ建é¶æ®µå建ä¸ä¸ªå¾æ¥è¡¨ç¤ºåè®ç»ç¥ç»ç½ç», ç¶åå¨æ§è¡é¶æ®µåå¤æ§è¡å¾ä¸çè®ç» op.
TensorFlow æ¯æ C, C++, Python ç¼ç¨è¯è¨. ç®å, TensorFlow ç Python åºæ´å æç¨,
å®æä¾äºå¤§éçè¾
å©å½æ°æ¥ç®åæ建å¾çå·¥ä½, è¿äºå½æ°å°æªè¢« C å C++ åºæ¯æ.
ä¸ç§è¯è¨çä¼è¯åº (session libraries) æ¯ä¸è´ç.
æ建å¾
æ建å¾ç第ä¸æ¥, æ¯åå»ºæº op (source op). æº op ä¸éè¦ä»»ä½è¾å
¥, ä¾å¦ 常é (Constant). æº op çè¾åºè¢«ä¼ éç»å
¶å® op åè¿ç®.
Python åºä¸, op æé å¨çè¿åå¼ä»£è¡¨è¢«æé åºç op çè¾åº, è¿äºè¿åå¼å¯ä»¥ä¼ éç»å
¶å®
op æé å¨ä½ä¸ºè¾å
¥.
TensorFlow Python åºæä¸ä¸ªé»è®¤å¾ (default graph), op æé å¨å¯ä»¥ä¸ºå
¶å¢å èç¹. è¿ä¸ªé»è®¤å¾å¯¹
许å¤ç¨åºæ¥è¯´å·²ç»è¶³å¤ç¨äº. é
读 Graph ç±» ææ¡£
æ¥äºè§£å¦ä½ç®¡çå¤ä¸ªå¾.
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)
é»è®¤å¾ç°å¨æä¸ä¸ªèç¹, 两个 constant() op, åä¸ä¸ªmatmul() op. 为äºçæ£è¿è¡ç©éµç¸ä¹è¿ç®, 并å¾å°ç©éµä¹æ³ç
ç»æ, ä½ å¿
é¡»å¨ä¼è¯éå¯å¨è¿ä¸ªå¾.
å¨ä¸ä¸ªä¼è¯ä¸å¯å¨å¾
æé é¶æ®µå®æå, æè½å¯å¨å¾. å¯å¨å¾ç第ä¸æ¥æ¯å建ä¸ä¸ª Session 对象, å¦ææ ä»»ä½å建åæ°,
ä¼è¯æé å¨å°å¯å¨é»è®¤å¾.
欲äºè§£å®æ´çä¼è¯ API, 请é
读Session 类.
# å¯å¨é»è®¤å¾.
sess = tf.Session()
# è°ç¨ sess ç 'run()' æ¹æ³æ¥æ§è¡ç©éµä¹æ³ op, ä¼ å
¥ 'product' ä½ä¸ºè¯¥æ¹æ³çåæ°.
# ä¸é¢æå°, 'product' 代表äºç©éµä¹æ³ op çè¾åº, ä¼ å
¥å®æ¯åæ¹æ³è¡¨æ, æ们å¸æåå
# ç©éµä¹æ³ op çè¾åº.
#
# æ´ä¸ªæ§è¡è¿ç¨æ¯èªå¨åç, ä¼è¯è´è´£ä¼ é op æéçå
¨é¨è¾å
¥. op é常æ¯å¹¶åæ§è¡ç.
#
# å½æ°è°ç¨ 'run(product)' 触åäºå¾ä¸ä¸ä¸ª op (两个常é op åä¸ä¸ªç©éµä¹æ³ op) çæ§è¡.
#
# è¿åå¼ 'result' æ¯ä¸ä¸ª numpy `ndarray` 对象.
result = sess.run(product)
print result
# ==> [[ 12.]]
# ä»»å¡å®æ, å
³éä¼è¯.
sess.close()
Session 对象å¨ä½¿ç¨å®åéè¦å
³é以éæ¾èµæº. é¤äºæ¾å¼è°ç¨ close å¤, ä¹å¯ä»¥ä½¿ç¨ "with" 代ç å
æ¥èªå¨å®æå
³éå¨ä½.
with tf.Session() as sess:
result = sess.run([product])
print result
å¨å®ç°ä¸, TensorFlow å°å¾å½¢å®ä¹è½¬æ¢æåå¸å¼æ§è¡çæä½, 以å
åå©ç¨å¯ç¨ç计ç®èµæº(å¦ CPU
æ GPU). ä¸è¬ä½ ä¸éè¦æ¾å¼æå®ä½¿ç¨ CPU è¿æ¯ GPU, TensorFlow è½èªå¨æ£æµ. å¦ææ£æµå° GPU, TensorFlow
ä¼å°½å¯è½å°å©ç¨æ¾å°ç第ä¸ä¸ª GPU æ¥æ§è¡æä½.
å¦ææºå¨ä¸æè¶
è¿ä¸ä¸ªå¯ç¨ç GPU, é¤ç¬¬ä¸ä¸ªå¤çå
¶å® GPU é»è®¤æ¯ä¸åä¸è®¡ç®ç. 为äºè®© TensorFlow
使ç¨è¿äº GPU, ä½ å¿
é¡»å° op æç¡®ææ´¾ç»å®ä»¬æ§è¡. with...Device è¯å¥ç¨æ¥ææ´¾ç¹å®ç CPU æ GPU
æ§è¡æä½:
with tf.Session() as sess:
with tf.device("/gpu:1"):
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
...
设å¤ç¨å符串è¿è¡æ è¯. ç®åæ¯æç设å¤å
æ¬:
"/cpu:0": æºå¨ç CPU.
"/gpu:0": æºå¨ç第ä¸ä¸ª GPU, å¦ææçè¯.
"/gpu:1": æºå¨ç第äºä¸ª GPU, 以æ¤ç±»æ¨.
é
读使ç¨GPUç« è, äºè§£ TensorFlow GPU 使ç¨çæ´å¤ä¿¡æ¯.
交äºå¼ä½¿ç¨
ææ¡£ä¸ç Python 示ä¾ä½¿ç¨ä¸ä¸ªä¼è¯ Session æ¥
å¯å¨å¾, 并è°ç¨ Session.run() æ¹æ³æ§è¡æä½.
为äºä¾¿äºä½¿ç¨è¯¸å¦ IPython ä¹ç±»ç Python 交äºç¯å¢, å¯ä»¥ä½¿ç¨
InteractiveSession 代æ¿
Session ç±», ä½¿ç¨ Tensor.eval()
å Operation.run() æ¹æ³ä»£æ¿
Session.run(). è¿æ ·å¯ä»¥é¿å
使ç¨ä¸ä¸ªåéæ¥ææä¼è¯.
# è¿å
¥ä¸ä¸ªäº¤äºå¼ TensorFlow ä¼è¯.
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使ç¨åå§åå¨ initializer op ç run() æ¹æ³åå§å 'x'
x.initializer.run()
# å¢å ä¸ä¸ªåæ³ sub op, ä» 'x' åå» 'a'. è¿è¡åæ³ op, è¾åºç»æ
sub = tf.sub(x, a)
print sub.eval()
# ==> [-2. -1.]
Tensor
TensorFlow ç¨åºä½¿ç¨ tensor æ°æ®ç»ææ¥ä»£è¡¨ææçæ°æ®, 计ç®å¾ä¸, æä½é´ä¼ éçæ°æ®é½æ¯ tensor.
ä½ å¯ä»¥æ TensorFlow tensor çä½æ¯ä¸ä¸ª n ç»´çæ°ç»æå表. ä¸ä¸ª tensor å
å«ä¸ä¸ªéæç±»å rank, å
ä¸ä¸ª shape. æ³äºè§£ TensorFlow æ¯å¦ä½å¤çè¿äºæ¦å¿µç, åè§
Rank, Shape, å Type.
åé
Variables for more details.
åéç»´æ¤å¾æ§è¡è¿ç¨ä¸çç¶æä¿¡æ¯. ä¸é¢çä¾åæ¼ç¤ºäºå¦ä½ä½¿ç¨åéå®ç°ä¸ä¸ªç®åç计æ°å¨. åè§
åé ç« èäºè§£æ´å¤ç»è.
# å建ä¸ä¸ªåé, åå§å为æ é 0.
state = tf.Variable(0, name="counter")
# å建ä¸ä¸ª op, å
¶ä½ç¨æ¯ä½¿ state å¢å 1
one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)
# å¯å¨å¾å, åéå¿
é¡»å
ç»è¿`åå§å` (init) op åå§å,
# é¦å
å¿
é¡»å¢å ä¸ä¸ª`åå§å` op å°å¾ä¸.
init_op = tf.initialize_all_variables()
# å¯å¨å¾, è¿è¡ op
with tf.Session() as sess:
# è¿è¡ 'init' op
sess.run(init_op)
# æå° 'state' çåå§å¼
print sess.run(state)
# è¿è¡ op, æ´æ° 'state', 并æå° 'state'
for _ in range(3):
sess.run(update)
print sess.run(state)
# è¾åº:
# 0
# 1
# 2
# 3
代ç ä¸ assign() æä½æ¯å¾ææç»ç表达å¼çä¸é¨å, æ£å¦ add() æä½ä¸æ ·. æ以å¨è°ç¨ run()
æ§è¡è¡¨è¾¾å¼ä¹å, å®å¹¶ä¸ä¼çæ£æ§è¡èµå¼æä½.
é常ä¼å°ä¸ä¸ªç»è®¡æ¨¡åä¸çåæ°è¡¨ç¤ºä¸ºä¸ç»åé. ä¾å¦, ä½ å¯ä»¥å°ä¸ä¸ªç¥ç»ç½ç»çæéä½ä¸ºæ个åéåå¨å¨ä¸ä¸ª tensor ä¸.
å¨è®ç»è¿ç¨ä¸, éè¿éå¤è¿è¡è®ç»å¾, æ´æ°è¿ä¸ª tensor.
Fetch
为äºååæä½çè¾åºå
容, å¯ä»¥å¨ä½¿ç¨ Session 对象ç run() è°ç¨ æ§è¡å¾æ¶, ä¼ å
¥ä¸äº tensor,
è¿äº tensor ä¼å¸®å©ä½ ååç»æ. å¨ä¹åçä¾åé, æ们åªååäºå个èç¹ state, ä½æ¯ä½ ä¹å¯ä»¥ååå¤ä¸ª
tensor:
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.Session() as sess:
result = sess.run([mul, intermed])
print result
# è¾åº:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
éè¦è·åçå¤ä¸ª tensor å¼ï¼å¨ op çä¸æ¬¡è¿è¡ä¸ä¸èµ·è·å¾ï¼èä¸æ¯é个å»è·å tensorï¼ã
Feed
ä¸è¿°ç¤ºä¾å¨è®¡ç®å¾ä¸å¼å
¥äº tensor, 以常éæåéçå½¢å¼åå¨. TensorFlow è¿æä¾äº feed æºå¶, 该æºå¶
å¯ä»¥ä¸´æ¶æ¿ä»£å¾ä¸çä»»ææä½ä¸ç tensor å¯ä»¥å¯¹å¾ä¸ä»»ä½æä½æ交补ä¸, ç´æ¥æå
¥ä¸ä¸ª tensor.
feed 使ç¨ä¸ä¸ª tensor å¼ä¸´æ¶æ¿æ¢ä¸ä¸ªæä½çè¾åºç»æ. ä½ å¯ä»¥æä¾ feed æ°æ®ä½ä¸º run() è°ç¨çåæ°.
feed åªå¨è°ç¨å®çæ¹æ³å
ææ, æ¹æ³ç»æ, feed å°±ä¼æ¶å¤±. æ常è§çç¨ä¾æ¯å°æäºç¹æ®çæä½æå®ä¸º "feed" æä½,
æ è®°çæ¹æ³æ¯ä½¿ç¨ tf.placeholder() 为è¿äºæä½å建å ä½ç¬¦.
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
print sess.run([output], feed_dict={input1:[7.], input2:[2.]})
# è¾åº:
# [array([ 14.], dtype=float32)]
for a larger-scale example of feeds.
å¦æ没ææ£ç¡®æä¾ feed, placeholder() æä½å°ä¼äº§çé误.
MNIST å
¨è¿é feed æç¨
(source code)
ç»åºäºä¸ä¸ªæ´å¤§è§æ¨¡çä½¿ç¨ feed çä¾å.
温馨提示:答案为网友推荐,仅供参考