日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow(一)

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TensorFlow

概述

TensorFlow是Google主導的開源深度學習庫。官網:

https://www.tensorflow.org/

代碼:

https://github.com/tensorflow/tensorflow

TensorFlow提供了一個可視化的神經網絡展示:

http://playground.tensorflow.org/

還有若干已經實現好的經典神經網絡模型(比如Autoencoder、ResNet等):

https://github.com/tensorflow/models/

TensorFlow的官方教程:

http://tensorflowtutorial.net/tensorflow-tutorial

教程中文版:

http://wiki.jikexueyuan.com/project/tensorflow-zh/

TensorFlow中文社區:

http://www.tensorfly.cn/

另一個API中文版:

https://www.w3cschool.cn/tensorflow_python/

安裝:

sudo pip install tensorflow

由于我的PC顯卡不合要求,因此直接安裝的是CPU版本,這也是最通用的版本。

TensorFlow技術棧:

CS 20SI

斯坦福最近專門為Tensorflow開設了一門課程:CS 20SI: Tensorflow for Deep Learning Research。

網址:

https://web.stanford.edu/class/cs20si/syllabus.html

課程的主講Chip Huyen,一個越南妹子,目前在斯坦福讀本科(大三)。應該說本科生上講臺的確是一件稀罕事,在這里為斯坦福的學術氛圍點贊。

個人主頁:

https://huyenchip.com

不用為課程的質量擔心,Chip Huyen的師兄們客串了很多節課,Andrej Karpathy為課程設計了網頁。

Chip Huyen可謂是一戰成名。但也帶來了煩惱,再去請教別人的時候,總有助教或同學會反問:“這些你不該早就知道了么?你不就是教這些的么?”

參見:

http://www.sohu.com/a/164277987_473283

一名在斯坦福教授TensorFlow教師的“懺悔”:我覺得自己像個騙子

源代碼編譯

Step 1:安裝Bazel。

echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - sudo apt-get update && sudo apt-get install bazel

Bazel的官網文檔:

https://docs.bazel.build/versions/master/bazel-user-manual.html

Step 2:編譯TensorFlow。

./configure # configure的時候要選擇一些東西是否支持,這里建議都選N,不然后面會包錯,如果支持顯卡,就在cuda的時候選擇y bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package # CPU only bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package # GPU bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg #生成wheel文件

configure腳本會自動選擇CPU指令集優化,因此源代碼編譯的TensorFlow,肯定比pip安裝的要運行的快。

bazel編譯相當消耗資源,在配置低的機器上,可通過如下選項限制使用資源的數量。(最常出現的后果是內存耗盡導致的假死。)

--jobs n --local_resources availableRAM(MB),availableCPU,availableIO

例子:

bazel build --jobs 2 --local_resources 850,3.0,1.0 --config=opt //tensorflow/tools/pip_package:build_pip_package

按照我的實踐--local_resources其實用處不大,有的C++文件編譯需要上GB空間,即使有約束也會突破。而--jobs相對好一些,一般按照每個job 1.5GB來估算,就可以保證TensorFlow順利編譯成功。

Step 3:安裝TensorFlow。

sudo pip uninstall tensorflow

sudo pip install /tmp/tensorflow_pkg/tensorflow-1.3.0-cp27-cp27mu-linux_x86_64.whl

加入CPU指令集優化之后的版本,要比通用版快50%~100%,因此,編譯源碼安裝還是很有價值的。

參考:

http://www.jianshu.com/p/b1faa10c9238

TensorFlow CPU環境SSE/AVX/FMA指令集編譯

http://www.hankcs.com/ml/compile-and-install-tensorflow-from-source.html

從源碼編譯安裝TensorFlow

http://blog.csdn.net/sinat_28731575/article/details/74633476

Mac下使用源碼編譯安裝TensorFlow CPU版本

基本概念

Variables:維持計算圖執行過程中的狀態信息的變量。一般來說,這就是神經網絡的參數。

Placeholders:對于每個樣本都不相同的變量。比如神經網絡的輸入變量x和輸出變量y。

聲明:

x = tf.placeholder(tf.float32, [None, 784])

Placeholders在圖的執行過程中,需要由真實的tensor填充之:

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

這里的batch_xs就是用來填充x的tensor。

圖計算

圖計算是各個深度學習框架的中心概念,這里單獨提出來討論一下。

上圖是softmax運算的計算圖示例。計算圖是一個有向無環圖,它的結點代表原始數據和計算中間結果,邊代表數據的流向。計算操作被稱為Operation

因此,計算圖實際上是工作流(work flow)思想在數值計算領域的拓展。這種流水線一般被稱為Graph

流水線有了,還要有被加工的數據。數據在流水線上被加工的執行過程,被稱為Session

Graph和Session的關系,類似于類和對象的關系。Session是Graph的動態實例。

圖計算的大致步驟如下:(這里以OpenVX函數為例,因為它更接近底層和硬件。)

1.vxCreateGraph。創建計算圖。

2.vxProcessGraph。運行計算圖。

在大多數Tensorflow示例中,你看不到Graph的身影。但它并不是不存在,而是默認所有新加入的Operation都添加到默認的Graph。

以下是使用多個Graph的示例:

import tensorflow as tf g1 = tf.Graph() with g1.as_default():c1 = tf.constant([1.0]) with tf.Graph().as_default() as g2:c2 = tf.constant([2.0])with tf.Session(graph=g1) as sess1:print sess1.run(c1) with tf.Session(graph=g2) as sess2:print sess2.run(c2)

Tensorflow對計算圖的簡化,不僅在于使用默認的Graph。還在于可以只計算部分的Graph。以上面的softmax運算為例,如果sess.run(add)的話,后面的ReLU和softmax運算都不會被執行。

雖然圖計算是Tensorflow的主要使用方式,然而一般性的tensor計算(即非圖計算),也是完全可行的。Tensorflow沒有提供相關的API,直接使用numpy就可以了。

下面的動圖形象的展示了計算圖的前向和后向運算的過程:

參考:

http://www.algorithmdog.com/dynamic-tensorflow

動態圖計算:Tensorflow 第一次清晰地在設計理念上領先

https://zhuanlan.zhihu.com/p/23932714

YJango的TensorFlow整體把握

http://www.cnblogs.com/lienhua34/p/5998853.html

Tensorflow學習筆記2:About Session, Graph, Operation and Tensor

Fused Graph

Fused Graph是TensorFlow新推出的概念。這里仍以softmax運算為例,講一下它的基本思想。

上面的softmax運算計算圖中,總共有4個operation。Fused Graph則將這4個op整合為1個op,發給運算單元。

這樣不同的硬件廠商就可以自行對這個整合的op進行解釋。功能強的硬件,可能直接就支持softmax運算。功能弱的硬件也不怕,反正總歸可以將softmax分解為基本運算的。

Qualcomm Hexagon平臺的Fused Graph實現可參見:

tensorflow/core/kernels/hexagon

上圖是另一個計算圖優化的例子。

參考:

https://developers.googleblog.com/2017/03/xla-tensorflow-compiled.html

XLA - TensorFlow, compiled

Eigen

Eigen是一個線性代數方面的C++模板庫。tensorflow和caffe2都使用了這個庫。

官網:

http://eigen.tuxfamily.org/

參見:

https://zhuanlan.zhihu.com/p/26512099

tensorflow和caffe2

TensorFlow高層封裝

目前對TensorFlow的封裝如下所示:

1.TensorFlow-Slim。主要提供了層一級的封裝。粒度和OpenVX類似。

2.tf.contrib.learn(之前也被稱為skflow)。提供了類似sklearn的接口。

前2個是TensorFlow自帶的封裝

3.第三個是TFLearn。在tf.contrib.learn上的封裝。需單獨安裝:

sudo pip install tflearn

http://tflearn.org/

4.Keras。

5.TensorLayer。這個的封裝粒度介于TensorFlow-Slim和TFLearn之間。

http://tensorlayer.readthedocs.io/en/latest/user/tutorial.html

6.Pretty Tensor。來自google的TensorFlow封裝。

https://github.com/google/prettytensor

7.Sonnet。來自Deepmind的TensorFlow封裝。

https://github.com/deepmind/sonnet

參見:

http://www.infoq.com/cn/articles/introduction-of-tensorflow-part06

深入淺出TensorFlow(六)TensorFlow高層封裝

Slim

代碼:

tensorflow/contrib/slim

示例:

https://github.com/mnuke/tf-slim-mnist

參見:

http://geek.csdn.net/news/detail/126133

如何用TensorFlow和TF-Slim實現圖像分類與分割

實戰心得:

tf-slim-mnist例子中mnist數據不是原始格式的,而是經過了datasets/download_and_convert_mnist.py的轉換。

該示例執行時也沒有控制臺的輸出信息,一度讓我覺得很不方便。后來才發現,原來可以用TensorBoard查看log文件夾。

TensorBoard是一個http服務,用以監控TensorFlow的執行。

tensorboard --logdir=log

啟動之后,用瀏覽器打開http://localhost:6006即可。

模型文件

tensorflow model包含2個文件:

a)Meta graph:

使用protocol buffer來保存整個tensorflow graph.例如所有的variables, operations, collections等等。這個文件使用.meta后綴。

b) Checkpoint file:

二進制文件包含所有的weights,biases,gradients和其他variables的值。這個文件使用.ckpt后綴,有2個文件:

mymodel.data-00000-of-00001

mymodel.index

.data文件就是保存訓練的variables我們將要使用它。

和這些文件一起,tensorflow還有一個文件叫checkpoint用來簡單保存最近一次保存checkpoint文件的記錄。

保存模型

w1 = tf.Variable(tf.random_normal(shape=[2]), name='w1') w2 = tf.Variable(tf.random_normal(shape=[5]), name='w2') saver = tf.train.Saver() sess = tf.Session() sess.run(tf.global_variables_initializer()) saver.save(sess, 'my_test_model')

加載模型

new_saver = tf.train.import_meta_graph('my_test_model-1000.meta') new_saver.restore(sess, tf.train.latest_checkpoint('./‘))

參考:

http://www.cnblogs.com/azheng333/archive/2017/06/09/6972619.html

Tensorflow模型保存和加載

http://blog.csdn.net/wiinter_fdd/article/details/72821923

Tensorflow中的模型持久化

TFRecord

TFRecord是TensorFlow官方定義的存放樣本數據文件。

參考:

http://www.cnblogs.com/antflow/p/7299029.html

TFRecord的使用

https://zhuanlan.zhihu.com/p/27481108

TensorFlow直接讀取圖片和讀寫TFRecords速度對比

多核(multicore),多線程(multi-thread)

在Tensorflow程序中,我們會經常看到”with tf.device(“/cpu:0”): “ 這個語句。單獨使用這個語句,而不做其他限制,實際上默認tensorflow程序占用所有可以使用的內存資源和CPU核。

參考:

http://deepnlp.org/blog/tensorflow-parallelism/

Tensorflow并行:多核(multicore),多線程(multi-thread)

總結

以上是生活随笔為你收集整理的TensorFlow(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。