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

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

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

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]刪除
最新教學 更多>
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-04-11
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-04-11
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-04-11
  • 如何克服PHP的功能重新定義限制?
    如何克服PHP的功能重新定義限制?
    克服PHP的函數重新定義限制在PHP中,多次定義一個相同名稱的函數是一個no-no。嘗試這樣做,如提供的代碼段所示,將導致可怕的“不能重新列出”錯誤。 但是,PHP工具腰帶中有一個隱藏的寶石:runkit擴展。它使您能夠靈活地重新定義函數。 runkit_function_renction_...
    程式設計 發佈於2025-04-11
  • 如何配置Pytesseract以使用數字輸出的單位數字識別?
    如何配置Pytesseract以使用數字輸出的單位數字識別?
    Pytesseract OCR具有單位數字識別和僅數字約束 在pytesseract的上下文中,在配置tesseract以識別單位數字和限制單個數字和限制輸出對數字可能會提出質疑。 To address this issue, we delve into the specifics of Te...
    程式設計 發佈於2025-04-11
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-04-11
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-11
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-04-11
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-04-11
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-11
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-04-11
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-04-11
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-04-11
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-04-11
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    class'ziparchive'在Linux Server上安裝Archive_zip時找不到錯誤 commant in lin ins in cland ins in lin.11 on a lin.1 in a lin.11錯誤:致命錯誤:在... cass中找不到類z...
    程式設計 發佈於2025-04-11

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

Copyright© 2022 湘ICP备2022001581号-3