নোডেজ (টেনসরফ্লো.জেএস) -তে কোনও মডেলকে কীভাবে প্রশিক্ষণ দেওয়া যায়?


29

আমি একটি চিত্র শ্রেণিবদ্ধ করতে চাই, কিন্তু পাইথন জানি না। টেনসরফ্লো.জেএস জাভাস্ক্রিপ্ট নিয়ে কাজ করে, যার সাথে আমি পরিচিত। মডেলগুলি কী এটি দিয়ে প্রশিক্ষিত হতে পারে এবং এটি করার পদক্ষেপগুলি কী হবে? সত্যি বলতে আমি কোথায় শুরু করব তা সম্পর্কে আমার কোনও ধারণা নেই।

কেবলমাত্র আমি বুঝতে পেরেছি যে কীভাবে "মোবাইলনেট" লোড করা যায় যা দৃশ্যত প্রাক-প্রশিক্ষিত মডেলের একটি সেট এবং এর সাথে চিত্রগুলি শ্রেণিবদ্ধকরণ:

const tf = require('@tensorflow/tfjs'),
      mobilenet = require('@tensorflow-models/mobilenet'),
      tfnode = require('@tensorflow/tfjs-node'),
      fs = require('fs-extra');

const imageBuffer = await fs.readFile(......),
      tfimage = tfnode.node.decodeImage(imageBuffer),
      mobilenetModel = await mobilenet.load();  

const results = await mobilenetModel.classify(tfimage);

যা কাজ করে, তবে এটি আমার কোনও উপকারে আসেনি কারণ আমি তৈরি করা লেবেলগুলি সহ আমার চিত্রগুলি ব্যবহার করে নিজের মডেলটি প্রশিক্ষণ দিতে চাই।

=======================

বলুন আমার কাছে একগুচ্ছ চিত্র এবং লেবেল রয়েছে। কোনও মডেল প্রশিক্ষণ দেওয়ার জন্য আমি কীভাবে সেগুলি ব্যবহার করব?

const myData = JSON.parse(await fs.readFile('files.json'));

for(const data of myData){
  const image = await fs.readFile(data.imagePath),
        labels = data.labels;

  // how to train, where to pass image and labels ?

}

আপনি সমস্যার মুখোমুখি কোথায়? আপনি যদি টেনসরফ্লো লোড করেন তবে আপনি নিজের মডেলটিকে প্রশিক্ষণ দিতে পারেন
অভিষেক আনন্দ

2
দেখে মনে হচ্ছে আপনি টেনসরফ্লো.জেএসএস মডেলগুলি tensorflow.org/js/guide/train_models আমি পাইথনের সাহায্যে টেনসরফ্লো ব্যবহার করেছি। যদি টেনসরফ্লো.জেএস জিপিইউ ব্যবহার না করে তবে প্রশিক্ষণটিতে অনেক বেশি সময় লাগতে পারে। আমার জন্য, colab.research.google.com একটি দরকারী সংস্থান ছিল কারণ এটি নিখরচায় এবং ১১ জিবি জিপিইউ সরবরাহ করে।
ক্যানব্যাক্স

1
এই খুবই বিস্তৃত একটি প্রশ্ন ... হিসাবে নির্দিষ্ট ডক্স , আপনি ব্যবহার করতে পারেন ml5 করার প্রশিক্ষণ মত সরাসরি একটি মডেল বা ব্যবহারের TF.js, এই Node.js উদাহরণ (ক প্রশিক্ষণ উদাহরণ দেখতে নমুনা কোড প্রসারিত)।
jdehesa

তবে আমি সেই কোডটিতে কোথাও দেখতে পাচ্ছি না কীভাবে ছবি এবং লেবেল পাস করবেন?
অ্যালেক্স

@ অ্যালেক্স তারা fitপদ্ধতিতে বা ডেটাসেটে পাস হয়েছে fitDataset, উদাহরণ হিসাবে দেখানো হয়েছে।
jdehesa

উত্তর:


22

প্রথমত, চিত্রগুলি টেনসরগুলিতে রূপান্তর করা দরকার। প্রথম পদ্ধতিটি হ'ল সমস্ত বৈশিষ্ট্য সমন্বিত একটি সেন্সর তৈরি করা (যথাক্রমে সমস্ত লেবেলযুক্ত একটি টেনসর)। ডেটাসেটটিতে কয়েকটি ইমেজ রয়েছে তবেই এই পথে যাওয়া উচিত।

  const imageBuffer = await fs.readFile(feature_file);
  tensorFeature = tfnode.node.decodeImage(imageBuffer) // create a tensor for the image

  // create an array of all the features
  // by iterating over all the images
  tensorFeatures = tf.stack([tensorFeature, tensorFeature2, tensorFeature3])

