Exemples TensorFlow.js

Exemples d'apprentissage automatique TensorFlow.js incluant les réseaux neuronaux, l'entraînement de modèles et les opérations de tenseurs

Key Facts

Category
Machine Learning
Items
3
Format Families
sample

Sample Overview

Exemples d'apprentissage automatique TensorFlow.js incluant les réseaux neuronaux, l'entraînement de modèles et les opérations de tenseurs This sample set belongs to Machine Learning and can be used to test related workflows inside Elysia Tools.

💻 TensorFlow.js Hello World javascript

🟢 simple ⭐⭐

Configuration de base TensorFlow.js et opérations simples de tenseurs

⏱️ 15 min 🏷️ tensorflow, machine learning, tensors
Prerequisites: Basic JavaScript, Linear algebra basics
// TensorFlow.js Hello World

// Import TensorFlow.js
// In browser: <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@latest/dist/tf.min.js"></script>
// In Node.js: const tf = require('@tensorflow/tfjs');

// 1. Basic tensor creation
console.log('=== Basic Tensors ===');
const scalar = tf.scalar(5);
console.log('Scalar:', scalar.toString());

const vector = tf.tensor1d([1, 2, 3, 4]);
console.log('Vector:', vector.toString());

const matrix = tf.tensor2d([[1, 2], [3, 4]]);
console.log('Matrix:', matrix.toString());

// 2. Tensor operations
console.log('\n=== Basic Operations ===');
const a = tf.tensor1d([1, 2, 3]);
const b = tf.tensor1d([4, 5, 6]);

const add = a.add(b);
console.log('Add:', add.toString());

const multiply = a.mul(b);
console.log('Multiply:', multiply.toString());

const squared = a.square();
console.log('Square:', squared.toString());

// 3. Matrix multiplication
console.log('\n=== Matrix Operations ===');
const mat1 = tf.tensor2d([[1, 2], [3, 4]]);
const mat2 = tf.tensor2d([[5, 6], [7, 8]]);

const matMul = mat1.matMul(mat2);
console.log('Matrix Multiplication:', matMul.toString());

// 4. Mathematical functions
console.log('\n=== Mathematical Functions ===');
const x = tf.tensor1d([-1, 0, 1, 2]);

const relu = x.relu();
console.log('ReLU:', relu.toString());

const sigmoid = tf.sigmoid(x);
console.log('Sigmoid:', sigmoid.toString());

const tanh = tf.tanh(x);
console.log('Tanh:', tanh.toString());

// 5. Reshaping tensors
console.log('\n=== Reshaping ===');
const tensor = tf.tensor1d([1, 2, 3, 4, 5, 6]);
const reshaped = tensor.reshape([2, 3]);
console.log('Original:', tensor.toString());
console.log('Reshaped (2x3):', reshaped.toString());

// 6. Reduction operations
console.log('\n=== Reductions ===');
const data = tf.tensor1d([1, 2, 3, 4, 5]);

const sum = data.sum();
console.log('Sum:', sum.toString());

const mean = data.mean();
console.log('Mean:', mean.toString());

const max = data.max();
console.log('Max:', max.toString());

// 7. Creating tensors with specific values
console.log('\n=== Special Tensors ===');
const zeros = tf.zeros([3, 3]);
console.log('Zeros (3x3):', zeros.toString());

const ones = tf.ones([2, 4]);
console.log('Ones (2x4):', ones.toString());

const identity = tf.eye(3);
console.log('Identity (3x3):', identity.toString());

const random = tf.randomNormal([2, 3]);
console.log('Random Normal (2x3):', random.toString());

// 8. Using variables (mutable tensors)
console.log('\n=== Variables ===');
const variable = tf.variable(tf.tensor1d([1, 2, 3]));
console.log('Initial variable:', variable.toString());

variable.assign(tf.tensor1d([4, 5, 6]));
console.log('Updated variable:', variable.toString());

// 9. Memory management
console.log('\n=== Memory Management ===');
// Use tf.tidy() to automatically dispose intermediate tensors
const result = tf.tidy(() => {
    const x = tf.tensor1d([1, 2, 3]);
    const y = tf.tensor1d([4, 5, 6]);
    return x.add(y).square();
});
console.log('Complex operation result:', result.toString());

// Don't forget to dispose tensors when done
scalar.dispose();
vector.dispose();
matrix.dispose();
add.dispose();
multiply.dispose();
squared.dispose();
matMul.dispose();
relu.dispose();
sigmoid.dispose();
tanh.dispose();
reshaped.dispose();
sum.dispose();
mean.dispose();
max.dispose();
zeros.dispose();
ones.dispose();
identity.dispose();
random.dispose();
variable.dispose();
result.dispose();

console.log('\nAll tensors disposed successfully!');

