আপনার TFLite- চালিত iOS অ্যাপে Firebase যোগ করুন

1। সংক্ষিপ্ত বিবরণ

গোল

Firebase ML আপনাকে আপনার মডেল ওভার-দ্য-এয়ার স্থাপন করতে সক্ষম করে। এটি আপনাকে অ্যাপের আকার ছোট রাখতে এবং প্রয়োজনের সময় শুধুমাত্র এমএল মডেল ডাউনলোড করতে, একাধিক মডেলের সাথে পরীক্ষা করতে বা সম্পূর্ণ অ্যাপটি পুনঃপ্রকাশ না করেই আপনার এমএল মডেল আপডেট করতে দেয়।

এই কোডল্যাবে আপনি একটি স্ট্যাটিক TFLite মডেল ব্যবহার করে একটি iOS অ্যাপকে ফায়ারবেস থেকে গতিশীলভাবে পরিবেশিত একটি মডেল ব্যবহার করে একটি অ্যাপে রূপান্তর করবেন। আপনি শিখবেন কিভাবে:

  1. TFLite মডেলগুলি Firebase ML-এ স্থাপন করুন এবং আপনার অ্যাপ থেকে সেগুলি অ্যাক্সেস করুন৷
  2. বিশ্লেষণের সাথে মডেল-সম্পর্কিত মেট্রিক্স লগ করুন
  3. রিমোট কনফিগারেশনের মাধ্যমে কোন মডেলটি লোড করা হয়েছে তা নির্বাচন করুন
  4. A/B পরীক্ষা বিভিন্ন মডেল

পূর্বশর্ত

এই কোডল্যাব শুরু করার আগে নিশ্চিত করুন যে আপনি ইনস্টল করেছেন:

  • Xcode 11 (বা উচ্চতর)
  • CocoaPods 1.9.1 (বা উচ্চতর)

2. ফায়ারবেস কনসোল প্রকল্প তৈরি করুন

প্রকল্পে Firebase যোগ করুন

  1. যান Firebase কনসোল
  2. নতুন প্রকল্প তৈরি করুন এবং আপনার প্রকল্পের "Firebase এমএল আইওএস Codelab" নাম নির্বাচন করুন।

3. নমুনা প্রকল্প পান

কোডটি ডাউনলোড করুন

নমুনা প্রকল্পের ক্লোনিং এবং চলমান দ্বারা শুরু করুন pod update প্রকল্পের ডিরেক্টরির মধ্যে:

git clone https://github.com/FirebaseExtended/codelab-digitclassifier-ios.git
cd codelab-digitclassifier-ios
pod install --repo-update

আপনি Git ইনস্টল না থাকে, তাহলে আপনি তার GitHub পাতা থেকে বা ক্লিক করে নমুনা প্রকল্পের বিনামূল্যে ডাউনলোড করতে পারেন এই লিঙ্কে । একবার আপনি প্রকল্পটি ডাউনলোড করার পরে, এটিকে Xcode-এ চালান এবং এটি কীভাবে কাজ করে তার অনুভূতি পেতে ডিজিট ক্লাসিফায়ারের সাথে খেলুন।

Firebase সেট আপ করুন

অনুসরণ ডকুমেন্টেশন একটি নতুন Firebase প্রকল্পের তৈরি করুন। একবার আপনি আপনার প্রকল্পের পেয়েছেন, আপনার প্রকল্পের ডাউনলোড GoogleService-Info.plist থেকে ফাইল Firebase কনসোল Xcode প্রকল্পের রুট প্রয়োজন এবং টেনে আনুন।

f06cb08d48de7e10.png

আপনার Podfile এ Firebase যোগ করুন এবং পড ইনস্টল চালান।

pod 'Firebase/MLCommon'
pod 'FirebaseMLModelInterpreter', '0.20.0'

আপনার AppDelegate এর didFinishLaunchingWithOptions পদ্ধতি, ফাইল উপরের Firebase আমদানি

import Firebase

এবং Firebase কনফিগার করতে একটি কল যোগ করুন।

FirebaseApp.configure()

অ্যাপটি সঠিকভাবে কনফিগার করা হয়েছে এবং লঞ্চের সময় ক্র্যাশ না হয় তা নিশ্চিত করতে প্রকল্পটি আবার চালান।

4. Firebase ML-এ একটি মডেল স্থাপন করুন

