0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用TensorFlow進行機器學習研究

Tensorflowers ? 來源:cg ? 2019-02-05 10:06 ? 次閱讀

在此之前,我們介紹過用于自動微分的 TensorFlow API - 自動微分,優(yōu)化機器學習模型的關(guān)鍵技術(shù),這是機器學習的基本構(gòu)建塊。在今天的教程中,我們將使用先前教程中介紹的 TensorFlow 基礎(chǔ)來進行一些簡單的機器學習。

TensorFlow 還包括一個更高級別的神經(jīng)網(wǎng)絡(luò) API(tf.keras),它提供了有用的抽象來減少樣板。我們強烈建議那些使用神經(jīng)網(wǎng)絡(luò)的人使用更高級別的 API。但是,在這個簡短的教程中我們將從神經(jīng)網(wǎng)絡(luò)訓練的基本原理來建立一個堅實的基礎(chǔ)。

設(shè)置

import tensorflow as tftf.enable_eager_execution()

變量

TensorFlow 中的張量是不可變的無狀態(tài)對象。然而,機器學習模型需要具有可變的狀態(tài):隨著模型的訓練,計算預(yù)測的相同代碼應(yīng)該隨著時間的推移而表現(xiàn)不同(希望具有較低的損失?。?。要表示在計算過程中需要改變的狀態(tài),事實上您可以選擇依賴 Python 這種有狀態(tài)的編程語言:

# Using python statex = tf.zeros([10, 10])x += 2 # This is equivalent to x = x + 2, which does not mutate the original # value of xprint(x)

tf.Tensor([[2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.] [2。2. 2. 2. 2. 2. 2. 2. 2. 2.]],shape =(10,10),dtype = float32)

但是,TensorFlow 內(nèi)置了有狀態(tài)操作,這些操作通常比您所用的低級 Python 表示更易于使用。例如,為了表示模型中的權(quán)重,使用 TensorFlow 變量通常是方便有效的。

變量是一個存儲值的對象,當在 TensorFlow 計算中使用時,它將隱式地從該存儲值中讀取。有些操作(如:tf.assign_sub,tf.scatter_update 等)會操縱存儲在 TensorFlow 變量中的值。

v = tf.Variable(1.0)assert v.numpy() == 1.0# Re-assign the valuev.assign(3.0)assert v.numpy() == 3.0# Use `v` in a TensorFlow operation like tf.square() and reassignv.assign(tf.square(v))assert v.numpy() == 9.0

使用變量的計算在計算梯度時自動跟蹤。對于表示嵌入式的變量,TensorFlow 默認會進行稀疏更新,這樣可以提高計算效率和內(nèi)存效率。

使用變量也是一種快速讓代碼的讀者知道這段狀態(tài)是可變的方法。

示例:擬合線性模型

現(xiàn)在讓我們把目前掌握的幾個概念 — 張量、梯度帶、變量 — 應(yīng)用到構(gòu)建和訓練一個簡單模型中去。這通常涉及幾個步驟:

1.定義模型。

2.定義損失函數(shù)。

3.獲取訓練數(shù)據(jù)。

4.運行訓練數(shù)據(jù)并使用 “優(yōu)化器” 調(diào)整變量以匹配數(shù)據(jù)。

在本教程中,我們將介紹一個簡單線性模型的簡單示例:f(x) = x * W + b,它有兩個變量 —W 和 b。此外,我們將綜合數(shù)據(jù),以便訓練好的模型具有 W = 3.0 和 b = 2.0。

定義模型

讓我們定義一個簡單的類來封裝變量和計算。

class Model(object): def __init__(self): # Initialize variable to (5.0, 0.0) # In practice, these should be initialized to random values. self.W = tf.Variable(5.0) self.b = tf.Variable(0.0) def __call__(self, x): return self.W * x + self.b model = Model()assert model(3.0).numpy() == 15.0

定義損失函數(shù)

損失函數(shù)測量給定輸入的模型輸出與期望輸出的匹配程度。讓我們使用標準的 L2 損失。

def loss(predicted_y, desired_y): return tf.reduce_mean(tf.square(predicted_y - desired_y))

獲取訓練數(shù)據(jù)

讓我們用一些噪音(noise)合成訓練數(shù)據(jù)。

TRUE_W = 3.0TRUE_b = 2.0NUM_EXAMPLES = 1000inputs = tf.random_normal(shape=[NUM_EXAMPLES])noise = tf.random_normal(shape=[NUM_EXAMPLES])outputs = inputs * TRUE_W + TRUE_b + noise

在我們訓練模型之前,讓我們想象一下模型現(xiàn)在的位置。我們將用紅色繪制模型的預(yù)測,用藍色繪制訓練數(shù)據(jù)。

import matplotlib.pyplot as pltplt.scatter(inputs, outputs, c='b')plt.scatter(inputs, model(inputs), c='r')plt.show()print('Current loss: '),print(loss(model(inputs), outputs).numpy())

Current loss:

7.92897

定義訓練循環(huán)

我們現(xiàn)在有了網(wǎng)絡(luò)和培訓數(shù)據(jù)。我們來訓練一下,使用訓練數(shù)據(jù)更新模型的變量 ( W 和 b),以便使用梯度下降減少損失。在 tf.train.Optimizer 實現(xiàn)中有許多梯度下降方案的變體。我們強烈建議使用這種實現(xiàn),但本著從基本原理出發(fā)的精神,在這個特定的例子中,我們將自己實現(xiàn)基本的數(shù)學。

def train(model, inputs, outputs, learning_rate): with tf.GradientTape() as t: current_loss = loss(model(inputs), outputs) dW, db = t.gradient(current_loss, [model.W, model.b]) model.W.assign_sub(learning_rate * dW) model.b.assign_sub(learning_rate * db)

最后,讓我們反復運行訓練數(shù)據(jù),看看 W 和 b 是如何發(fā)展的。

model = Model()# Collect the history of W-values and b-values to plot laterWs, bs = [], []epochs = range(10)for epoch in epochs: Ws.append(model.W.numpy()) bs.append(model.b.numpy()) current_loss = loss(model(inputs), outputs) train(model, inputs, outputs, learning_rate=0.1) print('Epoch %2d: W=%1.2f b=%1.2f, loss=%2.5f' % (epoch, Ws[-1], bs[-1], current_loss))# Let's plot it allplt.plot(epochs, Ws, 'r', epochs, bs, 'b')plt.plot([TRUE_W] * len(epochs), 'r--', [TRUE_b] * len(epochs), 'b--')plt.legend(['W', 'b', 'true W', 'true_b'])plt.show()

Epoch 0: W=5.00 b=0.00, loss=7.92897Epoch 1: W=4.64 b=0.35, loss=5.61977Epoch 2: W=4.35 b=0.64, loss=4.07488Epoch 3: W=4.11 b=0.88, loss=3.04133Epoch 4: W=3.91 b=1.07, loss=2.34987Epoch 5: W=3.75 b=1.23, loss=1.88727Epoch 6: W=3.62 b=1.36, loss=1.57779Epoch 7: W=3.51 b=1.47, loss=1.37073Epoch 8: W=3.42 b=1.55, loss=1.23221Epoch 9: W=3.35 b=1.62, loss=1.13954

下一步

在本教程中,我們介紹了變量 Variables,使用了到目前為止討論的 TensorFlow 基本原理構(gòu)建并訓練了一個簡單的線性模型。

從理論上講,這幾乎是您使用 TensorFlow 進行機器學習研究所需要的全部內(nèi)容。在實踐中,特別是對于神經(jīng)網(wǎng)絡(luò),更高級別的 APItf.keras 會更方便,因為它提供更高級別的構(gòu)建塊(稱為 “層”),保存和恢復狀態(tài)的實用程序,一套損失函數(shù),一套優(yōu)化策略等等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學習
    +關(guān)注

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131841
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    327

    瀏覽量

    60413

原文標題:帶你使用 TensorFlow 進行機器學習研究

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用TensorFlow構(gòu)建機器學習模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創(chuàng)建一個簡單的機器學習模型。
    的頭像 發(fā)表于 01-08 09:25 ?802次閱讀
    如何使用<b class='flag-5'>TensorFlow</b>構(gòu)建<b class='flag-5'>機器</b><b class='flag-5'>學習</b>模型

    關(guān)于 TensorFlow

    世界上最好的機器學習工具庫之一的東東,我們希望能夠創(chuàng)造一個開放的標準,來促進交流研究想法和將機器學習算法產(chǎn)品化。Google的工程師們確實在
    發(fā)表于 03-30 19:57

    谷歌深度學習插件tensorflow

    前段時間忙著研究Zedboard,這幾天穿插著加入Python的深度學習研究,最近使用谷歌的tensorflow比較多,而且官方出了中文教程,比較給力,下面在Windows10下安裝
    發(fā)表于 07-04 13:46

    干貨!教你怎么搭建TensorFlow深度學習開發(fā)環(huán)境!

    `TensorFlow是谷歌基于DistBelief進行研發(fā)的第二代人工智能學習系統(tǒng),其命名來源于本身的運行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算
    發(fā)表于 09-27 13:56

    tensorflow機器學習日志

    tensorflow學習日志(四)機器學習(泛化,過擬合, 數(shù)據(jù)集,驗證集,測試集)
    發(fā)表于 04-14 06:32

    TensorFlow的特點和基本的操作方式

    Tensorflow是Google開源的深度學習框架,來自于Google Brain研究項目,在Google第一代分布式機器學習框架Dist
    發(fā)表于 11-23 09:56

    labview+yolov4+tensorflow+openvion深度學習

    缺陷檢測主要知識點:1Tensorflow-GPU環(huán)境的搭建Tensorflow object環(huán)境搭建學會如何標注圖片如何labview快速通過遷移學習訓練自己的模型如何利用labview生成優(yōu)化后的OPENVINO模型IR如何
    發(fā)表于 05-10 22:33

    何用BMlang搭建Tensorflow模型?

    在EVM1684上如何用BMlang搭建一個Tensorflow模型,求助官方一個demo。
    發(fā)表于 09-18 07:00

    TensorFlow的框架結(jié)構(gòu)解析

    TensorFlow是谷歌的第二代開源的人工智能學習系統(tǒng),是用來實現(xiàn)神經(jīng)網(wǎng)絡(luò)的內(nèi)置框架學習軟件庫。目前,TensorFlow機器
    發(fā)表于 04-04 14:39 ?7038次閱讀
    <b class='flag-5'>TensorFlow</b>的框架結(jié)構(gòu)解析

    深度學習的發(fā)展與應(yīng)用,TensorFlow研究到實踐

    TensorFlow 的目標是成為人人可用的機器學習平臺,能夠幫助機器學習研究者、開發(fā)者,去表
    的頭像 發(fā)表于 06-05 11:00 ?4532次閱讀

    Swift for TensorFlow:無邊界機器學習,值得大家期待

    據(jù)資料顯示,Swift for TensorFlow:無邊界機器學習簡介主要是——Swift for TensorFlow 是為下一代機器
    的頭像 發(fā)表于 09-20 14:20 ?2859次閱讀

    推薦初學者的TensorFlow延伸閱讀

    推薦初學者的延伸閱讀 除了課程內(nèi)容外,TensorFlow 官網(wǎng)也為大家提供了學習研究機器學習豐富實用的資源,例如老師在課程中提到的
    的頭像 發(fā)表于 11-04 18:31 ?1795次閱讀

    使用TensorFlow建立深度學習機器學習網(wǎng)絡(luò)

    教你使用TensorFlow建立深度學習機器學習網(wǎng)絡(luò)。
    發(fā)表于 03-26 09:44 ?18次下載

    如何使用TensorFlow進行大規(guī)模和分布式的QML模擬

    發(fā)布人:Google 團隊 Cheng Xing 和 Michael Broughton 訓練大型機器學習模型是 TensorFlow 的核心能力。多年來,訓練規(guī)模已成為 NLP、圖像識別和藥物研發(fā)
    的頭像 發(fā)表于 08-10 17:31 ?2520次閱讀

    輕松入門,高效成長: "TensorFlow 機器學習技能解鎖季"

    體系,體驗 TensorFlow 的最佳實踐模式? 《 TensorFlow 入門實操課程》 帶你零基礎(chǔ)快速上手 想高效實踐機器學習模型部署,借助
    的頭像 發(fā)表于 11-10 11:35 ?699次閱讀