// 10. Asynchronous operations
async function asyncExample() {
    console.log('\n=== Async Operations ===');

    // Use tf.data API for data processing
    const data = tf.data.array([1, 2, 3, 4, 5]);
    const processed = await data.map(x => x * 2).batch(2).toArray();
    console.log('Batched data:', processed);
}

asyncExample().catch(console.error);

💻 Réseau Neuronal Simple javascript

🟡 intermediate ⭐⭐⭐

Créer et entraîner un réseau neuronal simple pour la classification

⏱️ 25 min 🏷️ tensorflow, neural network, classification
Prerequisites: Basic TensorFlow.js, Neural networks concepts
// Simple Neural Network with TensorFlow.js

// 1. Create synthetic training data
function createTrainingData() {
    const data = [];
    const labels = [];

    // Generate data for two classes
    for (let i = 0; i < 100; i++) {
        // Class 0: points near (0, 0)
        data.push([Math.random() * 2 - 1, Math.random() * 2 - 1]);
        labels.push([1, 0]);

        // Class 1: points near (5, 5)
        data.push([Math.random() * 2 + 4, Math.random() * 2 + 4]);
        labels.push([0, 1]);
    }

    return {
        data: tf.tensor2d(data),
        labels: tf.tensor2d(labels)
    };
}

// 2. Create the model
function createModel() {
    const model = tf.sequential();

    // Input layer
    model.add(tf.layers.dense({
        units: 8,
        activation: 'relu',
        inputShape: [2]
    }));

    // Hidden layer
    model.add(tf.layers.dense({
        units: 8,
        activation: 'relu'
    }));

    // Output layer (2 classes)
    model.add(tf.layers.dense({
        units: 2,
        activation: 'softmax'
    }));

    // Compile the model
    model.compile({
        optimizer: tf.train.adam(0.01),
        loss: 'categoricalCrossentropy',
        metrics: ['accuracy']
    });

    return model;
}

// 3. Train the model
async function trainModel(model, trainingData) {
    console.log('Starting training...');

    const history = await model.fit(trainingData.data, trainingData.labels, {
        epochs: 50,
        batchSize: 16,
        validationSplit: 0.2,
        shuffle: true,
        callbacks: {
            onEpochEnd: (epoch, logs) => {
                console.log(`Epoch ${epoch + 1}: loss = ${logs.loss.toFixed(4)}, accuracy = ${(logs.accuracy * 100).toFixed(2)}%`);
            }
        }
    });

    return history;
}

// 4. Make predictions
function makePredictions(model) {
    console.log('\nMaking predictions...');

    // Test points
    const testPoints = [
        [0, 0],    // Should be class 0
        [5, 5],    // Should be class 1
        [1, 1],    // Should be class 0
        [4.5, 4.5] // Should be class 1
    ];

    testPoints.forEach(point => {
        const prediction = model.predict(tf.tensor2d([point]));
        const probabilities = prediction.dataSync();
        const predictedClass = probabilities[0] > probabilities[1] ? 0 : 1;

        console.log(`Point [${point[0]}, ${point[1]}]: Class ${predictedClass} (Probabilities: [${probabilities[0].toFixed(3)}, ${probabilities[1].toFixed(3)}])`);

        prediction.dispose();
    });
}

// 5. Save and load model
async function saveAndLoadModel(model) {
    console.log('\nSaving and loading model...');

    // Save model to local storage
    await model.save('localstorage://my-model');
    console.log('Model saved to local storage');

    // Load model from local storage
    const loadedModel = await tf.loadLayersModel('localstorage://my-model');
    console.log('Model loaded from local storage');

    return loadedModel;
}

// Main execution
async function main() {
    try {
        // Create and prepare data
        const trainingData = createTrainingData();
        console.log('Training data created:', trainingData.data.shape, trainingData.labels.shape);

        // Create model
        const model = createModel();
        console.log('Model architecture:');
        model.summary();

        // Train model
        await trainModel(model, trainingData);

        // Make predictions
        makePredictions(model);

        // Save and load model
        const loadedModel = await saveAndLoadModel(model);
        console.log('\nPrediction with loaded model:');
        makePredictions(loadedModel);

        // Clean up
        trainingData.data.dispose();
        trainingData.labels.dispose();
        model.dispose();
        loadedModel.dispose();

    } catch (error) {
        console.error('Error:', error);
    }
}

// Run the example
main();

💻 Régression Linéaire javascript

🟡 intermediate ⭐⭐⭐

Implémenter la régression linéaire pour prédire des valeurs continues

⏱️ 20 min 🏷️ tensorflow, regression, prediction
Prerequisites: Basic TensorFlow.js, Regression concepts
// Linear Regression with TensorFlow.js

// 1. Generate synthetic data
function generateLinearData(numPoints = 100) {
    const x = [];
    const y = [];

    // y = 2x + 1 + noise
    for (let i = 0; i < numPoints; i++) {
        const xVal = Math.random() * 10;
        const noise = (Math.random() - 0.5) * 2;
        const yVal = 2 * xVal + 1 + noise;

        x.push(xVal);
        y.push(yVal);
    }

    return {
        x: tf.tensor2d(x, [x.length, 1]),
        y: tf.tensor2d(y, [y.length, 1])
    };
}

// 2. Create linear regression model
function createLinearModel() {
    const model = tf.sequential();

    // Single neuron for linear regression
    model.add(tf.layers.dense({
        units: 1,
        inputShape: [1]
    }));

    // Compile with appropriate loss function for regression
    model.compile({
        optimizer: tf.train.sgd(0.01),
        loss: 'meanSquaredError'
    });

    return model;
}

// 3. Train the model
async function trainLinearRegression(model, data) {
    console.log('Training linear regression model...');

    const history = await model.fit(data.x, data.y, {
        epochs: 100,
        batchSize: 32,
        callbacks: {
            onEpochEnd: (epoch, logs) => {
                if (epoch % 10 === 0) {
                    console.log(`Epoch ${epoch}: loss = ${logs.loss.toFixed(4)}`);
                }
            }
        }
    });

    return history;
}

// 4. Evaluate and visualize results
function evaluateModel(model, data) {
    console.log('\nEvaluating model...');

    // Get the learned parameters
    const weights = model.getWeights();
    const weight = weights[0].dataSync()[0];
    const bias = weights[1].dataSync()[0];

    console.log(`Learned equation: y = ${weight.toFixed(3)}x + ${bias.toFixed(3)}`);
    console.log(`Expected equation: y = 2.000x + 1.000`);

    // Make predictions on test data
    const testX = tf.tensor2d([[0], [5], [10]]);
    const predictions = model.predict(testX);

    console.log('\nPredictions:');
    testX.dataSync().forEach((x, i) => {
        const pred = predictions.dataSync()[i];
        console.log(`x = ${x}, predicted y = ${pred.toFixed(3)}`);
    });

    // Calculate R-squared
    const yPred = model.predict(data.x);
    const yMean = data.y.mean();
    const totalSumSquares = data.y.sub(yMean).square().sum();
    const residualSumSquares = data.y.sub(yPred).square().sum();
    const rSquared = tf.tensor1d([1]).sub(residualSumSquares.div(totalSumSquares));

    console.log(`R-squared: ${rSquared.dataSync()[0].toFixed(4)}`);

    // Clean up
    testX.dispose();
    predictions.dispose();
    yPred.dispose();
    yMean.dispose();
    totalSumSquares.dispose();
    residualSumSquares.dispose();
    rSquared.dispose();
}

// 5. Plot training progress (browser example)
function setupTrainingVisualization(model, data) {
    console.log('\nSetting up visualization (browser)...');

    // This would typically be used with a charting library like Chart.js
    // For demonstration, we'll just log the data
    const predictions = model.predict(data.x);

    console.log('Sample points for visualization:');
    for (let i = 0; i < Math.min(10, data.x.shape[0]); i++) {
        const x = data.x.dataSync()[i];
        const yActual = data.y.dataSync()[i];
        const yPred = predictions.dataSync()[i];

        console.log(`(${x.toFixed(2)}, ${yActual.toFixed(2)}) -> predicted: ${yPred.toFixed(2)}`);
    }

    predictions.dispose();
}

// 6. Advanced: Polynomial regression
function createPolynomialModel(degree = 2) {
    const model = tf.sequential();

    model.add(tf.layers.dense({
        units: 10,
        activation: 'relu',
        inputShape: [1]
    }));

    model.add(tf.layers.dense({
        units: 10,
        activation: 'relu'
    }));

    model.add(tf.layers.dense({
        units: 1
    }));

    model.compile({
        optimizer: tf.train.adam(0.01),
        loss: 'meanSquaredError'
    });

    return model;
}

// Main execution
async function main() {
    try {
        // Generate linear data
        const data = generateLinearData(100);
        console.log('Generated data shape:', data.x.shape, data.y.shape);

        // Create and train linear model
        const linearModel = createLinearModel();
        console.log('\nLinear Model Architecture:');
        linearModel.summary();

        await trainLinearRegression(linearModel, data);
        evaluateModel(linearModel, data);
        setupTrainingVisualization(linearModel, data);

        // Try polynomial regression for comparison
        console.log('\n=== Polynomial Regression Comparison ===');
        const polyModel = createPolynomialModel(2);
        console.log('Polynomial Model Architecture:');
        polyModel.summary();

        await trainLinearRegression(polyModel, data);
        console.log('\nPolynomial model evaluation:');
        evaluateModel(polyModel, data);

        // Clean up
        data.x.dispose();
        data.y.dispose();
        linearModel.dispose();
        polyModel.dispose();

    } catch (error) {
        console.error('Error:', error);
    }
}

// Run the example
main();