Firebase ML-এ একটি মডেল স্থাপন করা দুটি প্রধান কারণের জন্য দরকারী:

  1. আমরা অ্যাপের ইন্সটল সাইজ ছোট রাখতে পারি এবং প্রয়োজন হলে শুধুমাত্র মডেলটি ডাউনলোড করতে পারি
  2. মডেলটি নিয়মিত আপডেট করা যেতে পারে এবং সম্পূর্ণ অ্যাপের থেকে আলাদা রিলিজ চক্রের সাথে

আমরা আমাদের অ্যাপে স্ট্যাটিক মডেলটিকে Firebase থেকে একটি গতিশীলভাবে ডাউনলোড করা মডেল দিয়ে প্রতিস্থাপন করার আগে, আমাদের এটি Firebase ML-এ স্থাপন করতে হবে। ফায়ারবেস অ্যাডমিন SDK ব্যবহার করে মডেলটি কনসোলের মাধ্যমে বা প্রোগ্রাম্যাটিকভাবে স্থাপন করা যেতে পারে। এই ধাপে আমরা কনসোলের মাধ্যমে স্থাপন করব।

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

যখন বলা হবে, মডেল মত একটি বর্ণনামূলক নাম দিতে mnist_v1 এবং codelab প্রকল্পের ডিরেক্টরি থেকে ফাইল আপলোড করুন।

3c3c50e6ef12b3b.png

5. Firebase ML থেকে মডেল ডাউনলোড করুন

আপনার অ্যাপে Firebase থেকে রিমোট মডেল কখন ডাউনলোড করতে হবে তা বেছে নেওয়া কঠিন হতে পারে কারণ TFLite মডেলগুলি তুলনামূলকভাবে বড় হতে পারে। আদর্শভাবে আমরা অ্যাপটি চালু হওয়ার সাথে সাথে মডেলটি লোড করা এড়াতে চাই, যেহেতু আমাদের মডেলটি শুধুমাত্র একটি বৈশিষ্ট্যের জন্য ব্যবহার করা হয় এবং ব্যবহারকারী কখনই সেই বৈশিষ্ট্যটি ব্যবহার না করে, তাহলে আমরা বিনা কারণেই উল্লেখযোগ্য পরিমাণ ডেটা ডাউনলোড করব। আমরা ডাউনলোডের বিকল্পগুলিও সেট করতে পারি যেমন wifi এর সাথে সংযুক্ত থাকাকালীন শুধুমাত্র মডেলগুলি আনা। আপনি যদি নিশ্চিত করতে চান যে মডেলটি এমনকি নেটওয়ার্ক সংযোগ ছাড়াই উপলব্ধ, তাহলে আপনাকে ব্যাকআপ হিসাবে অ্যাপের অংশ হিসাবে মডেলটি বান্ডেল করা উচিত।

সরলতার স্বার্থে, আমরা ডিফল্ট বান্ডিল করা মডেলটি সরিয়ে দেব এবং অ্যাপটি শুরু হলে সর্বদা Firebase থেকে একটি মডেল ডাউনলোড করব। এইভাবে অঙ্ক শনাক্তকরণ চালানোর সময় আপনি নিশ্চিত হতে পারেন যে অনুমানটি Firebase থেকে প্রদত্ত মডেলের সাথে চলছে।

উপরের দিকে ModelDownloader.swift , Firebase মডিউল আমদানি করুন।

import Firebase

তারপর নিম্নলিখিত পদ্ধতিগুলি বাস্তবায়ন করুন।

static func downloadModel(named name: String,
                          completion: @escaping (RemoteModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }

  let remoteModel = CustomRemoteModel(name: name)
  let conditions = ModelDownloadConditions(allowsCellularAccess: true,
                                           allowsBackgroundDownloading: true)

  success = NotificationCenter.default.addObserver(forName: .firebaseMLModelDownloadDidSucceed,
                                                   object: nil,
                                                   queue: nil) { (notification) in
    defer { success = nil; failure = nil }
    guard let userInfo = notification.userInfo,
        let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? RemoteModel
    else {
      completion(nil, .downloadReturnedEmptyModel)
      return
    }
    guard model.name == name else {
      completion(nil, .downloadReturnedWrongModel)
      return
    }
    completion(model, nil)
  }
  failure = NotificationCenter.default.addObserver(forName: .firebaseMLModelDownloadDidFail,
                                                   object: nil,
                                                   queue: nil) { (notification) in
    defer { success = nil; failure = nil }
    guard let userInfo = notification.userInfo,
        let error = userInfo[ModelDownloadUserInfoKey.error.rawValue] as? Error
    else {
      completion(nil, .mlkitError(underlyingError: DownloadError.unknownError))
      return
    }
    completion(nil, .mlkitError(underlyingError: error))
  }
  ModelManager.modelManager().download(remoteModel, conditions: conditions)
}

