溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python神經(jīng)網(wǎng)絡(luò)TensorFlow常用基本操作有哪些

發(fā)布時(shí)間:2021-11-04 09:10:46 來(lái)源:億速云 閱讀:131 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本篇內(nèi)容主要講解“python神經(jīng)網(wǎng)絡(luò)TensorFlow常用基本操作有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“python神經(jīng)網(wǎng)絡(luò)TensorFlow常用基本操作有哪些”吧!

    要將深度學(xué)習(xí)更快且更便捷地應(yīng)用于新的問(wèn)題中,選擇一款深度學(xué)習(xí)工具是必不可少的步驟。
    TensorFlow是谷歌于2015年11月9日正式開(kāi)源的計(jì)算框架。TensorFlow計(jì)算框架可以很好地支持深度學(xué)習(xí)的各種算法。

    TensorFlow很好地兼容了學(xué)術(shù)研究和工業(yè)生產(chǎn)的不同需求。

    一方面,TensorFlow的靈活性使得研究人員能夠利用它快速實(shí)現(xiàn)新的模型設(shè)計(jì);

    另一方面,TensorFlow強(qiáng)大的分布式支持,對(duì)工業(yè)界在海量數(shù)據(jù)集上進(jìn)行的模型訓(xùn)練也至關(guān)重要。作為谷歌開(kāi)源的深度學(xué)習(xí)框架,TensorFlow包含了谷歌過(guò)去10年間對(duì)于人工智能的探索和成功的商業(yè)應(yīng)用。

    除了TensorFlow,目前還有一些主流的深度學(xué)習(xí)開(kāi)源工具可以使用。每個(gè)工具都有著各自的特點(diǎn),可以根據(jù)自己的需求和喜好選擇適合自己的深度學(xué)習(xí)工具。比如我一開(kāi)始學(xué)習(xí)深度學(xué)習(xí)的時(shí)候接觸的是Caffe,然后TensorFlow開(kāi)源之后了解到了TensorFlow的一些特性,感覺(jué)還是更喜歡TensorFlow的風(fēng)格,當(dāng)然也考慮到會(huì)使用一種以上的深度學(xué)習(xí)工具也算見(jiàn)不錯(cuò)的事情。

    這篇文章對(duì)現(xiàn)在流行的五個(gè)開(kāi)源深度學(xué)習(xí)框架 caffe、Neon、TensorFlow、Theano、Torch 做了很嚴(yán)謹(jǐn)比較。作者開(kāi)源了他們的比較 Benchmarks 代碼:https://github.com/DL-Benchmarks/DL-Benchmarks

    文章比較了:可擴(kuò)展性(extensibility)、hardware utilization(硬件利用率)和速度(speed)三個(gè)方面

    • 評(píng)估測(cè)試都是部署在單機(jī)上,對(duì)于多線程 CPU、GPU(Nvidia Titan X)都進(jìn)行測(cè)試

    • 速度評(píng)估標(biāo)準(zhǔn)包括了梯度計(jì)算時(shí)間(gradient computation time)、前向傳播時(shí)間(forward time)對(duì)于卷積神經(jīng)網(wǎng)絡(luò),作者還

    • 對(duì)這幾個(gè)深度框架支持的不同的卷積算法以及相應(yīng)的性能表現(xiàn)做了實(shí)驗(yàn)

    通過(guò)實(shí)驗(yàn)得出了以下結(jié)論

    • Theano、Torch 是最具擴(kuò)展性的深度學(xué)習(xí)框架

    • 在 CPU 上的測(cè)試性能來(lái)看,Torch 最優(yōu),其次是 Theano

    • 在 GPU 上的性能表現(xiàn),對(duì)于大規(guī)模卷積以及全連接網(wǎng)絡(luò),還是 Torch 最優(yōu),其次是 Neon

    • Theano 在部署和訓(xùn)練 LSTM 網(wǎng)絡(luò)中奪得拔籌caffe 是最容易測(cè)試評(píng)估性能的標(biāo)準(zhǔn)深度學(xué)習(xí)框架

    • 最后,TensorFlow 與 Theano 有些相似,是比較靈活的框架,但是其性能表現(xiàn),目前還比不上上面的幾個(gè)框架

    但是,畢竟這篇文章已經(jīng)是過(guò)去時(shí)了,那時(shí)候TensorFlow 還只能用 cuDNN v.2 版本,而我現(xiàn)在已經(jīng)裝的是v5.1版本,而且TensorFlow 也已經(jīng)發(fā)布了1.0版本。現(xiàn)在各工具性能如何,還需要新的評(píng)測(cè)才能說(shuō)明問(wèn)題。

    變量:創(chuàng)建、初始化、保存和加載

    當(dāng)訓(xùn)練模型時(shí),用變量來(lái)存儲(chǔ)和更新參數(shù)。變量包含張量 (Tensor)存放于內(nèi)存的緩存區(qū)。建模時(shí)它們需要被明確地初始化,模型訓(xùn)練后它們必須被存儲(chǔ)到磁盤。這些變量的值可在之后模型訓(xùn)練和分析是被加載。

    本文檔描述以下兩個(gè)TensorFlow類。點(diǎn)擊以下鏈接可查看完整的API文檔:
    tf.Variable 類
    tf.train.Saver 類
    參考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]))

    分類問(wèn)題的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è)變量時(shí),你將一個(gè)張量作為初始值傳入構(gòu)造函數(shù)Variable()。TensorFlow提供了一系列操作符來(lái)初始化張量,初始值是常量或是隨機(jī)值。
    注意,所有這些操作符都需要你指定張量的shape。那個(gè)形狀自動(dòng)成為變量的shape。變量的shape通常是固定的,但TensorFlow提供了高級(jí)的機(jī)制來(lái)重新調(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")

    - 初始化

    變量的初始化必須在模型的其它操作運(yùn)行之前先明確地完成。最簡(jiǎn)單的方法就是添加一個(gè)給所有變量初始化的操作,并在使用模型之前首先運(yùn)行那個(gè)操作。
    使用tf.global_variables_initializer()添加一個(gè)操作對(duì)變量做初始化。記得在完全構(gòu)建好模型并加載之后再運(yùn)行那個(gè)操作。

    # 7.初始化變量
    init = tf.global_variables_initializer()
    # tf.global_variables_initializer()是并行地初始化所有變量
    # 有時(shí)候會(huì)需要用另一個(gè)變量的初始化值給當(dāng)前變量初始化,這就需要注意了
    # 用其它變量的值初始化一個(gè)新的變量時(shí),使用其它變量的initialized_value()屬性。
    # 你可以直接把已初始化的值作為新變量的初始值,或者把它當(dāng)做tensor計(jì)算得到一個(gè)值賦予新變量。
    # w1 = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="w1")
    # w2 = tf.Variable(w1.initialized_value(), name="w2")
    
    # 8.啟動(dòng)圖 (graph)
    sess = tf.Session()
    sess.run(init)

    - 由另一個(gè)變量初始化

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

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

    到此,相信大家對(duì)“python神經(jīng)網(wǎng)絡(luò)TensorFlow常用基本操作有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI