python神經(jīng)網(wǎng)絡(luò)TensorFlow簡介常用基本操作教程
要將深度學(xué)習(xí)更快且更便捷地應(yīng)用于新的問題中,選擇一款深度學(xué)習(xí)工具是必不可少的步驟。
TensorFlow是谷歌于2015年11月9日正式開源的計算框架。
TensorFlow計算框架可以很好地支持深度學(xué)習(xí)的各種算法。
TensorFlow很好地兼容了學(xué)術(shù)研究和工業(yè)生產(chǎn)的不同需求。
一方面,TensorFlow的靈活性使得研究人員能夠利用它快速實現(xiàn)新的模型設(shè)計;
另一方面,TensorFlow強大的分布式支持,對工業(yè)界在海量數(shù)據(jù)集上進(jìn)行的模型訓(xùn)練也至關(guān)重要。
作為谷歌開源的深度學(xué)習(xí)框架,TensorFlow包含了谷歌過去10年間對于人工智能的探索和成功的商業(yè)應(yīng)用。
除了TensorFlow,目前還有一些主流的深度學(xué)習(xí)開源工具可以使用。每個工具都有著各自的特點,可以根據(jù)自己的需求和喜好選擇適合自己的深度學(xué)習(xí)工具。比如我一開始學(xué)習(xí)深度學(xué)習(xí)的時候接觸的是Caffe,然后TensorFlow開源之后了解到了TensorFlow的一些特性,感覺還是更喜歡TensorFlow的風(fēng)格,當(dāng)然也考慮到會使用一種以上的深度學(xué)習(xí)工具也算見不錯的事情。
其它一些主流的深度學(xué)習(xí)工具
Caffe: http://caffe.berkeleyvision.org/(Convolutional Architecture for Fast Feature Embedding) BVLC
MXNet: http://mxnet.readthedocs.io/en/latest/ (百度 DMLC(分布式機器學(xué)習(xí)社區(qū)) 簡稱”深盟”)
Torch: http://torch.ch/(Facebook Google DeepMind Twitter FAIR)
Theano: http://deeplearning.net/software/theano/(the LISA group at the University of Montreal(蒙特利爾))
TensorFlow: https://www.tensorflow.org/(Google)
CNTK(微軟深度學(xué)習(xí)工具包 )
DeepLearning4J: http://deeplearning4j.org/
deepmat: https://github.com/kyunghyuncho/deepmat
Neon: http://neon.nervanasys.com/docs/latest/index.html
Eblearn: http://eblearn.sourceforge.net/
PyLearn: http://deeplearning.net/software/pylearn2/
chainer: https://github.com/pfnet/chainer
Bahrampour S, Ramakrishnan N, Schott L, et al. Comparative Study of Deep Learning Software Frameworks[J]. Computer Science, 2016.
框架對比
這篇文章對現(xiàn)在流行的五個開源深度學(xué)習(xí)框架 caffe、Neon、TensorFlow、Theano、Torch 做了很嚴(yán)謹(jǐn)比較。
作者開源了他們的比較 Benchmarks 代碼:https://github.com/DL-Benchmarks/DL-Benchmarks
文章比較了:
可擴展性(extensibility),hardware utilization(硬件利用率),速度(speed)三個方面
- 評估測試都是部署在單機上,對于多線程 CPU、GPU(Nvidia Titan X)都進(jìn)行測試
- 速度評估標(biāo)準(zhǔn)包括了梯度計算時間(gradient computation time)、前向傳播時間(forward time)對于卷積神經(jīng)網(wǎng)絡(luò),作者還
- 對這幾個深度框架支持的不同的卷積算法以及相應(yīng)的性能表現(xiàn)做了實驗
通過實驗得出了以下結(jié)論
- Theano、Torch 是最具擴展性的深度學(xué)習(xí)框架
- 在 CPU 上的測試性能來看,Torch 最優(yōu),其次是 Theano
- 在 GPU 上的性能表現(xiàn),對于大規(guī)模卷積以及全連接網(wǎng)絡(luò),還是 Torch 最優(yōu),其次是 Neon
- Theano 在部署和訓(xùn)練 LSTM 網(wǎng)絡(luò)中奪得拔籌caffe 是最容易測試評估性能的標(biāo)準(zhǔn)深度學(xué)習(xí)框架
- 最后,TensorFlow 與 Theano 有些相似,是比較靈活的框架,但是其性能表現(xiàn),目前還比不上上面的幾個框架
但是,畢竟這篇文章已經(jīng)是過去時了,那時候TensorFlow 還只能用 cuDNN v.2 版本,而我現(xiàn)在已經(jīng)裝的是v5.1版本,而且TensorFlow 也已經(jīng)發(fā)布了1.0版本?,F(xiàn)在各工具性能如何,還需要新的評測才能說明問題。
變量:創(chuàng)建、初始化、保存和加載
當(dāng)訓(xùn)練模型時,用變量來存儲和更新參數(shù)。變量包含張量 (Tensor)存放于內(nèi)存的緩存區(qū)。建模時它們需要被明確地初始化,模型訓(xùn)練后它們必須被存儲到磁盤。這些變量的值可在之后模型訓(xùn)練和分析是被加載。
本文檔描述以下兩個TensorFlow類。點擊以下鏈接可查看完整的API文檔:
參考TensorFlow中文社區(qū)
- 添加神經(jīng)層
輸入?yún)?shù)有 inputs
, in_size
, out_size
, 和 activation_function
# 添加層 def add_layer(inputs, in_size, out_size, activation_function=None): weights = tf.Variable(tf.random_normal([in_size, out_size]), name='weights') biases = tf.Variable(tf.zeros([1, out_size]) + 0.1, name='biases') y = tf.matmul(inputs, weights) + biases if activation_function is None: outputs = y else: outputs = activation_function(y) return outputs
- loss
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))
分類問題的loss 函數(shù) cross_entropy 交叉熵
loss = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
- 創(chuàng)建
當(dāng)創(chuàng)建一個變量時,你將一個張量作為初始值傳入構(gòu)造函數(shù)Variable()。TensorFlow提供了一系列操作符來初始化張量,初始值是常量或是隨機值。
注意,所有這些操作符都需要你指定張量的shape。那個形狀自動成為變量的shape。變量的shape通常是固定的,但TensorFlow提供了高級的機制來重新調(diào)整其行列數(shù)。
# Create two variables. weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights") biases = tf.Variable(tf.zeros([200]), name="biases")
- 初始化
變量的初始化必須在模型的其它操作運行之前先明確地完成。最簡單的方法就是添加一個給所有變量初始化的操作,并在使用模型之前首先運行那個操作。
使用tf.global_variables_initializer()
添加一個操作對變量做初始化。記得在完全構(gòu)建好模型并加載之后再運行那個操作。
# 7.初始化變量 init = tf.global_variables_initializer() # tf.global_variables_initializer()是并行地初始化所有變量 # 有時候會需要用另一個變量的初始化值給當(dāng)前變量初始化,這就需要注意了 # 用其它變量的值初始化一個新的變量時,使用其它變量的initialized_value()屬性。 # 你可以直接把已初始化的值作為新變量的初始值,或者把它當(dāng)做tensor計算得到一個值賦予新變量。 # w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1") # w2 = tf.Variable(w1.initialized_value(), name="w2") # 8.啟動圖 (graph) sess = tf.Session() sess.run(init)
- 由另一個變量初始化
你有時候會需要用另一個變量的初始化值給當(dāng)前變量初始化。由于tf.global_variables_initializer()
是并行地初始化所有變量,所以在有這種需求的情況下需要小心。用其它變量的值初始化一個新的變量時,使用其它變量的initialized_value()
屬性。你可以直接把已初始化的值作為新變量的初始值,或者把它當(dāng)做tensor計算得到一個值賦予新變量。
w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1") w2 = tf.Variable(w1.initialized_value(), name="w2")
以上就是python神經(jīng)網(wǎng)絡(luò)TensorFlow簡介常用基本操作教程的詳細(xì)內(nèi)容,更多關(guān)于TensorFlow基本操作簡介的資料請關(guān)注腳本之家其它相關(guān)文章!
- python深度學(xué)習(xí)tensorflow安裝調(diào)試教程
- python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)模型的保存和讀取
- Python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)基礎(chǔ)概括
- Python3.8安裝tensorflow的簡單方法步驟
- python神經(jīng)網(wǎng)絡(luò)tensorflow利用訓(xùn)練好的模型進(jìn)行預(yù)測
- python神經(jīng)網(wǎng)絡(luò)使用tensorflow構(gòu)建長短時記憶LSTM
- python深度學(xué)習(xí)tensorflow入門基礎(chǔ)教程示例
相關(guān)文章
簡單了解python關(guān)鍵字global nonlocal區(qū)別
這篇文章主要介紹了簡單了解python關(guān)鍵字global nonlocal區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09tensorflow實現(xiàn)加載mnist數(shù)據(jù)集
這篇文章主要為大家詳細(xì)介紹了tensorflow實現(xiàn)加載mnist數(shù)據(jù)集,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09Python的shutil模塊中文件的復(fù)制操作函數(shù)詳解
shutil被定義為Python中的一個高級的文件操作模塊,擁有比os模塊中更強大的函數(shù),這里我們就來看一下Python的shutil模塊中文件的復(fù)制操作函數(shù)詳解2016-07-07使用Flask開發(fā)RESTful?API的方法實現(xiàn)
RESTful?API是一種基于REST架構(gòu)風(fēng)格設(shè)計的Web服務(wù)接口,本文主要介紹了使用Flask開發(fā)RESTful?API的方法實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2023-11-11pytorch 如何自定義卷積核權(quán)值參數(shù)
這篇文章主要介紹了pytorch 自定義卷積核權(quán)值參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05python學(xué)習(xí)之基于Python的人臉識別技術(shù)學(xué)習(xí)
面部識別技術(shù)的應(yīng)用越來越廣泛,它廣泛應(yīng)用于安全系統(tǒng)、人機交互、社交媒體、醫(yī)療保健等領(lǐng)域。本文介紹了基于Python的人臉識別技術(shù),感興趣的小伙伴可以參考閱讀2023-03-03Python __getattr__與__setattr__使用方法
__getattr__和__setattr__可以用來對屬性的設(shè)置和取值進(jìn)行處理2008-09-09