লেবেলগুলি প্রতিটি চিত্রের প্রকার নির্দেশ করে এমন একটি অ্যারে হবে ray

 labelArray = [0, 1, 2] // maybe 0 for dog, 1 for cat and 2 for birds

লেবেলের একটি গরম এনকোডিং তৈরি করার জন্য এখন একটি প্রয়োজন

 tensorLabels = tf.oneHot(tf.tensor1d(labelArray, 'int32'), 3);

টেনারগুলি একবার হলে প্রশিক্ষণের জন্য মডেল তৈরি করা দরকার model এখানে একটি সাধারণ মডেল।

const model = tf.sequential();
model.add(tf.layers.conv2d({
  inputShape: [height, width, numberOfChannels], // numberOfChannels = 3 for colorful images and one otherwise
  filters: 32,
  kernelSize: 3,
  activation: 'relu',
}));
model.add(tf.layers.flatten()),
model.add(tf.layers.dense({units: 3, activation: 'softmax'}));

তারপরে মডেলটিকে প্রশিক্ষণ দেওয়া যেতে পারে

model.fit(tensorFeatures, tensorLabels)

যদি ডেটাসেটে প্রচুর চিত্র থাকে তবে তার পরিবর্তে একটি টিএফড্যাট্যাসেট তৈরি করতে হবে। এই উত্তর কেন তা আলোচনা করে।

const genFeatureTensor = image => {
      const imageBuffer = await fs.readFile(feature_file);
      return tfnode.node.decodeImage(imageBuffer)
}

const labelArray = indice => Array.from({length: numberOfClasses}, (_, k) => k === indice ? 1 : 0)

function* dataGenerator() {
  const numElements = numberOfImages;
  let index = 0;
  while (index < numFeatures) {
    const feature = genFeatureTensor(imagePath) ;
    const label = tf.tensor1d(labelArray(classImageIndex))
    index++;
    yield {xs: feature, ys: label};
  }
}

const ds = tf.data.generator(dataGenerator);

এবং model.fitDataset(ds)মডেল প্রশিক্ষণ ব্যবহার


উপরেরটি নোডেজ প্রশিক্ষণের জন্য। ব্রাউজারে এ জাতীয় প্রক্রিয়াজাতকরণ genFeatureTensorকরতে, নিম্নলিখিত হিসাবে লেখা যেতে পারে:

function load(url){
  return new Promise((resolve, reject) => {
    const im = new Image()
        im.crossOrigin = 'anonymous'
        im.src = 'url'
        im.onload = () => {
          resolve(im)
        }
   })
}

genFeatureTensor = image => {
  const img = await loadImage(image);
  return tf.browser.fromPixels(image);
}

সাবধানতার একটি শব্দ হ'ল ভারী প্রসেসিং করা ব্রাউজারের মূল থ্রেডকে ব্লক করতে পারে। এখানেই ওয়েব কর্মীরা খেলতে আসে।


ইনপুট শেপ থেকে প্রস্থ এবং উচ্চতা কি চিত্রগুলির প্রস্থ এবং উচ্চতার সাথে মিলবে? তাহলে আমি বিভিন্ন মাত্রা সহ চিত্রগুলি পাস করতে পারি না?
অ্যালেক্স

হ্যাঁ তাদের অবশ্যই মিলবে। আপনার যদি মডেলের ইনপুট শেপ থেকে পৃথক প্রস্থ এবং উচ্চতার চিত্র থাকে তবে আপনার ইমেজটি আকার পরিবর্তন করতে হবেtf.image.resizeBilinear
এডিউকেভড

ঠিক আছে, এটি আসলে কাজ করে না। আমি ত্রুটিগুলি পেয়েছি
অ্যালেক্স

1
@ অ্যালেক্স আপনি দয়া করে মডেল সারাংশ এবং আপনি যে চিত্রটি লোড করছেন তার আকৃতি দিয়ে আপনার প্রশ্নটি আপডেট করতে পারেন? সমস্ত চিত্রের একই আকার হওয়া দরকার বা প্রশিক্ষণের জন্য চিত্রটির পুনরায় আকার দেওয়া দরকার
এঙ্কেজ করা

