www.xbdev.net
xbdev - software development
Friday May 22, 2026
Home | Contact | Support | WebGPU Graphics and Compute ... | Neural Networks and WebGPU Compute.. Learning from Data.....
     
 

Neural Networks and WebGPU Compute..

Learning from Data.....

 


Happy or Sad Smiley Face



• Network (48*48,15,15,2)


Complete Code





// Learning smiley - deep neural network setup
// (48x48) pixel values (input)
// (15,15) hidden layers 
// (2) sad or happy

await xinitialize( {layers:[2304,15,15,2], build:'cpu', learningrate:0.1} );

let div = document.createElement('div');
document.body.appendChild( div );
div.innerHTML = `
<br><br>
<canvas id="mycanvas" width="48" height="48" style="border:1px solid #ff0000;"> </canvas>
<br><br>
<div id="counter">Iteration:</div>
<br>
<div id="result">Result/Output:</div>
`;

var canvas     = null;
var context    = null;
var iteration  = 0;    
var data       = []
var imgs       = []
    
// hard coded 20 test images loaded in (pixel data)
for (let v=0; v<20; ++v)
{
    // 10 happy and 10 sad faces
    let suf = "h0" + v;
    if (v>=10) suf = 's0' + (v-10);
    
    let imgFileName = "https://webgpulab.xbdev.net/var/images/smileys/" + suf + ".jpg";
    
    imgs[v] = new Image();
    imgs[v].src = imgFileName;
    imgs[v].onload = function() {
          canvas    = canvas || document.getElementById('mycanvas');
        context       = context || canvas.getContext('2d');
        canvas.width  = this.width;
        canvas.height = this.height;
        
        context.drawImage(this, 0, 0);
        
        console.log("Dimensions: " + this.width + 'x' + this.height);
        
        let imgData = context.getImageData(0, 0, 48, 48).data;
        
        // convert rgba to an array of scalar values 
        graydata = []
        for (let kk=0; kk<imgData.length; kk+=4)
        {
            // scale our imaeg data 0.0 to 1.0
            graydata.push( imgData[kk] / 255.0 );
        }
        

        if ( v < 10 )
            data.push( { number:v, datain:graydata, dataout:[1,0] } );
        else
            data.push( { number:v, datain:graydata, dataout:[0,1] } );
            
        console.log( data[ data.length-1 ].dataout )
        
        if ( v >= 18 )
        {
            console.log('All images loaded');
        }
    }    
}// end loop(..)


async function preview(){
    // check if data/images is still loading
    if ( data.length < 20 )
    {
        requestAnimationFrame(preview);
        return;
    }
    
    const testImage = 14;
    
    //console.log( data.length );

    iteration++;
    
    var elem = document.getElementById('counter');
    elem.innerHTML = "Iteration: " + iteration;
    
    // e.g., which test image you're using, h02.jpg as the test image
    var result = await xactivate( data[ testImage ].datain ); 
    var resElm = document.getElementById('result');

    var face = "happy";
    if ( result[1] > result[0] ) face = "sad";
    
    resElm.innerHTML = "Result (" + face + ") '[happy:[1,0], sad[0,1]]}: '" + result;
    
    canvas    = canvas || document.getElementById('mycanvas');
    context   = context || canvas.getContext('2d');
        
    var imageData = context.getImageData(0, 0, 48, 48);
    for (let kk=0; kk<48*48; kk=kk+1)
    {
        imageData.data[kk*4 + 0] = data[ testImage ].datain[kk] * 255.0;
        imageData.data[kk*4 + 1] = data[ testImage ].datain[kk] * 255.0;
        imageData.data[kk*4 + 2] = data[ testImage ].datain[kk] * 255.0;
        //imageData.data[kk*4 + 3] = 255; 
    }
    context.putImageData(imageData,0,0, 0, 0, 48,48);
    
    requestAnimationFrame(iterate);
}

/*
 Keep training the neural network to improve its accuracy
 */
async function iterate(){
        
    for (var i=0; i<20; ++i)
    {
        var dynamicRate =  .01/(1+.0005*iteration);
        await xactivate( data[i].datain ); 
        await xpropagate( data[i].dataout, dynamicRate );
    }

    await preview();
}

preview();




Resources and Links


• WebGPU Lab Demo [LINK]















WebGPU by Example: Fractals, Image Effects, Ray-Tracing, Procedural Geometry, 2D/3D, Particles, Simulations WebGPU Compute graphics and animations using the webgpu api 12 week course kenwright learn webgpu api kenwright programming compute and graphics applications with html5 and webgpu api kenwright real-time 3d graphics with webgpu kenwright webgpu api develompent a quick start guide kenwright webgpu by example 2022 kenwright webgpu gems kenwright webgpu interactive compute and graphics visualization cookbook kenwright wgsl webgpu shading language cookbook kenwright wgsl webgpugems shading language cookbook kenwright



 
Advert (Support Website)

 
 Visitor:
Copyright (c) 2002-2026 xbdev.net - All rights reserved.
Designated articles, tutorials and software are the property of their respective owners.