TensorFlow学习:在web前端如何使用Keras 模型

前言

在上篇文章 TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调中我们学习了如何使用官方模型,以及使用自己的数据微调模型。

但是吧,代码一直是跑在Python里,而我本身是做前端开发的。我是很想让它在前端进行浏览器里进行运行。

谷歌贴心的为我们准备了 TensorFlow.jsTensorFlow.js 是一个 JavaScript 库,用于在浏览器和 Node.js 训练和部署机器学习模型。

这篇文章我们来学习如何在前端运行模型,模型的话就用上一篇文章里训练的花朵分类模型。

官方文档:TensorFlow.js 官方文档

注: 下面是我的采坑心得,我这是第一次学习,第一次搞。你要是按照我的步骤遇到了其他问题,不要问我,我也不会。

建议按顺序观看,这是一个小系列,适合像我这样的初学者入门

配置环境:windows环境下tensorflow安装

图片分类案例学习:TensorFlow案例学习:对服装图像进行分类

使用官方模型,并进行微调:TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调

将模型转换,在前端使用:TensorFlow学习:在web前端如何使用Keras 模型

学习

处理模型

Keras 模型(通常通过 Python API 创建)可能保存成多种格式之一。完整模型格式可以转换成 TensorFlow.js Layers 格式,这种格式可以直接加载到 TensorFlow.js 中进行推断或进一步训练。

目标 TensorFlow.js Layers 格式是一个包含 model.json 文件和一组二进制格式的分片权重文件的目录。model.json 文件包含模型拓扑(又称“架构”或“计算图”:它是对层及其连接方式的描述)和权重文件的清单。

我们上一篇文章训练出的模型就是Keras 模型,这里需要对其进行转换。

安装

pip install tensorflowjs

就是这一步上来就被搞惨了。
在这里插入图片描述
最开始下载,还没下载多少就超时了,直接下载不了。后来查到可以使用国内镜像下载

 pip install tensorflowjs  -i https://pypi.tuna.tsinghua.edu.cn/simple

下载速度是变快了很多,结果下载到最后又来一个依赖冲突,最后又下载失败了。最终解决完这个问题是因为在web端使用,也需要下载

npm install @tensorflow/tfjs

当时我在想这两个是不是一个东西啊,问了一下gpt,npm下载的这个还真的可以用来进行模型转换。

这里我建议,即使你pip下载成功了,最好还是使用npm下载的这个进行模型转换。因为这样可以保证tensorflowjs版本一致,避免因为版本问题导致最后使用时又出问题

转换

这个也是个坑啊,文档是这样说的
在这里插入图片描述
但是在上一篇文章中,我最后保存的不是.h5格式啊,然后又回去跑模型,最后model.save('my_model.h5'),将模型保存为.h5格式。再然后转换模型

tensorflowjs_converter --input_format=keras flower_model.h5 flower_js_model

在这里插入图片描述
在这里插入图片描述
看样子是成功了,结果还真没成功,在前端加载时又报错了。没办法,百度查、翻文档。然后看见了这个
在这里插入图片描述
还真需要用这个,不过上面的代码有点问题,不需要有\ 符号。正确代码应该是

tensorflowjs_converter --input_format=tf_saved_model   flower_model web_model

这里要注意:

  • 我们还是使用的npm下载的依赖,不是pip下载的依赖
  • --input_format=tf_saved_model,指定输入格式
  • flower_model web_model这是两个路径,前面的是模型的逻辑,后面那个是转换完成后的输出路径
  • 这里加载的模型不是.h5,就是.pb文件所在的文件夹,记住是文件夹,不是目录

总之就是将flower_model下的模型进行转换,将转换后的模型输出到web_model目录下
在这里插入图片描述

在前端使用

这里要特别注意对输入图片的处理,一开始就是因为输入图片处理的不正确,导致模型在预测时结果不正确。后来各种查资料,才解决,使用代码如下:

<template>
  <div class="page-container">
    <div class="first-title">
      官方文档:
      <a href="https://tensorflow.google.cn/js/models?hl=zh-cn"
        >https://tensorflow.google.cn/js/models?hl=zh-cn</a
      >
    </div>
    <div class="img-list">
      <img
        v-for="img in imageList"
        :key="img.name"
        :src="img.url"
        :id="img.name"
        :class="activeImg == img.name ? 'img-item img-item-active' : 'img-item'"
        @click="changeImg(img)"
      />
    </div>
    <div style="margin-top: 20px">结果是:{{ result }}</div>
  </div>
</template>

<script setup>
import { ref, onMounted } from "vue";
import * as tf from "@tensorflow/tfjs";

// 图片
const imageList = ref([]);
// 当前选中的图片
const activeImg = ref("f1");
// 结果
const result = ref("");
// 图片列表
const IMAGES = [
  {
    name: "f1",
    url: "../assets/f1.jpg",
  },
  {
    name: "f2",
    url: "../assets/f2.jpg",
  },
  {
    name: "f3",
    url: "../assets/f3.jpg",
  },
  {
    name: "f4",
    url: "../assets/f4.jpg",
  },
];
const IMAGENET_CLASSES = ["雏菊", "蒲公英", "玫瑰", "向日葵", "郁金香"];

onMounted(() => {
  imageList.value = [];

  IMAGES.forEach((item) => {
    import(item.url).then((img) => {
      imageList.value.push({
        name: item.name,
        url: img.default,
      });
    });
  });
});

// 切换图片
const changeImg = async (img) => {
  activeImg.value = img.name;
  // 识别图片
  await identify(img.name);
};

// 识别图片
const identify = async (id) => {
  const imageElement = await document.getElementById(id);
  console.log("图片", imageElement);
  // 载入模型
  const model = await tf.loadGraphModel("../../public/web_model/model.json");
  console.log("模型:", model);

  // 图像预处理
  const imageTensor = preprocessImage(imageElement);

  // 对图片进行预测
  const predictions = await model.predict(imageTensor);

  console.log("predictions:", predictions);

  // 获取预测结果
  const predictedIndex = tf.argMax(predictions, 1).dataSync()[0];
  const predictedLabel = IMAGENET_CLASSES[predictedIndex];
  result.value = predictedLabel;
  console.log("结果:", predictedLabel, predictedIndex);
};

// 图像预处理
const preprocessImage = (img) => {
  // 将图像转换为张量对象并将像素值转换为浮点数类型
  const tensor = tf.browser.fromPixels(img).toFloat();
  // 张量的轴上添加一个维度,以适应模型的输入要求
  const expandedDims = tensor.expandDims();
  // 调整图像的尺寸为224x224,尺寸是模型的要求
  const resizedImg = tf.image.resizeBilinear(expandedDims, [224, 224]);
  // 将像素值归一化到范围[0, 1]之间
  const normalizedImg = tf.div(resizedImg, 255.0);
  // 返回归一化后的图像张量
  return normalizedImg;
};
</script>

<style lang="scss" scoped>
.img-list {
  display: flex;

  .img-item {
    width: 240px;
    height: 180px;
    border-radius: 5px;
    cursor: pointer;
    padding: 10px;
  }

  .img-item-active {
    border: 2px solid red;
  }
}
</style>

最终效果
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 随着人工智能和机器学习技术的不断发展,越来越多的Web应用程序需要嵌入机器学习模型,以实现更加智能化和个性化的服务。在Web中嵌入机器学习模型的主要思路是将机器学习算法和模型集成到Web应用程序的后端服务中,以提供更加智能化的数据分析和预测功能。同时,也可以将机器学习模型嵌入到Web前端以实现更加个性化的推荐和交互体验。 在Web后端中嵌入机器学习模型的过程一般包括以下几个步骤:首先,需要确定应用场景和具体的机器学习算法,然后根据数据特征进行数据处理和特征工程,建模后进行模型训练和验证,最后将训练好的模型部署到Web后端的服务中。此外,为了提高服务的响应速度和稳定性,还需要考虑使用分布式计算和缓存技术来优化模型的性能。 在Web前端中嵌入机器学习模型的过程主要包括以下几个阶段:首先,需要设计合适的用户交互界面和数据收集方式,然后将收集到的数据进行预处理和特征提取,建模后进行模型训练和验证,最后将训练好的模型嵌入到Web前端中以实现智能推荐和个性化服务。此外,为了提高模型的精度和交互性,还可以使用深度学习和强化学习等新型机器学习算法来解决更为复杂的问题。 总之,在Web中嵌入机器学习模型可以为我们的应用程序带来更加智能化和个性化的服务,但需要在数据收集、处理、模型训练、优化和部署等多个方面进行考虑和优化,以实现最优的性能和用户体验。 ### 回答2: 随着人工智能技术的不断发展,机器学习模型如今已成为了很多领域的重要应用。而在web中嵌入机器学习模型,则是将这一技术应用在互联网领域的一种方式。 在web中嵌入机器学习模型首先需要确定要解决的问题和相应的数据集。然后,可以使用一些常见的机器学习框架,如TensorFlowKeras、Scikit-learn等,来构建和训练模型。训练好的模型可以保存为文件或接口,供web应用程序调用。 在web应用程序中,可以使用一些编程语言和工具来调用机器学习模型,例如Python、JavaScript、Flask、Django等。这样,用户就可以通过web界面或API接口使用机器学习模型来解决各种问题,例如图像分类、自然语言处理、推荐系统等。 同时,在web中嵌入机器学习模型还需要考虑模型数据的安全性和隐私保护。因此,在模型构建和调用时要注意保护数据的隐私性,确保模型不会泄露用户的隐私信息。 总之,将机器学习模型嵌入web应用程序可以为用户提供更加智能和高效的服务,提高web应用程序的效率和用户体验。 ### 回答3: 随着互联网的发展,越来越多的公司开始将机器学习应用于Web应用程序中。在Web中嵌入机器学习模型可以让程序更加智能化,提高用户体验和服务质量,为企业赢得更多的竞争优势。 首先,Web应用程序可以利用机器学习模型来优化搜索引擎和推荐引擎,提供更加个性化的服务给用户。通过对用户的搜索历史、网页浏览记录和社交媒体数据进行分析,可以为用户提供更加符合他们需求的搜索结果和推荐物品,从而提高用户的满意度和忠诚度,增加企业的收益。 其次,机器学习模型可以帮助企业在云平台上建立更加智能化的数据分析和决策系统,实时监控和预测变化趋势,并提供数据可视化的结果,帮助企业高效决策。 最后,Web应用程序可以利用机器学习模型来处理大量文本和图像数据,帮助企业进行自然语言处理、图像识别和分类等任务,提高企业的工作效率和精度。 总之,在Web中嵌入机器学习模型将会使企业的应用程序更加智能化,提高企业的竞争力和市场占有率,是未来数年中一个非常重要的趋势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值