1
হাই @edkeveked, আমি অবজেক্ট সনাক্তকরণ কথা বলছি, আমি যোগ করেছি এখানে একটি নতুন প্রশ্ন দয়া করে দেখেছ stackoverflow.com/questions/59322382/...
Pranoy সরকার

10

উদাহরণ https://codelabs.developers.google.com/codelabs/tfjs-training-classifications/#0 উদাহরণ বিবেচনা করুন

তারা যা করে তা হ'ল:

  • একটি বিগ পিএনজি চিত্র নিন (চিত্রগুলির একটি উল্লম্ব উপসংহার)
  • কিছু লেবেল নিন
  • ডেটাসেট তৈরি করুন (data.js)

তারপর প্রশিক্ষণ

ডাটাসেটের বিল্ডিংটি নিম্নরূপ:

  1. চিত্র

বড় চিত্রটি এন উল্লম্ব অংশে বিভক্ত। (এন শঙ্কসাইজ হচ্ছে)

আকার 2 এর একটি অংশ হিসাবে বিবেচনা করুন।

চিত্র 1 এর পিক্সেল ম্যাট্রিক্স দেওয়া:

  1 2 3
  4 5 6

ছবিটির পিক্সেল ম্যাট্রিক্স 2 দেওয়া হয়েছে

  7 8 9
  1 2 3

ফলস্বরূপ অ্যারে হবে 1 2 3 4 5 6 7 8 9 1 2 3(একরকম 1D কনটেনটেশন)

সুতরাং মূলত প্রক্রিয়াজাতকরণ শেষে, আপনার প্রতিনিধিত্বকারী একটি বড় বাফার রয়েছে

[...Buffer(image1), ...Buffer(image2), ...Buffer(image3)]

  1. লেবেল

শ্রেণিবিন্যাস সমস্যার জন্য এই ধরণের ফর্ম্যাটিং করা হয়। সংখ্যার সাথে শ্রেণিবদ্ধ করার পরিবর্তে তারা একটি বুলিয়ান অ্যারে নেয়। 10 টির মধ্যে 7 টি শ্রেণি পূর্বাভাস দেওয়ার জন্য আমরা বিবেচনা করব [0,0,0,0,0,0,0,1,0,0] // 1 in 7e position, array 0-indexed

শুরু করতে আপনি যা করতে পারেন

  • আপনার চিত্রটি নিন (এবং এর সাথে সম্পর্কিত লেবেল)
  • আপনার চিত্রটি ক্যানভাসে লোড করুন
  • এর সম্পর্কিত বাফারটি বের করুন
  • আপনার সমস্ত চিত্রের বাফারকে একটি বড় বাফার হিসাবে সংযুক্ত করুন। এটি এক্স এর জন্য।
  • আপনার সমস্ত সম্পর্কিত লেবেল নিন, সেগুলি বুলিয়ান অ্যারে হিসাবে ম্যাপ করুন এবং সেগুলি সংলগ্ন করুন।

নীচে, আমি সাবক্লাস MNistData::load(বাকিটি যেমন দেওয়া যেতে পারে (স্ক্রিপ্ট.জেএস ব্যতীত যেখানে আপনাকে নিজের ক্লাস ইনস্ট্যান্ট করতে হবে তার পরিবর্তে))

আমি এখনও 28x28 চিত্র উত্পন্ন করি, এটিতে একটি অঙ্ক লিখি এবং একটি নিখুঁত নির্ভুলতা পাই যেহেতু আমি আওয়াজ বা স্বেচ্ছায় ভুল লেবেল অন্তর্ভুক্ত করি না।


import {MnistData} from './data.js'

const IMAGE_SIZE = 784;// actually 28*28...
const NUM_CLASSES = 10;
const NUM_DATASET_ELEMENTS = 5000;
const NUM_TRAIN_ELEMENTS = 4000;
const NUM_TEST_ELEMENTS = NUM_DATASET_ELEMENTS - NUM_TRAIN_ELEMENTS;


function makeImage (label, ctx) {
  ctx.fillStyle = 'black'
  ctx.fillRect(0, 0, 28, 28) // hardcoded, brrr
  ctx.fillStyle = 'white'
  ctx.fillText(label, 10, 20) // print a digit on the canvas
}

export class MyMnistData extends MnistData{
  async load() { 
    const canvas = document.createElement('canvas')
    canvas.width = 28
    canvas.height = 28
    let ctx = canvas.getContext('2d')
    ctx.font = ctx.font.replace(/\d+px/, '18px')
    let labels = new Uint8Array(NUM_DATASET_ELEMENTS*NUM_CLASSES)

    // in data.js, they use a batch of images (aka chunksize)
    // let's even remove it for simplification purpose
    const datasetBytesBuffer = new ArrayBuffer(NUM_DATASET_ELEMENTS * IMAGE_SIZE * 4);
    for (let i = 0; i < NUM_DATASET_ELEMENTS; i++) {

      const datasetBytesView = new Float32Array(
          datasetBytesBuffer, i * IMAGE_SIZE * 4, 
          IMAGE_SIZE);

      // BEGIN our handmade label + its associated image
      // notice that you could loadImage( images[i], datasetBytesView )
      // so you do them by bulk and synchronize after your promises after "forloop"
      const label = Math.floor(Math.random()*10)
      labels[i*NUM_CLASSES + label] = 1
      makeImage(label, ctx)
      const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
      // END you should be able to load an image to canvas :)

      for (let j = 0; j < imageData.data.length / 4; j++) {
        // NOTE: you are storing a FLOAT of 4 bytes, in [0;1] even though you don't need it
        // We could make it with a uint8Array (assuming gray scale like we are) without scaling to 1/255
        // they probably did it so you can copy paste like me for color image afterwards...
        datasetBytesView[j] = imageData.data[j * 4] / 255;
      }
    }
    this.datasetImages = new Float32Array(datasetBytesBuffer);
    this.datasetLabels = labels

    //below is copy pasted
    this.trainIndices = tf.util.createShuffledIndices(NUM_TRAIN_ELEMENTS);
    this.testIndices = tf.util.createShuffledIndices(NUM_TEST_ELEMENTS);
    this.trainImages = this.datasetImages.slice(0, IMAGE_SIZE * NUM_TRAIN_ELEMENTS);
    this.testImages = this.datasetImages.slice(IMAGE_SIZE * NUM_TRAIN_ELEMENTS);
    this.trainLabels =
        this.datasetLabels.slice(0, NUM_CLASSES * NUM_TRAIN_ELEMENTS);// notice, each element is an array of size NUM_CLASSES
    this.testLabels =
        this.datasetLabels.slice(NUM_CLASSES * NUM_TRAIN_ELEMENTS);
  }

}

8

আমি একটি টিউটোরিয়াল পেয়েছি [1] নতুন ক্লাসগুলি প্রশিক্ষণের জন্য কীভাবে বিদ্যমান মডেলটি ব্যবহার করবেন। এখানে প্রধান কোড অংশ:

index.html মাথা:

   <script src="https://unpkg.com/@tensorflow-models/knn-classifier"></script>

index.html বডি:

    <button id="class-a">Add A</button>
    <button id="class-b">Add B</button>
    <button id="class-c">Add C</button>

index.js:

    const classifier = knnClassifier.create();

    ....

    // Reads an image from the webcam and associates it with a specific class
    // index.
    const addExample = async classId => {
           // Capture an image from the web camera.
           const img = await webcam.capture();

           // Get the intermediate activation of MobileNet 'conv_preds' and pass that
           // to the KNN classifier.
           const activation = net.infer(img, 'conv_preds');

           // Pass the intermediate activation to the classifier.
           classifier.addExample(activation, classId);

           // Dispose the tensor to release the memory.
          img.dispose();
     };

     // When clicking a button, add an example for that class.
    document.getElementById('class-a').addEventListener('click', () => addExample(0));
    document.getElementById('class-b').addEventListener('click', () => addExample(1));
    document.getElementById('class-c').addEventListener('click', () => addExample(2));

    ....

মূল ধারণাটি হ'ল বিদ্যমান নেটওয়ার্কটিকে পূর্বাভাস দেওয়ার জন্য ব্যবহার করা এবং তারপরে খুঁজে পাওয়া লেবেলটিকে আপনার নিজের সাথে প্রতিস্থাপন করুন।

টিউটোরিয়ালে সম্পূর্ণ কোড রয়েছে। আরও একটি প্রতিশ্রুতিবদ্ধ, [2] এর মধ্যে আরও উন্নত। এর কঠোর প্রাক প্রক্রিয়াজাতকরণ প্রয়োজন, তাই আমি এটি এখানেই রেখে দেই, আমি বলতে চাইছি এটি অনেক বেশি উন্নত।

সূত্র:

[1] https://codelabs.developers.google.com/codelabs/tensorflowjs-teachablemachine-codelab/index.html#6

