lmoroney / dlaicourse

Notebooks for learning deep learning
5.66k stars 5.38k forks source link

TensorFlowDeployment-Course1-TensorFlowJS-Week 2-Exercise #80

Closed IbrahimOmar91 closed 4 years ago

IbrahimOmar91 commented 4 years ago

I am trying to solve the exercise every time I run it loss and acc never changes I tried to just change the example files of data images and labels from mnist to fashion-mnist but loss and acc never changes Any tips on what I am doing wrong?

Fashion-Script Exercise JS File:

import {FMnistData} from './fashion-data.js'; var canvas, ctx, saveButton, clearButton; var pos = {x:0, y:0}; var rawImage; var model;

function getModel() {

// In the space below create a convolutional neural network that can classify the 
// images of articles of clothing in the Fashion MNIST dataset. Your convolutional
// neural network should only use the following layers: conv2d, maxPooling2d,
// flatten, and dense. Since the Fashion MNIST has 10 classes, your output layer
// should have 10 units and a softmax activation function. You are free to use as
// many layers, filters, and neurons as you like.  
// HINT: Take a look at the MNIST example.
model = tf.sequential();

model.add(tf.layers.conv2d({inputShape: [28 , 28 , 1] , kernelSize: 3 , filters: 8 , activation: 'sigmoid'}));
model.add(tf.layers.maxPooling2d({poolSize: [2 , 2]}));
model.add(tf.layers.conv2d({filters: 16 , kernelSize: 3 , activation: 'sigmoid'}));
model.add(tf.layers.maxPooling2d({poolSize: [2 , 2]}));
model.add(tf.layers.flatten());
model.add(tf.layers.dense({units: 128 , activation: 'sigmoid'}));
model.add(tf.layers.dense({units: 10 , activation: 'softmax'}));

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

return model;

}

async function train(model, data) {

// Set the following metrics for the callback: 'loss', 'val_loss', 'acc', 'val_acc'.
const metrics = ['loss' , 'val_loss' , 'acc' , 'val_acc'];
const container = {name: 'Model Training' , styles: {height: '1000px' }};
const fitCallbacks = tfvis.show.fitCallbacks(container , metrics);

const BATCH_SIZE = 512;
const TRAIN_DATA_SIZE = 6000;
const TEST_DATA_SIZE = 1000;

const [trainXs , trainYs] = tf.tidy(() =>{
    const d = data.nextTrainBatch(TRAIN_DATA_SIZE);
    return[
        d.xs.reshape([TRAIN_DATA_SIZE , 28 , 28 , 1]),
        d.labels
    ];
});

const [testXs , testYs] = tf.tidy(() =>{
    const d = data.nextTestBatch(TEST_DATA_SIZE);
    return [
        d.xs.reshape([TEST_DATA_SIZE , 28 , 28 , 1]),
        d.labels
    ];
});

return model.fit(trainXs, trainYs, {
    batchSize: BATCH_SIZE,
    validationData: [testXs, testYs],
    epochs: 10,
    shuffle: true,
    callbacks: fitCallbacks
});

}

function setPosition(e){ pos.x = e.clientX-100; pos.y = e.clientY-100; }

function draw(e) { if(e.buttons!=1) return; ctx.beginPath(); ctx.lineWidth = 24; ctx.lineCap = 'round'; ctx.strokeStyle = 'white'; ctx.moveTo(pos.x, pos.y); setPosition(e); ctx.lineTo(pos.x, pos.y); ctx.stroke(); rawImage.src = canvas.toDataURL('image/png'); }

function erase() { ctx.fillStyle = "black"; ctx.fillRect(0,0,280,280); }

function save() { var raw = tf.browser.fromPixels(rawImage,1); var resized = tf.image.resizeBilinear(raw, [28,28]); var tensor = resized.expandDims(0);

var prediction = model.predict(tensor);
var pIndex = tf.argMax(prediction, 1).dataSync();

var classNames = ["T-shirt/top", "Trouser", "Pullover", 
                  "Dress", "Coat", "Sandal", "Shirt",
                  "Sneaker",  "Bag", "Ankle boot"];

alert(classNames[pIndex]);

}

function init() { canvas = document.getElementById('canvas'); rawImage = document.getElementById('canvasimg'); ctx = canvas.getContext("2d"); ctx.fillStyle = "black"; ctx.fillRect(0,0,280,280); canvas.addEventListener("mousemove", draw); canvas.addEventListener("mousedown", setPosition); canvas.addEventListener("mouseenter", setPosition); saveButton = document.getElementById('sb'); saveButton.addEventListener("click", save); clearButton = document.getElementById('cb'); clearButton.addEventListener("click", erase); }

async function run() { const data = new FMnistData(); await data.load(); const model = getModel(); tfvis.show.modelSummary({name: 'Model Architecture'}, model); await train(model, data); await model.save('downloads://my_model'); init(); alert("Training is done, try classifying your drawings!"); }

document.addEventListener('DOMContentLoaded', run);

Fashion Data /**

const IMAGE_SIZE = 784; const NUM_CLASSES = 10; const NUM_DATASET_ELEMENTS = 70000;

const TRAIN_TEST_RATIO = 1 / 7;

const NUM_TRAIN_ELEMENTS = Math.floor(TRAIN_TEST_RATIO * NUM_DATASET_ELEMENTS); const NUM_TEST_ELEMENTS = NUM_DATASET_ELEMENTS - NUM_TRAIN_ELEMENTS;

const MNIST_IMAGES_SPRITE_PATH = 'https://storage.googleapis.com/learnjs-data/model-builder/fashion_mnist_images.png'; const MNIST_LABELS_PATH = 'https://storage.googleapis.com/learnjs-data/model-builder/fashion_mnist_labels_uint8';

/**

IbrahimOmar91 commented 4 years ago

I figured out that the problem was me using Firefox not Chrome

So, if anyone having this issue, make sure that you are using chrome browser