【TensorFlow_Fold】配置在Jupyter Notebook下的Fold代碼環境_kernel

來源:互聯網
上載者:User
TensorFlow_Fold TensorFlow_Fold in Jupyter Notebook


效果預覽如上圖,環境為 CentOS7 + Python with TensorFlow1.0(Fold include) How to add kernel for Jupyter

jupyter裡一般是沒有我們自己設定的env下的python的,比如我包含tensorflow_fold庫的python就是在source activate tensorflow1.0後才能擷取到,所以在為notebook添加這個環境下的python才可以在notebook裡擷取到。

sudo pip install -U ipykernel# source activate tensorflow1.0python -m ipykernel install --user

簡要的解釋一下,如果是Linux環境,有一個叫做ipykernel的包可以輕易的添加kernel,不過需要注意的是,一定要確認當前python是不是想加進去的那個python哦,可以用which python來check一下。


匯入成功之後,就可以在New的時候看到這個kernel啦。 關於GPU的選擇使用

假如你們的機器上,有多個GPU,鑒於tensorflow會擅自把所有GPU都拿來用,你想要只用裡面的某一個來跑就足夠了(比如我們組的四路泰坦,我就跑點小程式請不動這麼多尊大神)

那麼,在代碼前(請注意,是在import前。)加入如下代碼即可,比如下面我用的是序號為0的GPU:

import osos.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"os.environ["CUDA_VISIBLE_DEVICES"]="0"

Tips:import tensorflow和import tensorflow_fold都會在import的時候就決定了使用哪些GPU,所以一定要先設定好environ,再import這倆兄弟。 About TensorFlow_Fold 封裝在靜態架構上的動態介面 Dynamic Batching的演算法很繁瑣,但不用當心,這個過程是由架構自動完成的,作為架構的使用者,我們只要知道怎麼調用官方給出來的介面就可以了。 新推出的TensorFlow Fold就是一個TensorFlow的封裝,設計參考了函數式編程的一些思想,目的就是方便使用者快速地構建動態計算圖。下面我們來簡單地瀏覽一下,要進一步瞭解可以去看官方的教學文檔。Documents TensorFlow Fold提供了一些函數專門用來處理序列(x1,…,xn):
Map(f):計算[f(x1) ,…,f(xn)]將函數f應用到每一個序列的元素,比如將句子中的每一個詞轉化為詞向量; Fold(g, z):計算g(…,g(z, x1), x2), …,xn ),比如說展開一個RNN(迴圈神經網路); Reduce (g):計算g(Reduce(g)[x1 ,…,xn/2],Reduce(g)[xn/2 ,…,xn],將函數g應用到一顆平衡二叉樹上,比如對序列中的元素作max或sum-pooling。 由於TensorFlow原本的基本單元Tensor不適合用於構建動態圖,所以Fold引入新的基本組件Block。Block有明確的一個輸入類型和一個輸出類型,包括:
Input:來著程式設計語言如Python中元素,比如字典等; Tensor:擁有資料類型和形狀的TensorFlow基本模組; Tuple (t1 ,…,tn ):括弧中的每一個t表示對應位置的類型; Sequence (t):一個不定長的擁有類型為t的元素的序列; Void:單元類型。這些基本類型可以相互嵌套,比如一個Block的輸入類型可以是Input類型的Tuple。 用來建立Block的基本函數有:
Scalar:將Python標量轉化為Tensor;Tensor:將Numpy數組轉化為Tensor;Function (h ):建立一個Operation; InputTransform (h):用於預先處理Python類型。 用來組合Block的基本函數有:
b1>>b2,流水線(pipeline):將b1 的輸出作為b2 的輸入; Record({l1:b1,…, ln:bn}): 接受一個Python字典為輸入,對字典中key值為li 的value應用; OneOf (b1,…,bn):根據輸入條件應用b1,…bn中的一個; Optional (b):OneOf的特例,如果輸入不為None,應用b; AllOf (b1,…,bn):輸入應用中的每一個。 用來組合Block的進階函數有:
Composition():流水線的升級版,流水線只能處理串列的流程,Composition()建立一個Scope對象,在這個Scope的縮排範圍內,採用b.reads(b1,…,bn )來讀取多個資料流,可以用於構建多分支結構; ForwardDeclaration():用來建立遞迴結構,這個函數可以先定義一個預先佔位的運算式expr,等這個運算式定義完再用expr.resolve_to(expr_def),將運算式遞迴地代入,這是用來建立樹結構計算圖必不可少的工具。 Coding Logs

敲幾個試試手……

"""td.InputTransform(fn):Python Function to Blocks"""def func(alist):    return (alist[3], alist[0]+alist[1])b = td.InputTransform(func)b.eval([1,2,3,4])  # => (4,3)
"""tf.split(value, num_or_size_splits, axis=0, num=None, name='split'):Splits a tensor into sub tensors."""# 'value' is a tensor with shape [5, 30]# Split 'value' into 3 tensors with sizes [4, 15, 11] along dimension 1split0, split1, split2 = tf.split(value, [4, 15, 11], 1)tf.shape(split0) ==> [5, 4]tf.shape(split1) ==> [5, 15]tf.shape(split2) ==> [5, 11]# Split 'value' into 3 tensors along dimension 1split0, split1, split2 = tf.split(value, num_or_size_splits=3, axis=1)tf.shape(split0) ==> [5, 10]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.