[২] https://towardsdatasज्ञान.com/training-custom-image-classifications-model-on-the-browser-with-tensorflow-js-and-angular-f1796ed24934


দয়া করে আমার দ্বিতীয় উত্তরের দিকে একবার নজর দিন, এটি বাস্তবের অনেক বেশি কাছাকাছি, কোথায় শুরু করবেন।
মাইকো

উভয় উত্তর এক মধ্যে রাখেন না কেন?

তারা একই জিনিস তাই বিভিন্ন পদ্ধতির আছে। এটি উপরে, যেখানে আমি এখন মন্তব্য করি এটি আসলে একটি কর্মক্ষেত্র, অন্যটি বেসিকগুলি থেকে শুরু হয়, যা আমি পরে মনে করি প্রশ্ন গঠনের দিকে আরও উপযুক্ত appropriate
মাইকো

3

টি এল; ডিআর

এমএনআইএসটি হ্যালো ওয়ার্ল্ডের চিত্র স্বীকৃতি। এটি হৃদয় দিয়ে শেখার পরে, আপনার মনের এই প্রশ্নগুলি সমাধান করা সহজ।


প্রশ্ন সেটিং:

আপনার মূল প্রশ্নটি লিখিত

 // how to train, where to pass image and labels ?

আপনার কোড ব্লকের ভিতরে। তাদের জন্য আমি টেনসরফ্লো.জেএস উদাহরণ বিভাগের উদাহরণ থেকে নিখুঁত উত্তর পেয়েছি: এমএনআইএসটি উদাহরণ। আমার নীচের লিঙ্কগুলিতে খাঁটি জাভাস্ক্রিপ্ট এবং নোড.জেএস এর সংস্করণ এবং উইকিপিডিয়া ব্যাখ্যা রয়েছে। আপনার মনের মূল প্রশ্নের উত্তর দেওয়ার জন্য প্রয়োজনীয় স্তরে আমি তাদের নিয়ে যাব এবং আমি কীভাবে আপনার নিজস্ব চিত্র এবং লেবেলগুলিকে এমএনআইএসটি চিত্র সেট এবং এটি ব্যবহারের উদাহরণগুলির সাথে কীভাবে কিছু আছে তার দৃষ্টিভঙ্গি যুক্ত করব।

আগেরটা আগে:

কোড স্নিপেটস।

ছবিগুলি কোথায় পাস করবেন (নোড.জেএস নমুনা)

async function loadImages(filename) {
  const buffer = await fetchOnceAndSaveToDiskWithBuffer(filename);

  const headerBytes = IMAGE_HEADER_BYTES;
  const recordBytes = IMAGE_HEIGHT * IMAGE_WIDTH;

  const headerValues = loadHeaderValues(buffer, headerBytes);
  assert.equal(headerValues[0], IMAGE_HEADER_MAGIC_NUM);
  assert.equal(headerValues[2], IMAGE_HEIGHT);
  assert.equal(headerValues[3], IMAGE_WIDTH);

  const images = [];
  let index = headerBytes;
  while (index < buffer.byteLength) {
    const array = new Float32Array(recordBytes);
    for (let i = 0; i < recordBytes; i++) {
      // Normalize the pixel values into the 0-1 interval, from
      // the original 0-255 interval.
      array[i] = buffer.readUInt8(index++) / 255;
    }
    images.push(array);
  }

  assert.equal(images.length, headerValues[1]);
  return images;
}

মন্তব্য:

এমএনআইএসটি ডেটাসেট একটি বিশাল চিত্র, যেখানে এক ফাইলে ধাঁধাতে টাইলসের মতো একাধিক চিত্র রয়েছে এবং প্রতিটি আকার এবং পাশাপাশি প্রতিটি x এবং y সমন্বয় সারণীর বাক্সগুলির মতো রয়েছে। প্রতিটি বাক্সে একটি করে নমুনা এবং লেবেল অ্যারেতে সংশ্লিষ্ট x এবং y থাকে the এই উদাহরণ থেকে, এটি বেশ কয়েকটি ফাইলের ফর্ম্যাটে পরিণত করা কোনও বড় বিষয় নয়, যাতে হ্যান্ডল করার জন্য লুপটিকে আসলে একবারে কেবল একটি পিক দেওয়া হয়।

লেবেল:

