ホームページ  >  記事  >  ウェブフロントエンド  >  TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

青灯夜游
青灯夜游転載
2020-11-10 17:54:492960ブラウズ

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

この記事では、TensorFlow.js を使用して基本的な AI モデルを作成し、より複雑なモデルを使用していくつかの興味深い機能を実現する方法を説明します。人工知能に触れ始めたばかりで、人工知能に関する深い知識は必要ありませんが、いくつかの概念を理解する必要があります。

モデルとは何ですか?

現実の世界は非常に複雑なので、理解するには単純化する必要があります。モデルを使用して単純化できます。モデルには世界地図やチャートなど、さまざまな種類があります。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

たとえば、住宅の賃貸価格と住宅面積の関係を表現するモデルを構築したい場合: まず、いくつかのデータを収集する必要があります:

#価格#3#131000 31250004235000265000535000
部屋数
##4
5

次に、これらのデータを 2 次元グラフに表示し、各パラメーター (価格、部屋数) を 1 つの次元として扱います。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

次に、ラインを作成して、部屋数が多い家の家賃を予測します。このモデルは線形回帰と呼ばれ、機械学習の最も単純なモデルの 1 つです。しかし、このモデルは十分ではありません。

  1. データが 5 つしかないため、信頼性が十分ではありません。
  2. パラメータは 2 つ (価格、部屋) のみですが、面積、装飾など、価格に影響を与える要素は他にもあります。

最初の問題は、さらにデータ (たとえば 100 万件) を追加することで解決できます。 2 番目の質問では、さらに次元を追加できます。 2 次元グラフではデータを理解し線を引くのが簡単ですが、3 次元グラフでは平面を使用できます。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

しかし、次の場合はどうでしょうか。データの次元は 3 次元、4 次元、さらには 1000,000 次元です。次元が 3 次元を超えると、脳はそれをチャート上に視覚化することができませんが、次元が 3 次元を超えると超平面を数学的に計算でき、ニューラル ネットワークはこの問題を解決するために生まれました。

ニューラル ネットワークとは何ですか?

ニューラル ネットワークとは何かを理解するには、ニューロンとは何かを知る必要があります。実際のニューロンは次のようになります:

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

ニューロンは次の部分で構成されます:

  • Dendrite : これは次のとおりです。データの入力側。
  • Axon: これは出力端です。
  • シナプス (図には示されていません): この構造により、あるニューロンと別のニューロン間の通信が可能になります。軸索の神経終末と近くのニューロンの樹状突起の間で電気信号を伝達する役割を担っています。これらのシナプスは、その用途に応じて電気活動を増減させるため、学習の鍵となります。

機械学習のニューロン (簡略化):

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

  • 入力 (入力) : パラメーターを入力します。
  • 重み: シナプスと同様、ニューロンを調整することで線形回帰をより適切に確立するために使用されます。
  • 線形関数: 各ニューロンは線形回帰関数に似ており、線形回帰モデルの場合は 1 つのニューロンだけで十分です。
  • アクティベーション関数: 一部のアクティベーション関数は、出力をスカラーから別の非線形関数に変更するために使用できます。一般的なものはシグモイド、RELU、tanh です。
  • 出力 (output) : 活性化関数を適用した後の計算された出力。

アクティベーション関数は非常に便利で、主にニューラル ネットワークの力がこの関数に貢献します。活性化関数がなければ、インテリジェントなニューロン ネットワークを実現することは不可能です。ニューラル ネットワーク内に複数のニューロンがある場合でも、ニューラル ネットワークの出力は常に線形回帰となるためです。したがって、非線形問題を解決するには、各線形回帰を非線形に変換する何らかのメカニズムが必要です。これらの線形関数は、アクティベーション関数を通じて非線形関数に変換できます。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

#トレーニング モデル

2D 線形回帰の例で説明したように、単にグラフ内の線を使用して新しいデータを予測します。それでも、「ディープラーニング」のアイデアは、ニューラルネットワークにこの線を引くことを学習させることです。単純な線の場合は、ニューロンが 1 つだけある非常に単純なニューラル ネットワークを使用できますが、2 セットのデータを分類するなど、より複雑なことを行うモデルの場合は、ネットワークを「トレーニング」する必要があります。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