// Attempts to fetch the model from disk, downloading the model if it does not already exist.
static func fetchModel(named name: String,
                       completion: @escaping (String?, DownloadError?) -> Void) {
  let remoteModel = CustomRemoteModel(name: name)
  if ModelManager.modelManager().isModelDownloaded(remoteModel) {
    ModelManager.modelManager().getLatestModelFilePath(remoteModel) { (path, error) in
      completion(path, error.map { DownloadError.mlkitError(underlyingError: $0) })
    }
  } else {
    downloadModel(named: name) { (model, error) in
      guard let model = model else {
        let underlyingError = error ?? DownloadError.unknownError
        let compositeError = DownloadError.mlkitError(underlyingError: underlyingError)
        completion(nil, compositeError)
        return
      }
      ModelManager.modelManager().getLatestModelFilePath(model) { (path, pathError) in
        completion(path, error.map { DownloadError.mlkitError(underlyingError: $0) })
      }
    }
  }
}

ইন ViewController.swift এর viewDidLoad , আমাদের নতুন মডেল ডাউনলোড পদ্ধতি সঙ্গে DigitClassifier আরম্ভের কল প্রতিস্থাপন করুন।

// Download the model from Firebase
print("Fetching model...")
ModelDownloader.fetchModel(named: "mnist_v1") { (filePath, error) in
  guard let path = filePath else {
    if let error = error {
      print(error)
    }
    return
  }
  print("Model download complete")

  // Initialize a DigitClassifier instance
  DigitClassifier.newInstance(modelPath: path) { result in
    switch result {
    case let .success(classifier):
      self.classifier = classifier
    case .error(_):
      self.resultLabel.text = "Failed to initialize."
    }
  }
}

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

6. মডেল নির্ভুলতা পরিমাপ করতে ব্যবহারকারীর প্রতিক্রিয়া এবং রূপান্তর ট্র্যাক করুন

আমরা মডেল ভবিষ্যদ্বাণীতে ব্যবহারকারীর প্রতিক্রিয়া ট্র্যাক করে মডেলের যথার্থতা পরিমাপ করব। যদি একজন ব্যবহারকারী "হ্যাঁ" ক্লিক করেন তবে এটি নির্দেশ করবে যে ভবিষ্যদ্বাণীটি সঠিক ছিল৷

আমাদের মডেলের যথার্থতা ট্র্যাক করতে আমরা একটি অ্যানালিটিক্স ইভেন্ট লগ করতে পারি। প্রথমত, প্রোজেক্টে ব্যবহার করার আগে আমাদের পডফাইলে অ্যানালিটিক্স যোগ করতে হবে:

pod 'Firebase/Analytics'

তারপর ViewController.swift ফাইল উপরের Firebase আমদানি

import Firebase

আর কোড নিম্নলিখিত লাইন যোগ correctButtonPressed পদ্ধতি।

Analytics.logEvent("correct_inference", parameters: nil)

অ্যাপটি আবার চালান এবং একটি অঙ্ক আঁকুন। অনুমানটি সঠিক ছিল এমন প্রতিক্রিয়া পাঠাতে "হ্যাঁ" বোতামটি কয়েকবার টিপুন।

ডিবাগ বিশ্লেষণ

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

আপনার ডেভেলপমেন্ট ডিভাইসে অ্যানালিটিক্স ডিবাগ মোড সক্ষম করতে, Xcode-এ নিম্নলিখিত কমান্ড লাইন আর্গুমেন্ট উল্লেখ করুন:

-FIRDebugEnabled

অ্যাপটি আবার চালান এবং একটি অঙ্ক আঁকুন। অনুমানটি সঠিক ছিল এমন প্রতিক্রিয়া পাঠাতে "হ্যাঁ" বোতামটি কয়েকবার টিপুন। এখন আপনি Firebase কনসোলে ডিবাগ ভিউ এর মাধ্যমে কাছাকাছি রিয়েল টাইমে লগ ইভেন্টগুলি দেখতে পারেন। বাম নেভিগেশন বার থেকে Analytics > DebugView-এ ক্লিক করুন।

5276199a086721fd.png

7. ফায়ারবেস পারফরম্যান্সের সাথে অনুমান সময় ট্র্যাক করুন

আপনার মডেল পরীক্ষা করার সময়, ডেভেলপমেন্ট ডিভাইসে তৈরি পারফরম্যান্স মেট্রিক্স আপনার ব্যবহারকারীদের হাতে মডেলটি কীভাবে পারফর্ম করবে তা ক্যাপচার করার জন্য যথেষ্ট নয়, কারণ হার্ডওয়্যার ব্যবহারকারীরা আপনার অ্যাপটি কী চালাবেন তা বলা কঠিন। সৌভাগ্যবশত, আপনি আপনার মডেলের পারফরম্যান্সের আরও ভালো ছবি পেতে Firebase পারফরম্যান্স দিয়ে ব্যবহারকারীদের ডিভাইসে আপনার মডেলের পারফরম্যান্স পরিমাপ করতে পারেন।

অনুমান চালাতে যে সময় লাগে তা পরিমাপ করতে, প্রথমে DigitClassifier.swift এ Firebase আমদানি করুন:

import Firebase

তারপর শ্রেণীবদ্ধ পদ্ধতিতে একটি কর্মক্ষমতা ট্রেস শুরু করুন এবং অনুমান সম্পূর্ণ হলে ট্রেস বন্ধ করুন। নিশ্চিত করুন যে আপনি DispatchQueue.global.async বন্ধের ভিতরে কোডের নিম্নলিখিত লাইনগুলি যোগ করেছেন এবং সরাসরি পদ্ধতি ঘোষণার নীচে নয়৷

let inferenceTrace = Performance.startTrace(name: "tflite inference")
defer {
  inferenceTrace?.stop()
}

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

8. Firebase ML-এ একটি দ্বিতীয় মডেল স্থাপন করুন

আপনার মডেলের একটি নতুন সংস্করণ নিয়ে আসার সময়, যেমন একটি ভাল মডেল আর্কিটেকচার সহ বা একটি বৃহত্তর বা আপডেট ডেটাসেটে প্রশিক্ষিত, আমরা আমাদের বর্তমান মডেলটিকে নতুন সংস্করণ দিয়ে প্রতিস্থাপন করতে প্রলুব্ধ বোধ করতে পারি। যাইহোক, পরীক্ষায় ভাল পারফরম্যান্স করা একটি মডেল অগত্যা উত্পাদনে সমানভাবে ভাল পারফর্ম করে না। অতএব, আসুন আমাদের আসল মডেল এবং নতুনটির তুলনা করতে উৎপাদনে A/B পরীক্ষা করি।

Firebase মডেল ব্যবস্থাপনা API সক্ষম করুন

এই ধাপে, আমরা পাইথন কোড ব্যবহার করে আমাদের টেনসরফ্লো লাইট মডেলের একটি নতুন সংস্করণ স্থাপন করতে Firebase মডেল ম্যানেজমেন্ট এপিআই সক্ষম করব।

আপনার ML মডেলগুলি সংরক্ষণ করার জন্য একটি বালতি তৈরি করুন৷

আপনার ফায়ারবেস কনসোলে, স্টোরেজে যান এবং শুরু করুন ক্লিক করুন। fbbea78f0eb3dc9f.png

আপনার বালতি সেট আপ পেতে ডায়ালগ অনুসরণ করুন.

19517c0d6d2aa14d.png

Firebase ML API সক্ষম করুন৷

যান Firebase এমএল এপিআই পৃষ্ঠা Google ক্লাউড কনসোলে এবং সক্ষম করুন এ ক্লিক করুন।

2414fd5cced6c984.png জিজ্ঞাসা করা হলে ডিজিট ক্লাসিফায়ার অ্যাপটি নির্বাচন করুন।

এখন আমরা একটি বৃহত্তর ডেটাসেট ব্যবহার করে মডেলটির একটি নতুন সংস্করণকে প্রশিক্ষণ দেব এবং তারপরে আমরা Firebase অ্যাডমিন SDK ব্যবহার করে প্রশিক্ষণ নোটবুক থেকে সরাসরি এটিকে প্রোগ্রাম্যাটিকভাবে স্থাপন করব।

