python神經網絡TensorFlow簡介常用基本操作教程

要將深度學習更快且更便捷地應用於新的問題中,選擇一款深度學習工具是必不可少的步驟。

TensorFlow是谷歌於2015年11月9日正式開源的計算框架。

TensorFlow計算框架可以很好地支持深度學習的各種算法。

TensorFlow很好地兼容瞭學術研究和工業生產的不同需求。

一方面,TensorFlow的靈活性使得研究人員能夠利用它快速實現新的模型設計;

另一方面,TensorFlow強大的分佈式支持,對工業界在海量數據集上進行的模型訓練也至關重要。

作為谷歌開源的深度學習框架,TensorFlow包含瞭谷歌過去10年間對於人工智能的探索和成功的商業應用。

除瞭TensorFlow,目前還有一些主流的深度學習開源工具可以使用。每個工具都有著各自的特點,可以根據自己的需求和喜好選擇適合自己的深度學習工具。比如我一開始學習深度學習的時候接觸的是Caffe,然後TensorFlow開源之後瞭解到瞭TensorFlow的一些特性,感覺還是更喜歡TensorFlow的風格,當然也考慮到會使用一種以上的深度學習工具也算見不錯的事情。

其它一些主流的深度學習工具

Caffe: http://caffe.berkeleyvision.org/(Convolutional Architecture for Fast Feature Embedding) BVLC

MXNet: http://mxnet.readthedocs.io/en/latest/ (百度 DMLC(分佈式機器學習社區) 簡稱”深盟”)

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(微軟深度學習工具包 )

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.

框架對比

這篇文章對現在流行的五個開源深度學習框架 caffe、Neon、TensorFlow、Theano、Torch 做瞭很嚴謹比較。

作者開源瞭他們的比較 Benchmarks 代碼:https://github.com/DL-Benchmarks/DL-Benchmarks

文章比較瞭:

可擴展性(extensibility),hardware utilization(硬件利用率),速度(speed)三個方面

  • 評估測試都是部署在單機上,對於多線程 CPU、GPU(Nvidia Titan X)都進行測試
  • 速度評估標準包括瞭梯度計算時間(gradient computation time)、前向傳播時間(forward time)對於卷積神經網絡,作者還
  • 對這幾個深度框架支持的不同的卷積算法以及相應的性能表現做瞭實驗

通過實驗得出瞭以下結論

  • Theano、Torch 是最具擴展性的深度學習框架
  • 在 CPU 上的測試性能來看,Torch 最優,其次是 Theano
  • 在 GPU 上的性能表現,對於大規模卷積以及全連接網絡,還是 Torch 最優,其次是 Neon
  • Theano 在部署和訓練 LSTM 網絡中奪得拔籌caffe 是最容易測試評估性能的標準深度學習框架
  • 最後,TensorFlow 與 Theano 有些相似,是比較靈活的框架,但是其性能表現,目前還比不上上面的幾個框架

但是,畢竟這篇文章已經是過去時瞭,那時候TensorFlow 還隻能用 cuDNN v.2 版本,而我現在已經裝的是v5.1版本,而且TensorFlow 也已經發佈瞭1.0版本。現在各工具性能如何,還需要新的評測才能說明問題。

變量:創建、初始化、保存和加載

當訓練模型時,用變量來存儲和更新參數。變量包含張量 (Tensor)存放於內存的緩存區。建模時它們需要被明確地初始化,模型訓練後它們必須被存儲到磁盤。這些變量的值可在之後模型訓練和分析是被加載。

本文檔描述以下兩個TensorFlow類。點擊以下鏈接可查看完整的API文檔:
參考TensorFlow中文社區

– 添加神經層

輸入參數有 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 函數 cross_entropy 交叉熵
loss = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))

– 創建

當創建一個變量時,你將一個張量作為初始值傳入構造函數Variable()。TensorFlow提供瞭一系列操作符來初始化張量,初始值是常量或是隨機值。
註意,所有這些操作符都需要你指定張量的shape。那個形狀自動成為變量的shape。變量的shape通常是固定的,但TensorFlow提供瞭高級的機制來重新調整其行列數。

# 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()添加一個操作對變量做初始化。記得在完全構建好模型並加載之後再運行那個操作。

# 7.初始化變量
init = tf.global_variables_initializer()
# tf.global_variables_initializer()是並行地初始化所有變量
# 有時候會需要用另一個變量的初始化值給當前變量初始化,這就需要註意瞭
# 用其它變量的值初始化一個新的變量時,使用其它變量的initialized_value()屬性。
# 你可以直接把已初始化的值作為新變量的初始值,或者把它當做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)

– 由另一個變量初始化

你有時候會需要用另一個變量的初始化值給當前變量初始化。由於tf.global_variables_initializer()是並行地初始化所有變量,所以在有這種需求的情況下需要小心。用其它變量的值初始化一個新的變量時,使用其它變量的initialized_value()屬性。你可以直接把已初始化的值作為新變量的初始值,或者把它當做tensor計算得到一個值賦予新變量。

w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1")
w2 = tf.Variable(w1.initialized_value(), name="w2")

以上就是python神經網絡TensorFlow簡介常用基本操作教程的詳細內容,更多關於TensorFlow基本操作簡介的資料請關註WalkonNet其它相關文章!

推薦閱讀: