🤖 交互式机器学习实验

2025-06-07

🤖 交互式机器学习实验

TL;DR

嘿,读者们!

我在 GitHub 上开源了新的🤖 交互式机器学习实验项目。每个实验包含 🏋️ Jupyter/Colab 笔记本(用于查看模型的训练过程)和 🎨演示页面(用于在浏览器中直接查看模型的运行情况)。

尽管这些模型可能有点笨(请记住,这些只是实验,而不是可用于生产的代码),但它们会尽力做到:

  • 🖌 识别您在浏览器中绘制的数字或草图
  • 📸 检测并识别您将向相机显示的物体
  • 🌅 对上传的图像进行分类
  • 📝 和你一起写一首莎士比亚的诗
  • ✊🖐✌️ 和你一起玩石头剪刀布游戏
  • ETC。

我使用支持KerasTensorFlow 2在Python上训练了模型,然后使用ReactJavaScript版本的Tensorflow在浏览器中将它们用于演示

模型性能

⚠️ 首先,让我们设定一下预期。️ 该代码库包含机器学习实验,而非可用于生产、可复用的、经过优化和微调的代码和模型。它更像是一个沙盒或游乐场,用于学习和尝试不同的机器学习方法、算法和数据集。模型可能表现不佳,并且存在过拟合/欠拟合的情况。

因此,有时您可能会看到如下内容:

愚蠢的模型

但请耐心等待,有时模型可能会变得更智能🤓并为您提供以下信息:

智能模型

背景

我是一名软件工程师,过去几年主要从事前端和后端编程。闲暇时,出于爱好,我决定深入研究机器学习,让它对我来说不那么像魔术,而更像数学

  1. 🗓 因为Python可能是开始尝试机器学习的不错选择,所以我决定先学习它的基本语法。于是,我创建了一个🐍 Python 学习平台和速查表项目。这个项目不仅可以用来练习 Python,还能在需要的时候(比如……)有个基本语法速查表dict_via_comprehension = {x: x**2 for x in (2, 4, 6)}

  2. 🗓 学了一点 Python 之后,我想深入研究机器学习背后的基础数学。所以,在 Coursera 上学习了Andrew Ng 的一门很棒的机器学习课程后,🤖 自制机器学习项目应运而生。这次,我的项目是创建一个速查表,涵盖线性回归、逻辑回归、K 均值、多层感知器等基础机器学习数学算法。

  3. 🗓 下一次尝试使用基础机器学习数学是🤖 NanoNeuron。它包含 7 个简单的 JavaScript 函数,旨在让你了解机器实际上是如何“学习”的。

  4. 🗓 在 Coursera 上完成了Andrew Ng 的另一门很棒的深度学习专项课程后,我决定多练习一下多层感知器卷积神经网络和循环神经网络(CNN 和 RNN)。这次,我没有从头开始实现所有东西,而是决定开始使用一些机器学习框架。我最终使用了TensorFlow 2Keras。我不想把太多精力放在数学上(让框架帮我搞定),而是想提出一些更实用、更适用、可以直接在浏览器中尝试的东西。因此,新的🤖 交互式机器学习实验应运而生,我想在这里更详细地描述一下。

技术栈

模型训练

  • 🏋🏻‍ 我使用TensorFlow 2中的Keras进行建模和训练。由于我对机器学习框架毫无经验,所以我需要从头开始。TensorFlow 的一大优势在于它同时提供 Python 和JavaScript 两种版本的库,并且 API 相似。所以最终我使用了 Python 版本进行训练,JavaScript 版本进行演示。

  • 🏋🏻‍我在本地的Jupyter笔记本中使用 Python 训练 TensorFlow 模型,有时使用Colab来加快 GPU 上的训练速度。

  • 💻 大多数模型都是在旧款 MacBook Pro CPU(2.9 GHz 双核 Intel Core i5)上进行训练的。

  • 🔢 当然,你不可能逃避使用NumPy进行矩阵/张量运算。

模型演示

  • 🏋🏻‍我使用TensorFlow.js对之前训练过的模型进行预测。

  • ♻️ 为了将Keras HDF5模型转换为TensorFlow.js Layers格式,我使用了TensorFlow.js 转换器。将整个模型(数兆字节的数据)传输到浏览器,而不是通过 HTTP 请求进行预测,这可能效率低下,但再次强调,这些只是实验,而不是可用于生产的代码和架构。我希望避免使用专用的后端服务,以简化架构。

  • 👨🏻‍🎨 该演示应用程序是在React上使用create-react-app启动器创建的,并使用默认的Flow风格进行类型检查。

  • 💅🏻 样式方面,我使用了Material UI。俗话说,这可以“一举两得”,而且还可以尝试新的样式框架(抱歉,是Bootstrap 🤷🏻‍)。

实验

简而言之,您可以通过以下链接访问演示页面和 Jupyter 笔记本:

多层感知器(MLP)实验

多层感知器 (MLP)是一种前馈人工神经网络 (ANN)。多层感知器有时也被称为“香草”神经网络(由多层感知器组成),尤其是在它们只有一个隐藏层的情况下。

手写数字识别

你画一个数字,模型就会尝试识别它。

手写数字识别

手写草图识别

你画一个草图,模型就会尝试识别它。

手写草图识别

卷积神经网络(CNN)实验

卷积神经网络(CNN 或 ConvNet)是一类深度神经网络,最常用于分析视觉图像(照片、视频)。它们用于检测和分类照片和视频中的物体、风格转换、人脸识别、姿势估计等。

手写数字识别(CNN)

你画一个数字,模型会尝试识别它。这个实验与 MLP 部分的实验类似,但底层使用了 CNN。

手写数字识别(CNN)

手写草图识别(CNN)

你画了一幅草图,模型会尝试识别它。这个实验与 MLP 部分的实验类似,但底层使用了 CNN。

手写草图识别(CNN)

石头剪刀布(CNN)

你和模型玩石头剪刀布游戏。本次实验使用从头开始训练的 CNN。

石头剪刀布(CNN)

石头剪刀布 (MobilenetV2)

你与模型玩石头剪刀布游戏。该模型使用迁移学习,基于MobilenetV2

石头剪刀布 (MobilenetV2)

物体检测(MobileNetV2)

你通过摄像头向模型展示你的环境,它会尝试检测并识别物体。该模型使用迁移学习,基于MobilenetV2

物体检测(MobileNetV2)

图像分类(MobileNetV2)

你上传一张图片,模型会根据它在图片上“看到”的内容尝试对其进行分类。该模型使用迁移学习,并基于MobilenetV2

图像分类(MobileNetV2)

循环神经网络(RNN)实验

循环神经网络(RNN)是一类深度神经网络,最常用于基于序列的数据,例如语音、声音、文本或音乐。它们用于机器翻译、语音识别、语音合成等。

数字求和

你输入一个求和表达式(即17+38),模型就会预测结果(即55)。这里有趣的部分是,模型将输入视为一个序列,这意味着它学会了当你输入一个序列11717+17+317+38时,它会将其“翻译”成另一个序列55。你可以把它想象成把西班牙语Hola序列翻译成英语Hello

数字求和

莎士比亚文本生成

你开始像莎士比亚那样输入一首诗,模型就会像莎士比亚那样继续下去。至少它会尝试这样做😀。

莎士比亚文本生成

维基百科文本生成

您开始输入 Wiki 文章,模型会尝试继续它。

维基百科文本生成

未来计划

正如我上面提到的,该代码库的主要目的是成为一个学习的游乐场,而不是一个可用于生产环境的模型。因此,我们的主要计划是继续学习和尝试深度学习的挑战和方法。接下来值得尝试的有趣挑战可能是:

  • 情绪检测
  • 风格转换
  • 语言翻译
  • 生成图像(即手写数字)
  • ETC。

另一个有趣的机会是调整现有模型,使其性能更佳。我相信,这或许能让我们更好地理解如何克服过拟合和欠拟合,以及如果模型60%在训练集和验证集上的准确率都停留在某个水平,不再提升,该怎么办🤔。

无论如何,我希望您可以从存储库中找到一些对模型训练有用的见解,或者至少可以从演示中获得一些乐趣!

学习愉快!🤖

文章来源:https://dev.to/trekhleb/interactive-machine-learning-experiments-3ga7
PREV
学习 Python 的新游乐场和速查表
NEXT
动态规划 vs. 分治法,或者更进一步的分治法