পরিষেবা অ্যাকাউন্টের জন্য ব্যক্তিগত কী ডাউনলোড করুন

আমরা Firebase অ্যাডমিন SDK ব্যবহার করার আগে, আমাদের একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে হবে। ক্লিক করে Firebase কনসোলের পরিষেবা অ্যাকাউন্টস প্যানেল খোলার এই লিঙ্কে এবং Firebase এডমিন SDK এর জন্য একটি নতুন সেবা অ্যাকাউন্ট তৈরি করতে বোতামে ক্লিক করুন। প্রম্পট করা হলে, জেনারেট নিউ প্রাইভেট কী বোতামে ক্লিক করুন। আমরা কোলাব নোটবুক থেকে আমাদের অনুরোধগুলি প্রমাণ করার জন্য পরিষেবা অ্যাকাউন্ট কী ব্যবহার করব।

c3b95de1e5508516.png

এখন আমরা নতুন মডেলটি প্রশিক্ষণ ও স্থাপন করতে পারি।

  1. এই খুলুন colab নোটবুক এবং আপনার নিজের ড্রাইভ নীচে একটি কপি আছে।
  2. এর বাম দিকে প্লে বোতামে ক্লিক করে প্রথম সেলটি চালান "একটি উন্নত টেনসরফ্লো লাইট মডেলকে প্রশিক্ষণ দিন"। এটি একটি নতুন মডেলকে প্রশিক্ষণ দেবে এবং কিছু সময় লাগতে পারে৷
  3. দ্বিতীয় সেলটি চালানোর ফলে একটি ফাইল আপলোড প্রম্পট তৈরি হবে। আপনার পরিষেবা অ্যাকাউন্ট তৈরি করার সময় Firebase কনসোল থেকে ডাউনলোড করা json ফাইলটি আপলোড করুন।

71e847c6a85423b3.png

  1. শেষ দুটি ঘর চালান।

কোলাব নোটবুক চালানোর পরে, আপনি Firebase কনসোলে একটি দ্বিতীয় মডেল দেখতে পাবেন। নিশ্চিত করুন দ্বিতীয় মডেল নামকরণ করা হয় mnist_v2

c316683bb4d75d57.png

9. দূরবর্তী কনফিগারেশনের মাধ্যমে একটি মডেল নির্বাচন করুন

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

নতুন প্যারামিটার নাম model_name এবং এটি ডিফল্ট মান দিতে mnist_v1 । আপডেট প্রয়োগ করতে পরিবর্তন প্রকাশ ক্লিক করুন। রিমোট কনফিগারেশন প্যারামিটারে মডেলের নাম রেখে, আমরা পরীক্ষা করতে চাই এমন প্রতিটি মডেলের জন্য একটি নতুন প্যারামিটার যোগ না করে একাধিক মডেল পরীক্ষা করতে পারি।

পরামিতি যোগ করার পরে, আপনি এটি কনসোলে দেখতে হবে:

699b3fd32acce887.png

আমাদের কোডে, দূরবর্তী মডেল লোড করার সময় আমাদের একটি চেক যোগ করতে হবে। আমরা যখন রিমোট কনফিগ থেকে প্যারামিটারটি পাই, তখন আমরা সংশ্লিষ্ট নামের সাথে রিমোট মডেলটি আনব; অন্যথায় আমরা লোড করার চেষ্টা করব mnist_v1 । আমরা রিমোট কনফিগ ব্যবহার করার আগে, আমাদের এটিকে পডফাইলে নির্ভরতা হিসাবে নির্দিষ্ট করে আমাদের প্রকল্পে যুক্ত করতে হবে:

pod 'Firebase/RemoteConfig'

পড ইনস্টল চালান এবং Xcode প্রকল্পটি পুনরায় খুলুন। ইন ModelDownloader.swift , বাস্তবায়ন fetchParameterizedModel পদ্ধতি।

static func fetchParameterizedModel(completion: @escaping (String?, DownloadError?) -> Void) {
  RemoteConfig.remoteConfig().fetchAndActivate { (status, error) in
    DispatchQueue.main.async {
      if let error = error {
        let compositeError = DownloadError.mlkitError(underlyingError: error)
        completion(nil, compositeError)
        return
      }

      let modelName: String
      if let name = RemoteConfig.remoteConfig().configValue(forKey: "model_name").stringValue {
        modelName = name
      } else {
        let defaultName = "mnist_v1"
        print("Unable to fetch model name from config, falling back to default \(defaultName)")
        modelName = defaultName
      }

      fetchModel(named: modelName, completion: completion)
    }
  }
}

অবশেষে, মধ্যে ViewController.swift , প্রতিস্থাপন fetchModel নতুন পদ্ধতি আমরা ঠিক বাস্তবায়িত সঙ্গে কল।

// Download the model from Firebase
print("Fetching model...")
ModelDownloader.fetchParameterizedModel { (filePath, error) in
  guard let path = filePath else {
    if let error = error {
      print(error)
    }
    return
  }
  print("Model download complete")

  // Initialize a DigitClassifier instance
  DigitClassifier.newInstance(modelPath: path) { result in
    switch result {
    case let .success(classifier):
      self.classifier = classifier
    case .error(_):
      self.resultLabel.text = "Failed to initialize."
    }
  }
}

অ্যাপটি পুনরায় চালান এবং নিশ্চিত করুন যে এটি এখনও মডেলটি সঠিকভাবে লোড করছে।

10. A/B দুটি মডেল পরীক্ষা করুন

অবশেষে, আমাদের দুটি মডেলের মধ্যে কোনটি ভালো পারফর্ম করছে তা দেখতে আমরা Firebase-এর বিল্ট-ইন A/B টেস্টিং আচরণ ব্যবহার করতে পারি। Analytics -> Firebase কনসোলে ইভেন্টগুলিতে যান। তাহলে correct_inference ঘটনা দেখানো হয়, একটি "রূপান্তর ইভেন্ট" হিসাবে চিহ্নিত যদি না, আপনি অ্যানালিটিক্স ফিরে যেতে পারেন -> রুপান্তর ইভেন্টগুলি এবং ক্লিক করুন "একটি নতুন রূপান্তর ইভেন্ট তৈরি করুন" এবং দমন করা correct_inference.

এখন "Firebase কনসোলে রিমোট কনফিগারেশনে যান, আমরা এইমাত্র যোগ করা "model_name" প্যারামিটারের আরও বিকল্প মেনু থেকে "A/B পরীক্ষা" বোতামটি নির্বাচন করুন।

fad5ea36969d2aeb.png

নিম্নলিখিত মেনুতে, ডিফল্ট নাম গ্রহণ করুন।

d7c006669ace6e40.png

ড্রপডাউনে আপনার অ্যাপ নির্বাচন করুন এবং 50% সক্রিয় ব্যবহারকারীদের লক্ষ্য নির্ধারণের মানদণ্ড পরিবর্তন করুন।

6246dd7c660b53fb.png

তাহলে আপনাকে তা সেট করতে সক্ষম হয়েছি correct_inference একটি রূপান্তর আগে যেমন ঘটনা, ট্র্যাক করতে মেট্রিক প্রাথমিক হিসাবে এই ইভেন্টটি ব্যবহার করুন। অন্যথায়, যদি আপনি না ইভেন্টের জন্য অপেক্ষা করতে অ্যানালিটিক্স দেখা করতে চাই, আপনি যোগ করতে পারেন correct_inference নিজে।

1ac9c94fb3159271.png

অবশেষে, ভেরিয়েন্ট স্ক্রীনে, ব্যবহার করার জন্য আপনার নিয়ন্ত্রণ গ্রুপ বৈকল্পিক সেট mnist_v1 এবং ব্যবহার করার জন্য আপনার ভেরিয়েন্ট একদল mnist_v2

e4510434f8da31b6.png

নীচের ডানদিকে কোণায় পর্যালোচনা বোতামে ক্লিক করুন।

অভিনন্দন, আপনি আপনার দুটি পৃথক মডেলের জন্য সফলভাবে একটি A/B পরীক্ষা তৈরি করেছেন! A/B পরীক্ষাটি বর্তমানে একটি খসড়া অবস্থায় রয়েছে এবং "পরীক্ষা শুরু করুন" বোতামে ক্লিক করে যেকোনো সময় শুরু করা যেতে পারে।

A / B পরীক্ষা এ পুরো বিষয়টা বিস্তারিত বিবেচনা জন্য, খুজুন A / B পরীক্ষা ডকুমেন্টেশন

11. উপসংহার

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

একটি প্রশ্ন আছে?

রিপোর্ট সমস্যা