async function loadLabels(filename) {
  const buffer = await fetchOnceAndSaveToDiskWithBuffer(filename);

  const headerBytes = LABEL_HEADER_BYTES;
  const recordBytes = LABEL_RECORD_BYTE;

  const headerValues = loadHeaderValues(buffer, headerBytes);
  assert.equal(headerValues[0], LABEL_HEADER_MAGIC_NUM);

  const labels = [];
  let index = headerBytes;
  while (index < buffer.byteLength) {
    const array = new Int32Array(recordBytes);
    for (let i = 0; i < recordBytes; i++) {
      array[i] = buffer.readUInt8(index++);
    }
    labels.push(array);
  }

  assert.equal(labels.length, headerValues[1]);
  return labels;
}

মন্তব্য:

এখানে, লেবেলগুলি কোনও ফাইলে বাইট ডেটাও রয়েছে। জাভাস্ক্রিপ্ট বিশ্বে এবং আপনার প্রারম্ভিক পয়েন্টে থাকা পদ্ধতির সাথে, লেবেলগুলিও একটি জসন অ্যারে হতে পারে।

মডেল প্রশিক্ষণ:

await data.loadData();

  const {images: trainImages, labels: trainLabels} = data.getTrainData();
  model.summary();

  let epochBeginTime;
  let millisPerStep;
  const validationSplit = 0.15;
  const numTrainExamplesPerEpoch =
      trainImages.shape[0] * (1 - validationSplit);
  const numTrainBatchesPerEpoch =
      Math.ceil(numTrainExamplesPerEpoch / batchSize);
  await model.fit(trainImages, trainLabels, {
    epochs,
    batchSize,
    validationSplit
  });

মন্তব্য:

কোডটির model.fitআসল লাইনটি এখানে কাজটি করে: মডেলকে প্রশিক্ষণ দেয়।

পুরো জিনিসটির ফলাফল:

  const {images: testImages, labels: testLabels} = data.getTestData();
  const evalOutput = model.evaluate(testImages, testLabels);

  console.log(
      `\nEvaluation result:\n` +
      `  Loss = ${evalOutput[0].dataSync()[0].toFixed(3)}; `+
      `Accuracy = ${evalOutput[1].dataSync()[0].toFixed(3)}`);

বিঃদ্রঃ:

ডেটা সায়েন্সেও, এবারও, এখানে সবচেয়ে স্পর্শকাতর অংশটি হল মডেলটি কতটা ভালভাবে নতুন ডেটা এবং কোনও লেবেল পরীক্ষায় বেঁচে থাকতে পারে তা জানার জন্য, এটি তাদের লেবেল দিতে পারে কি না? এর জন্য মূল্যায়ন অংশটি এখন আমাদের কয়েকটি সংখ্যা মুদ্রণ করে।

ক্ষতি এবং যথার্থতা: [4]

ক্ষতি যত কম হবে ততই ভাল একটি মডেল (যদি না মডেলটি প্রশিক্ষণের ডেটাতে বেশি ফিট করে)। লোকসানটি প্রশিক্ষণ এবং বৈধকরণের জন্য গণনা করা হয় এবং এর ইন্টারপেরেশনটি এই দুটি সেটগুলির জন্য মডেল কতটা ভাল করছে। নির্ভুলতার বিপরীতে, লোকসান শতাংশ নয়। এটি প্রশিক্ষণ বা বৈধতা সেটগুলিতে প্রতিটি উদাহরণের জন্য করা ত্রুটির সংমিশ্রণ।

..

মডেলটির যথার্থতা সাধারণত মডেল পরামিতিগুলি শেখার এবং স্থির হওয়ার পরে নির্ধারিত হয় এবং কোন শেখা হচ্ছে না। তারপরে পরীক্ষার নমুনাগুলি মডেলকে খাওয়ানো হয় এবং মডেল যে ভুল করে (শূন্য-ওয়ান ক্ষতি) তার লক্ষ্যগুলি তুলনা করার পরে রেকর্ড করা হয়।


অধিক তথ্য:

গিথুব পৃষ্ঠাগুলিতে, README.md ফাইলে টিউটোরিয়ালটির একটি লিঙ্ক রয়েছে, যেখানে গিথুব উদাহরণের সমস্তগুলি আরও বিশদভাবে ব্যাখ্যা করা হয়েছে।


[1] https://github.com/tensorflow/tfjs-example/tree/master/mnist

[২] https://github.com/tensorflow/tfjs-example/tree/master/mnist-node

[3] https://en.wikedia.org/wiki/MNIST_database

[4] একটি মেশিন লার্নিং মডেলের "ক্ষতি" এবং "নির্ভুলতা" কীভাবে ব্যাখ্যা করবেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.