」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 連接機器學習與 TensorFlow:從 Python 到 JavaScript

連接機器學習與 TensorFlow:從 Python 到 JavaScript

發佈於2024-11-01
瀏覽:654

Bridging Machine Learning with TensorFlow: From Python to JavaScript

使用 TensorFlow 將機器學習帶入生活

身為 JavaScript 開發人員,深入研究機器學習並不像看起來那麼令人畏懼。雖然在技術上可以使用 Node.js 套件處理所有事情,但 Python ML 生態系統太豐富且完善,不容忽視。另外,Python 的使用起來非常方便。因此,使用 Python 來處理後端的繁重工作是有意義的。準備好模型後,您可以將其匯出為前端友好的格式並將其加載到客戶端上以運行預測。

生成模型

在這篇文章中,我們將建立一個模型,根據 Twitter 粉絲數量來預測藝術家的受歡迎程度。

第一步是取得資料集。對於此項目,我們將使用如下所示的 arts.csv 檔案:

twitter_followers,popularity,handle
111024636,94,justinbieber
107920365,91,rihanna
106599902,89,katyperry
95307659,97,taylorswift13
66325495,87,selenagomez
66325135,71,selenagomez
60943147,83,jtimberlake
54815915,82,britneyspears
53569307,85,shakira

正如您所看到的,這裡有兩個關鍵值:twitter_followers 和受歡迎度。這很好地為我們建立了序列模型,其中 x 將是 twitter_followers,y 將是流行度。

序列模型是建構模型最簡單的選項之一。雖然選擇最終取決於特定的用例,但我現在保持簡單並堅持使用這種方法。

建構後端

當您建立模型時,您需要解決一些基本任務:

  • 清理或標準化資料
  • 將資料分為訓練(80%)和測試(20%)
  • 選擇模型以及優化器和損失函數等設定
  • 訓練模型(擬合)
  • 評估模式
  • 保存模型

下面的程式碼讓您對這些任務有一個很好的概述,儘管它不是完整的圖片。你可以在Github上查看完整程式碼。

Python:TensorFlow 入門

def get_model(x, y):
    x_normalized = layers.Normalization(
        axis=None,
    )
    x_normalized.adapt(np.array(x))

    model = tensorflow.keras.Sequential([x_normalized, layers.Dense(units=1)])

    model.compile(
        optimizer=tensorflow.keras.optimizers.Adam(learning_rate=0.1),
        loss="mean_squared_error",
    )

    model.fit(
        x,
        y,
        epochs=2,
        verbose=0,
        validation_split=0.2,
    )

    return model

def main:
  train_features, test_features, train_labels, test_labels = split_data(dataset)

  model = get_model(
      train_features["twitter_followers"],
      train_labels,
  )

  test_loss = model.evaluate(
      test_features["twitter_followers"], test_labels, verbose=2
  )

  model.export("./saved_model")

如您所見,Python 程式碼非常簡單。有一個主要函數處理資料的分割、取得模型、評估它,最後保存它。

簡而言之,這些是創建模型的基本步驟。但讓我們面對現實:建立一個真正有效的模型既是一門藝術,也是一門科學。我的目標只是展示 Python 入門是多麼容易。然而,要創建一個性能良好的模型,需要做很多工作,例如擁有可靠的資料集、清理和標準化資料、選擇正確的模型和設置,以及擁有訓練它的計算能力。所有這些任務都需要大量的時間和精力投入!

在前端使用模型

現在我們已經訓練並保存了模型,是時候將其引入前端了。在這一步驟中,我們將以網路友好的格式載入模型,以便我們可以直接在瀏覽器中執行預測。無論您使用 TensorFlow.js 還是其他程式庫,將機器學習整合到您的 Web 應用程式中都會開啟一個充滿可能性的世界。讓我們深入探討如何做到這一點!

TensorFlow 提供了一個名為 tensorflowjs_converter 的 npm 包,可協助將已儲存的模型轉換為 JSON 和二進位檔案。

tensorflowjs_converter --input_format=tf_saved_model model/saved_model out/public
  • tf_saved_model:這是用來保存模型的格式。
  • model/saved_model:這是執行Python程式碼時保存模型的目錄。
  • out/public:這是保存前端友善檔案的輸出目錄。資料夾結構將如下所示:
ls -la out/public

group1-shard1of1.bin
model.json

此設定可以輕鬆存取 Web 應用程式所需的檔案。

JavaScript:使用 TensorFlowJS

完整程式碼可以在Github上查看。

const model = await tensorflow.loadGraphModel("model.json");

