Heim >Web-Frontend >js-Tutorial >Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

青灯夜游
青灯夜游nach vorne
2020-11-10 17:54:493008Durchsuche

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

In diesem Artikel schauen wir uns an, wie man mit TensorFlow.js grundlegende KI-Modelle erstellt und komplexere Modelle verwendet, um einige interessante Funktionen zu implementieren. Ich habe gerade erst begonnen, mit künstlicher Intelligenz in Kontakt zu kommen. Obwohl keine tiefgreifenden Kenntnisse über künstliche Intelligenz erforderlich sind, muss ich einige Konzepte noch verstehen.

Was ist ein Model?

Die reale Welt ist sehr komplex und wir müssen sie vereinfachen, um sie zu verstehen. Es gibt viele Arten von Modellen: wie Weltkarten oder Diagramme usw.

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Wenn Sie beispielsweise ein Modell erstellen möchten, um die Beziehung zwischen Hausmietpreis und Hausfläche darzustellen: Zuerst müssen Sie einige Daten sammeln:

Anzahl der Zimmer Preis
3 131000
3 125000
4 235000
4 265000
5 535000

Dann zeigen Sie diese Daten in einem zweidimensionalen Diagramm an und nehmen dabei jeden Parameter (Preis, Anzahl der Zimmer) als eine Dimension:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Dann können wir eine Linie zeichnen und den Mietpreis für Häuser mit mehr Zimmern vorhersagen. Dieses Modell wird lineare Regression genannt und ist eines der einfachsten Modelle des maschinellen Lernens. Aber dieses Modell ist nicht gut genug:

  1. Es gibt nur 5 Daten, daher ist es nicht zuverlässig genug.
  2. Es gibt nur 2 Parameter (Preis, Zimmer), aber es gibt noch weitere Faktoren, die den Preis beeinflussen können: wie Fläche, Dekoration usw.

Das erste Problem kann durch das Hinzufügen weiterer Daten, beispielsweise einer Million, gelöst werden. Für die zweite Frage können weitere Dimensionen hinzugefügt werden. In einem zweidimensionalen Diagramm ist es einfach, die Daten zu verstehen und eine Linie zu zeichnen, in einem dreidimensionalen Diagramm können Sie eine Ebene verwenden:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Aber wenn die Dimensionen der Daten drei, vier oder sogar 1.000.000 Dimensionen sind , das Gehirn hat keine Möglichkeit, das Diagramm zu lesen. Es kann oben visualisiert werden, aber Hyperebenen können mathematisch berechnet werden, wenn die Dimensionen drei überschreiten, und neuronale Netze wurden geboren, um dieses Problem zu lösen.

Was ist ein neuronales Netzwerk?

Um zu verstehen, was ein neuronales Netzwerk ist, müssen Sie wissen, was ein Neuron ist. Ein echtes Neuron sieht so aus:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Ein Neuron besteht aus den folgenden Teilen:

  • Dendriten: Dies ist das Eingabeende der Daten.
  • Axon: Dies ist das Ausgabeende.
  • Synapse (im Diagramm nicht dargestellt): Diese Struktur ermöglicht die Kommunikation zwischen einem Neuron und einem anderen Neuron. Es ist für die Übertragung elektrischer Signale zwischen den Nervenenden der Axone und den Dendriten benachbarter Neuronen verantwortlich. Diese Synapsen sind der Schlüssel zum Lernen, da sie je nach Nutzung die elektrische Aktivität erhöhen oder verringern.

Neuronen im maschinellen Lernen (vereinfacht):

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

  • Eingaben (Eingaben) : Eingabeparameter.
  • Gewichte: Wie Synapsen werden sie verwendet, um die lineare Regression durch die Anpassung von Neuronen besser zu etablieren.
  • Lineare Funktion: Jedes Neuron ist wie eine lineare Regressionsfunktion. Für ein lineares Regressionsmodell reicht nur ein Neuron.
  • Aktivierungsfunktion: Einige Aktivierungsfunktionen können verwendet werden, um die Ausgabe von einer Skalarfunktion in eine andere nichtlineare Funktion zu ändern. Häufige Formen sind Sigmoid, RELU und Tanh.
  • Ausgabe: Die berechnete Ausgabe nach Anwendung der Aktivierungsfunktion.

Aktivierungsfunktionen sind sehr nützlich und die Leistungsfähigkeit neuronaler Netze wird hauptsächlich darauf zurückgeführt. Ohne Aktivierungsfunktion ist es unmöglich, ein intelligentes Neuronennetzwerk aufzubauen. Denn auch wenn Sie mehrere Neuronen in Ihrem neuronalen Netzwerk haben, wird die Ausgabe Ihres neuronalen Netzwerks immer eine lineare Regression sein. Daher ist ein Mechanismus erforderlich, um jede lineare Regression in eine nichtlineare umzuwandeln und nichtlineare Probleme zu lösen. Diese linearen Funktionen können durch Aktivierungsfunktionen in nichtlineare Funktionen umgewandelt werden:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Trainieren des Modells

Wie im Beispiel der linearen 2D-Regression beschrieben, zeichnen Sie einfach eine Linie in das Diagramm, um neue Daten vorherzusagen. Dennoch besteht die Idee des „Deep Learning“ darin, dass unser neuronales Netzwerk lernt, diese Grenze zu ziehen. Für eine einfache Linie können Sie ein sehr einfaches neuronales Netzwerk mit nur einem Neuron verwenden. Für ein Modell, das komplexere Aufgaben ausführen möchte, z. B. die Klassifizierung zweier Datensätze, muss das Netzwerk jedoch „trainiert“ werden. Erfahren Sie, wie Sie es erhalten Folgendes:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Der Prozess ist nicht kompliziert, da er zweidimensional ist. Jedes Modell wird verwendet, um eine Welt zu beschreiben, aber das Konzept des „Trainings“ ist bei allen Modellen sehr ähnlich. Der erste Schritt besteht darin, eine zufällige Linie zu zeichnen und sie iterativ im Algorithmus zu verbessern, wobei Fehler im Prozess bei jeder Iteration korrigiert werden. Dieser Optimierungsalgorithmus wird Gradient Descent genannt (Algorithmen mit demselben Konzept sind auch komplexere SGD oder ADAM usw.). Jeder Algorithmus (lineare Regression, logarithmische Regression usw.) verfügt über eine andere Kostenfunktion zum Messen des Fehlers, und die Kostenfunktion konvergiert immer zu einem bestimmten Punkt. Es kann eine konvexe oder konkave Funktion sein, aber sie konvergiert schließlich zu einem Punkt mit einem Fehler von 0 %. Unser Ziel ist es, dies zu erreichen.

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Wenn Sie den Gradientenabstiegsalgorithmus verwenden, beginnen Sie an einem zufälligen Punkt in seiner Kostenfunktion, aber wir wissen nicht genau, wo er ist! Es ist, als würde man mit verbundenen Augen auf einen Berg geworfen. Wenn man den Berg hinuntersteigen will, muss man Schritt für Schritt zum tiefsten Punkt vordringen. Wenn das Gelände unregelmäßig ist (z. B. eine konkave Funktion), wird der Abstieg komplizierter.

Ich werde den „Gradient Descent“-Algorithmus hier nicht näher erläutern. Es reicht aus, sich daran zu erinnern, dass es sich um einen Optimierungsalgorithmus zur Minimierung von Vorhersagefehlern während des Trainings von KI-Modellen handelt. Dieser Algorithmus erfordert viel Zeit und GPU für die Matrixmultiplikation. Normalerweise ist es schwierig, diesen Konvergenzpunkt bei der ersten Ausführung zu erreichen, daher müssen einige Hyperparameter geändert werden, beispielsweise die Lernrate oder das Hinzufügen einer Regularisierung. Nach Gradientenabstiegsiterationen wird der Konvergenzpunkt erreicht, wenn der Fehler 0 % erreicht. Dadurch entsteht ein Modell, anhand dessen dann Vorhersagen getroffen werden können.

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Modelle mit TensorFlow.js trainieren

