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.
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.
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:
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:
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:
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.
Um zu verstehen, was ein neuronales Netzwerk ist, müssen Sie wissen, was ein Neuron ist. Ein echtes Neuron sieht so aus:
Ein Neuron besteht aus den folgenden Teilen:
Neuronen im maschinellen Lernen (vereinfacht):
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 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:
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.
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.
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.
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
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:
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.
Quellcode dieses Projekts: https://github.com/aralroca/fishFollow-posenet-tfjs
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.
Quellcode dieses Projekts: https://github.com/aralroca/MNIST_React_TensorFlowJS
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.
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!