プロセスは 2 次元であるため、複雑ではありません。各モデルは世界を説明するために使用されますが、「トレーニング」の概念はすべてのモデルで非常に似ています。最初のステップは、ランダムな線を描画し、アルゴリズム内で繰り返し改善し、各繰り返し中にプロセス内のエラーを修正することです。この最適化アルゴリズムは勾配降下法と呼ばれます (同じ概念のアルゴリズムには、より複雑な SGD や ADAM などもあります)。各アルゴリズム (線形回帰、対数回帰など) には誤差を測定するための異なるコスト関数があり、コスト関数は常に特定の点に収束します。凸関数でも凹関数でも構いませんが、最終的には誤差 0% の点に収束します。私たちの目標はこれを達成することです。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

勾配降下法アルゴリズムを使用する場合、コスト関数内のランダムな点から開始しますが、それがどこにあるのかわかりません。それは目隠しをされて山に放り出されるようなもので、山を下りたければ一歩ずつ一番低いところまで行かなければなりません。地形が不規則である場合(凹面など)、降下はさらに複雑になります。

「勾配降下法」アルゴリズムについてはここでは詳しく説明しませんが、これは AI モデルのトレーニングの過程で予測誤差を最小限に抑えるための最適化アルゴリズムであることを覚えておくだけで十分です。このアルゴリズムは、行列の乗算に多くの時間と GPU を必要とします。通常、最初の実行でこの収束点に到達することは難しいため、学習率や正則化の追加など、一部のハイパーパラメータを変更する必要があります。勾配降下法の反復後、誤差が 0% に近づくと収束点に近づきます。これにより、予測に使用できるモデルが作成されます。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

TensorFlow.js を使用したモデルのトレーニング

TensorFlow.js は、ニューラル ネットワークを作成する簡単な方法を提供します。まず、trainModel メソッドを使用して LinearModel クラスを作成します。シーケンシャルモデルを使用します。シーケンシャル モデルは、1 つの層の出力が次の層への入力となるモデルです。つまり、モデル トポロジが分岐やスキップのない単純な階層である場合です。 trainModel メソッド内のレイヤーを定義します (線形回帰問題を解決するには十分なため、レイヤーを 1 つだけ使用します):

import * as tf from '@tensorflow/tfjs';

/**
* 线性模型类
*/
export default class LinearModel {
  /**
 * 训练模型
 */
  async trainModel(xs, ys){
    const layers = tf.layers.dense({
      units: 1, // 输出空间的纬度
      inputShape: [1], // 只有一个参数
    });
    const lossAndOptimizer = {
      loss: 'meanSquaredError',
      optimizer: 'sgd', // 随机梯度下降
    };

    this.linearModel = tf.sequential();
    this.linearModel.add(layers); // 添加一层
    this.linearModel.compile(lossAndOptimizer);

    // 开始模型训练
    await this.linearModel.fit(
      tf.tensor1d(xs),
      tf.tensor1d(ys),
    );
  }

  //...
}

このクラスをトレーニングに使用します:

const model = new LinearModel()

// xs 与 ys 是 数组成员(x-axis 与 y-axis)
await model.trainModel(xs, ys)

トレーニングの終了 その後、予測を開始できます。

TensorFlow.js による予測

モデルのトレーニング時に一部のハイパーパラメーターを事前に定義する必要がありますが、一般的な予測を行うのはまだ簡単です。次のコードを渡すだけで十分です:

import * as tf from '@tensorflow/tfjs';

export default class LinearModel {
  ... //前面训练模型的代码

  predict(value){
    return Array.from(
      this.linearModel
      .predict(tf.tensor2d([value], [1, 1]))
      .dataSync()
    )
  }
}

これで、予測できるようになります:

const prediction = model.predict(500) // 预测数字 500
console.log(prediction) // => 420.423

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

TensorFlow.js

で事前トレーニングされたモデルを使用する

モデルのトレーニングが最も難しい部分です。まず、データはトレーニング用に標準化されており、すべてのハイパーパラメータが正しく設定されている必要があります。私たち初心者は、これらの事前トレーニングされたモデルを直接使用できます。 TensorFlow.js は、多くの事前トレーニング済みモデルを使用でき、TensorFlow または Keras で作成された外部モデルをインポートすることもできます。たとえば、posnet モデル (リアルタイムの人間の姿勢評価) を直接使用して、いくつかの興味深いプロジェクトを実行できます:

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

このデモのコード: https://github .com/aralroca/posenet- d3

使い方は簡単です:

import * as posenet from '@tensorflow-models/posenet'

// 设置一些常数
const imageScaleFactor = 0.5
const outputStride = 16
const flipHorizontal = true
const weight = 0.5

// 加载模型
const net = await posenet.load(weight)

// 进行预测
const poses = await net.estimateSinglePose(
  imageElement,
  imageScaleFactor,
  flipHorizontal,
  outputStride
)

この JSON は pose 変数:

{
  "score": 0.32371445304906,
  "keypoints": [
    {
      "position": {
        "y": 76.291801452637,
        "x": 253.36747741699
      },
      "part": "nose",
      "score": 0.99539834260941
    },
    {
      "position": {
        "y": 71.10383605957,
        "x": 253.54365539551
      },
      "part": "leftEye",
      "score": 0.98781454563141
    }
    // 后面还有: rightEye, leftEar, rightEar, leftShoulder, rightShoulder
    // leftElbow, rightElbow, leftWrist, rightWrist, leftHip, rightHip,
    // leftKnee, rightKnee, leftAnkle, rightAnkle...
  ]
}

これを見ることができます公式デモから、このモデルを使用してください。開発できる興味深いプロジェクトがたくさんあります。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

#このプロジェクトのソース コード: https://github.com/aralroca/fishFollow-posenet-tfjs

Keras モデルのインポート

外部モデルは TensorFlow.js にインポートできます。以下はKerasモデル(h5形式)を使用した数値認識プログラムです。まず、

tfjs_converter を使用してモデルの形式を変換します。

pip install tensorflowjs
コンバータを使用します:

tensorflowjs_converter --input_format keras keras/cnn.h5 src/assets
最後に、モデルを JS コードにインポートします:

// 载入模型
const model = await tf.loadModel('./assets/model.json')

// 准备图片
let img = tf.fromPixels(imageData, 1)
img = img.reshape([1, 28, 28, 1])
img = tf.cast(img, 'float32')

// 进行预测
const output = model.predict(img)
これは、数行のコードのみで完了します。もちろん、コードにロジックを追加してさらに多くの機能を実現することもできます。たとえば、キャンバスに数値を書き込み、その画像を取得して予測することもできます。

TensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?

このプロジェクトのソース コード: https://github.com/aralroca/MNIST_React_TensorFlowJS

なぜブラウザで使用する必要があるのですか?

デバイスが異なるため、ブラウザーでモデルをトレーニングする場合、効率が非常に低くなる可能性があります。 TensorFlow.js を使用して WebGL を使用してバックグラウンドでモデルをトレーニングすると、Python バージョンの TensorFlow を使用するよりも 1.5​​ ~ 2 倍遅くなります。

しかし、TensorFlow.js が登場する前は、ブラウザーで機械学習モデルを直接使用できる API はありませんでしたが、現在では、モデルをブラウザー アプリケーションでオフラインでトレーニングして使用できるようになりました。また、サーバーへのリクエストがないため、予測が高速になります。もう 1 つの利点は、これらの計算がすべてクライアント側で行われるため、コストが低いことです。

概要

    モデルは、予測に使用できる現実世界を表す簡略化された方法です。
  • ニューラル ネットワークを使用してモデルを作成できます。
  • TensorFlow.js は、ニューラル ネットワークを作成するためのシンプルなツールです。
#英語の元のアドレス: https://aralroca.com/blog/first-steps-with-tensorflowjs

著者: Aral Roca

プログラミング関連の知識について詳しくは、
プログラミング コース

をご覧ください。 !

以上がTensorFlow.js を使用して基本的な AI モデルを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。