TensorFlow.js bietet eine einfache Möglichkeit, neuronale Netze zu erstellen. Definieren Sie zunächst die Ebene innerhalb der trainModel 方法创建一个 LinearModel 类。我们将使用顺序模型。顺序模型是其中一层的输出是下一层的输入的模型,即当模型拓扑是简单的层级结构,没有分支或跳过。在 trainModel-Methode (wir verwenden nur eine Ebene, da diese zur Lösung des linearen Regressionsproblems ausreicht):

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),
    );
  }

  //...
}

Verwenden Sie diese Klasse zum Training:

const model = new LinearModel()

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

Nach dem Training können Sie mit der Vorhersage beginnen.

Vorhersage mit TensorFlow.js

Obwohl Sie beim Training des Modells vorab einige Hyperparameter definieren müssen, ist es dennoch einfach, allgemeine Vorhersagen zu treffen. Es reicht aus, den folgenden Code zu übergeben:

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

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

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

Jetzt können Sie vorhersagen:

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

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Die Verwendung eines vorab trainierten Modells in TensorFlow.js

Das Training des Modells ist der schwierigste Teil. Zunächst werden die Daten für das Training standardisiert und alle Hyperparameter müssen korrekt eingestellt werden usw. Für uns Anfänger können wir diese vorab trainierten Modelle direkt verwenden. TensorFlow.js kann viele vorab trainierte Modelle verwenden und auch externe Modelle importieren, die mit TensorFlow oder Keras erstellt wurden. Sie können beispielsweise direkt das Posenet-Modell (Echtzeitbewertung der menschlichen Körperhaltung) verwenden, um einige interessante Projekte durchzuführen:

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Der Code dieser Demo: https://github.com/aralroca/posenet-d3

Es ist sehr einfach zu verwenden:

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
)

Diese JSON ist pose Variable:

{
  "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...
  ]
}

Wie aus der offiziellen Demo hervorgeht, können mit diesem Modell viele interessante Projekte entwickelt werden.

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Quellcode dieses Projekts: https://github.com/aralroca/fishFollow-posenet-tfjs

Keras-Modell importieren

Sie können externe Modelle in TensorFlow.js importieren. Nachfolgend finden Sie ein Programm zur Nummernerkennung mithilfe des Keras-Modells (h5-Format). Verwenden Sie zunächst tfjs_converter, um das Format des Modells zu konvertieren.

pip install tensorflowjs

Verwenden Sie den Konverter:

tensorflowjs_converter --input_format keras keras/cnn.h5 src/assets

Importieren Sie abschließend das Modell in JS-Code:

// 载入模型
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)

Es sind nur ein paar Codezeilen erforderlich, und schon sind Sie fertig. Natürlich können Sie dem Code mehr Logik hinzufügen, um mehr Funktionen zu erreichen. Sie können beispielsweise Zahlen auf die Leinwand schreiben und dann deren Bilder zur Vorhersage abrufen.

Wie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?

Quellcode dieses Projekts: https://github.com/aralroca/MNIST_React_TensorFlowJS

Warum sollte es im Browser verwendet werden?

Aufgrund unterschiedlicher Geräte kann die Effizienz beim Training des Modells im Browser sehr gering sein. Die Verwendung von TensorFlow.js zur Verwendung von WebGL zum Trainieren des Modells im Hintergrund ist 1,5 bis 2 Mal langsamer als die Verwendung der Python-Version von TensorFlow.

Aber vor dem Aufkommen von TensorFlow.js gab es keine API, die Modelle für maschinelles Lernen direkt im Browser verwenden konnte. Jetzt können Modelle offline in Browseranwendungen trainiert und verwendet werden. Und Vorhersagen sind schneller, da keine Anfragen an den Server erfolgen. Ein weiterer Vorteil sind die geringen Kosten, da alle diese Berechnungen auf Kundenseite durchgeführt werden.

Zusammenfassung

  • Ein Modell ist eine vereinfachte Darstellung der realen Welt und kann für Vorhersagen verwendet werden.
  • Sie können Modelle mit neuronalen Netzen erstellen.
  • TensorFlow.js ist ein einfaches Tool zum Erstellen neuronaler Netze.

Englische Originaladresse: https://aralroca.com/blog/first-steps-with-tensorflowjs

Autor: Aral Roca

Weitere Programmierkenntnisse finden Sie unter: Programmierkurse! !

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein grundlegendes KI-Modell mit TensorFlow.js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen