”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 连接机器学习与 TensorFlow:从 Python 到 JavaScript

连接机器学习与 TensorFlow:从 Python 到 JavaScript

发布于2024-11-01
浏览:837

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]删除
最新教程 更多>
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-08
  • 如何处理PHP文件系统功能中的UTF-8文件名?
    如何处理PHP文件系统功能中的UTF-8文件名?
    在PHP的Filesystem functions中处理UTF-8 FileNames 在使用PHP的MKDIR函数中含有UTF-8字符的文件很多flusf-8字符时,您可能会在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    编程 发布于2025-04-08
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-08
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-08
  • 为什么在我的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-08
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-04-08
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-08
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-04-08
  • 为什么我的CSS背景图像出现?
    为什么我的CSS背景图像出现?
    故障排除:CSS背景图像未出现 ,您的背景图像尽管遵循教程说明,但您的背景图像仍未加载。图像和样式表位于相同的目录中,但背景仍然是空白的白色帆布。而不是不弃用的,您已经使用了CSS样式: bockent {背景:封闭图像文件名:背景图:url(nickcage.jpg); 如果您的html,css...
    编程 发布于2025-04-08
  • 如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    如何解决由于Android的内容安全策略而拒绝加载脚本... \”错误?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    编程 发布于2025-04-08
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-04-08
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-08
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-04-08
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-04-08
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3