const getPopularity = (followers) => {
  const followers = 1_000;
  const normalized = followers;
  const x = tensorflow.tensor(normalized).reshape([-1, 1]);

  const result = model.predict(x);
  const values = result.arraySync();

  const y = values[0][0].toFixed(2) * 100;
  const popularity = y;

  return popularity;
};

如前所述,該模型旨在根據 Twitter 追蹤者數量「預測受歡迎程度」。雖然它看起來像是一個簡單的範例,但它有效地演示瞭如何在後端生成模型並在前端使用它。

稍微看一下getPopularity是如何處理輸入的,但關鍵一行是model.predict(x),它使用模型根據輸入x預測一個值(y)。

前往演示頁面並嘗試一些 Twitter 手把。這是一種有趣的方式來了解模型如何根據追蹤者數量預測受歡迎程度。

結論

TensorFlow 是一個很棒的函式庫,為後端和前端開發提供工具。任何 JavaScript 開發人員都可以深入使用 Python 或類似語言建立模型,然後輕鬆將模型匯入前端以運行預測。

雖然機器學習是一個廣泛的領域,需要大量知識,但 TensorFlow 等工具有助於彌合軟體和機器學習開發人員之間的差距。對於那些希望將 ML 融入他們的專案中的人來說,這讓旅程變得更加順利!

版本聲明 本文轉載於:https://dev.to/garciadiazjaime/bridging-machine-learning-with-tensorflow-from-python-to-javascript-25hp?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何使用正規表示式來匹配帶有或不帶有可選 HTTP 和 WWW 前綴的 URL?
    如何使用正規表示式來匹配帶有或不帶有可選 HTTP 和 WWW 前綴的 URL?
    使用可選 HTTP 和 WWW 前綴匹配 URL正則表達式是執行複雜模式匹配任務的強大工具。當涉及到符合 URL 時,格式通常會有所不同,例如是否包含「http://www」。 使用正規表示式的解決方案匹配帶或不帶「http://www」的 URL。前綴,可以使用以下正規表示式:((https?|f...
    程式設計 發佈於2024-11-09
  • 如何在不依賴副檔名的情況下確定檔案類型?
    如何在不依賴副檔名的情況下確定檔案類型?
    如何在不依賴副檔名的情況下偵測檔案類型除了檢查檔案的副檔名之外,確定檔案是mp3 還是圖像格式是很有價值的程式設計中的任務。這是一個不依賴擴充的全面解決方案:PHP >= 5.3:$mimetype = finfo_fopen(fopen($filename, 'r'), FILEINFO_MIME...
    程式設計 發佈於2024-11-09
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-09
  • 在 JavaScript 中實作斐波那契數列:常見方法和變體
    在 JavaScript 中實作斐波那契數列:常見方法和變體
    作為開發人員,您可能遇到過編寫函數來計算斐波那契數列中的值的任務。這個經典問題經常出現在程式設計面試中,通常要求遞歸實現。然而,面試官有時可能會要求具體的方法。在本文中,我們將探討 JavaScript 中最常見的斐波那契數列實作。 什麼是斐波那契數列? 首先,讓我們回顧一下。斐波...
    程式設計 發佈於2024-11-09
  • 如何使用 .htaccess 更改共享伺服器上的 PHP 版本?
    如何使用 .htaccess 更改共享伺服器上的 PHP 版本?
    在共享伺服器上透過.htaccess 更改PHP 版本如果您正在操作共享伺服器並且需要更改PHP 版本,可以透過.htaccess文件來做到這一點。這允許您為您的網站運行特定的 PHP 版本,同時伺服器維護其預設版本。 要切換 PHP 版本,請按照下列步驟操作:找到 . htaccess 檔案: 該...
    程式設計 發佈於2024-11-09
  • 如何在Ajax資料載入過程中顯示進度條?
    如何在Ajax資料載入過程中顯示進度條?
    如何在Ajax 資料載入期間顯示進度條處理使用者觸發的事件(例如從下拉方塊中選擇值)時,通常會使用非同步擷取資料阿賈克斯。在獲取數據時,向用戶提供正在發生某事的視覺指示是有益的。本文探討了一種在 Ajax 請求期間顯示進度條的方法。 使用 Ajax 實作進度條要建立一個準確追蹤 Ajax 呼叫進度的...
    程式設計 發佈於2024-11-09
  • TCJavaScript 更新、TypeScript Beta、Node.js 等等
    TCJavaScript 更新、TypeScript Beta、Node.js 等等
    歡迎來到新一期的「JavaScript 本週」! 今天,我們從 TC39、Deno 2 正式版本、TypeScript 5.7 Beta 等方面獲得了一些針對 JavaScript 語言的巨大新更新,所以讓我們開始吧! TC39 更新:JavaScript 有何變化? 最近在東京...
    程式設計 發佈於2024-11-09
  • 為什麼 Bootstrap 用戶應該在下一個專案中考慮使用 Tailwind CSS?
    為什麼 Bootstrap 用戶應該在下一個專案中考慮使用 Tailwind CSS?
    Tailwind CSS 入门 Bootstrap 用户指南 大家好! ?如果您是 Bootstrap 的长期用户,并且对过渡到 Tailwind CSS 感到好奇,那么本指南适合您。 Tailwind 是一个实用程序优先的 CSS 框架,与 Bootstrap 基于组件的结构相比...
    程式設計 發佈於2024-11-09
  • 組合與繼承
    組合與繼承
    介绍 继承和组合是面向对象编程(OOP)中的两个基本概念,但它们的用法不同并且具有不同的目的。这篇文章的目的是回顾这些目的,以及选择它们时要记住的一些事情。 继承的概念 当我们考虑在设计中应用继承时,我们必须了解: 定义:在继承中,一个类(称为派生类或子类)可以从另...
    程式設計 發佈於2024-11-09
  • 如何在 JavaScript 中將浮點數轉換為整數?
    如何在 JavaScript 中將浮點數轉換為整數?
    如何在 JavaScript 中將浮點數轉換為整數要將浮點數轉換為整數,您可以使用 JavaScript內建數學物件。 Math 物件提供了多種處理數學運算的方法,包括舍入和截斷。 方法:1。截斷:截斷去除數字的小數部分。要截斷浮點數,請使用 Math.floor()。此方法向下舍入到小於或等於原始...
    程式設計 發佈於2024-11-09
  • 標準字串實作中的 c_str() 和 data() 是否有顯著差異?
    標準字串實作中的 c_str() 和 data() 是否有顯著差異?
    標準字串實作中的c_str()與data()STL中c_str()和data()函數的區別人們普遍認為類似的實作是基於空終止的。據推測,c_str() 總是提供以 null 結尾的字串,而 data() 則不然。 然而,在實踐中,實作經常透過讓 data() 在內部呼叫 c_str() 來消除這種區...
    程式設計 發佈於2024-11-09
  • C/C++ 中的類型轉換如何運作以及程式設計師應該注意哪些陷阱?
    C/C++ 中的類型轉換如何運作以及程式設計師應該注意哪些陷阱?
    了解C/C 中的類型轉換型別轉換是C 和C 程式設計的一個重要方面,涉及將資料從一種類型轉換為另一種類型。它在記憶體管理、資料操作和不同類型之間的互通性方面發揮著重要作用。然而,了解類型轉換的工作原理及其限制對於防止潛在錯誤至關重要。 明確型別轉換使用 (type) 語法執行的明確型別轉換可讓程式設...
    程式設計 發佈於2024-11-09
  • 我們如何在 Golang 中為不同的資料類型建立通用函數?
    我們如何在 Golang 中為不同的資料類型建立通用函數?
    Golang 中的通用方法參數在 Go 中,一個常見的需求是有一個對不同類型的資料進行操作的函數。以計算特定類型切片中元素數量的函數為例。如何設計這個函數來處理任何類型的數據,而不僅僅是它最初設計的特定類型? 一種方法是使用接口,它本質上是定義類型必須的一組方法的契約實現以符合接口。透過使用介面作為...
    程式設計 發佈於2024-11-09
  • 使用 Node.js 流進行高效能資料處理
    使用 Node.js 流進行高效能資料處理
    在本文中,我们将深入研究 Node.js Streams 并了解它们如何帮助高效处理大量数据。流提供了一种处理大型数据集的优雅方式,例如读取大型文件、通过网络传输数据或处理实时信息。与一次性读取或写入整个数据的传统 I/O 操作不同,流将数据分解为可管理的块并逐块处理它们,从而实现高效的内存使用。 ...
    程式設計 發佈於2024-11-09
  • 如何在 Python 中產生字串的所有可能排列,包括處理重複項?
    如何在 Python 中產生字串的所有可能排列,包括處理重複項?
    Python 中的字串排列查找給定字串的所有可能排列可能是一項具有挑戰性的任務。然而,Python使用itertools模組提供了一個簡單的解決方案。 解決方案:itertools.permutations()itertools.permutations()方法是專門為生成排列而設計的。它接受一個可...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3