tensorflow_cloud এবং Google ক্লাউড সহ NasNet প্রশিক্ষণ বিতরণ করা হয়েছে

TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub এ দেখুন নোটবুক ডাউনলোড করুন কাগল লোগো কাগলে চালান

এই উদাহরণটি EfficientNet-এর সাথে ফাইন-টিউনিংয়ের মাধ্যমে চিত্র শ্রেণীবিভাগের উপর ভিত্তি করে দেখানো হয়েছে যে কীভাবে বিতরণ করা প্রশিক্ষণ ব্যবহার করে tensorflow_cloud এবং Google ক্লাউড প্ল্যাটফর্ম ব্যবহার করে একটি NasNetMobile মডেলকে প্রশিক্ষণ দেওয়া যায়।

প্রয়োজনীয় মডিউল আমদানি করুন

import tensorflow as tf
tf.version.VERSION
'2.6.0'
! pip install -q tensorflow-cloud

import tensorflow_cloud as tfc
tfc.__version__
import sys

প্রকল্প কনফিগারেশন

প্রকল্পের পরামিতি সেট করুন। Google ক্লাউড নির্দিষ্ট প্যারামিটারের জন্য Google ক্লাউড প্রকল্প সেটআপ নির্দেশাবলী পড়ুন।

# Set Google Cloud Specific parameters

# TODO: Please set GCP_PROJECT_ID to your own Google Cloud project ID.
GCP_PROJECT_ID = 'YOUR_PROJECT_ID'

# TODO: set GCS_BUCKET to your own Google Cloud Storage (GCS) bucket.
GCS_BUCKET = 'YOUR_GCS_BUCKET_NAME'

# DO NOT CHANGE: Currently only the 'us-central1' region is supported.
REGION = 'us-central1'

# OPTIONAL: You can change the job name to any string.
JOB_NAME = 'nasnet'

# Setting location were training logs and checkpoints will be stored
GCS_BASE_PATH = f'gs://{GCS_BUCKET}/{JOB_NAME}'
TENSORBOARD_LOGS_DIR = os.path.join(GCS_BASE_PATH,"logs")
MODEL_CHECKPOINT_DIR = os.path.join(GCS_BASE_PATH,"checkpoints")
SAVED_MODEL_DIR = os.path.join(GCS_BASE_PATH,"saved_model")

আপনার Google ক্লাউড প্রকল্প ব্যবহার করার জন্য নোটবুক প্রমাণীকরণ করা হচ্ছে

Kaggle নোটবুকের জন্য নিচের সেলটি চালানোর আগে "Add-ons"->"Google Cloud SDK"-এ ক্লিক করুন।

# Using tfc.remote() to ensure this code only runs in notebook
if not tfc.remote():

    # Authentication for Kaggle Notebooks
    if "kaggle_secrets" in sys.modules:
        from kaggle_secrets import UserSecretsClient
        UserSecretsClient().set_gcloud_credentials(project=GCP_PROJECT_ID)

    # Authentication for Colab Notebooks
    if "google.colab" in sys.modules:
        from google.colab import auth
        auth.authenticate_user()
        os.environ["GOOGLE_CLOUD_PROJECT"] = GCP_PROJECT_ID

লোড এবং তথ্য প্রস্তুত

কাঁচা ডেটা পড়ুন এবং ডেটা সেটগুলিকে প্রশিক্ষণ ও পরীক্ষা করতে বিভক্ত করুন।

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar10.load_data()

# Setting input specific parameters
# The model expects input of dimension (INPUT_IMG_SIZE, INPUT_IMG_SIZE, 3)
INPUT_IMG_SIZE = 32
NUM_CLASSES = 10

ইমেজ বৃদ্ধির জন্য প্রিপ্রসেসিং লেয়ার API যোগ করুন।

from tensorflow.keras.layers.experimental import preprocessing
from tensorflow.keras.models import Sequential


img_augmentation = Sequential(
    [
        # Resizing input to better match ImageNet size
        preprocessing.Resizing(256, 256),
        preprocessing.RandomRotation(factor=0.15),
        preprocessing.RandomFlip(),
        preprocessing.RandomContrast(factor=0.1),
    ],
    name="img_augmentation",
)

মডেল লোড করুন এবং প্রশিক্ষণের জন্য প্রস্তুত করুন

আমরা একটি NASNetMobile পূর্ব-প্রশিক্ষিত মডেল (ওজন সহ) লোড করব এবং ডেটাসেটের সাথে আরও ভালভাবে মেলে মডেলটিকে সূক্ষ্ম টিউন করার জন্য কয়েকটি স্তর আনফ্রিজ করব।

from tensorflow.keras import layers

def build_model(num_classes, input_image_size):
    inputs = layers.Input(shape=(input_image_size, input_image_size, 3))
    x = img_augmentation(inputs)

    model = tf.keras.applications.NASNetMobile(
        input_shape=None,
        include_top=False,
        weights="imagenet",
        input_tensor=x,
        pooling=None,
        classes=num_classes,
    )

    # Freeze the pretrained weights
    model.trainable = False

    # We unfreeze the top 20 layers while leaving BatchNorm layers frozen
    for layer in model.layers[-20:]:
        if not isinstance(layer, layers.BatchNormalization):
            layer.trainable = True

    # Rebuild top
    x = layers.GlobalAveragePooling2D(name="avg_pool")(model.output)
    x = layers.BatchNormalization()(x)

    x = layers.Dense(128, activation="relu")(x)
    x = layers.Dense(64, activation="relu")(x)
    outputs = layers.Dense(num_classes, activation="softmax", name="pred")(x)

    # Compile
    model = tf.keras.Model(inputs, outputs, name="NASNetMobile")
    optimizer = tf.keras.optimizers.Adam(learning_rate=3e-4)
    model.compile(
        optimizer=optimizer,
        loss="sparse_categorical_crossentropy",
        metrics=["accuracy"]
    )
    return model
model = build_model(NUM_CLASSES, INPUT_IMG_SIZE)

if tfc.remote():
    # Configure Tensorboard logs
    callbacks=[
        tf.keras.callbacks.TensorBoard(log_dir=TENSORBOARD_LOGS_DIR),
        tf.keras.callbacks.ModelCheckpoint(
            MODEL_CHECKPOINT_DIR,
            save_best_only=True),
        tf.keras.callbacks.EarlyStopping(
            monitor='loss',
            min_delta =0.001,
            patience=3)]

    model.fit(x=x_train, y=y_train, epochs=100,
              validation_split=0.2, callbacks=callbacks)

    model.save(SAVED_MODEL_DIR)

else:
    # Run the training for 1 epoch and a small subset of the data to validate setup
    model.fit(x=x_train[:100], y=y_train[:100], validation_split=0.2, epochs=1)

দূরবর্তী প্রশিক্ষণ শুরু করুন

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

# If you are using a custom image you can install modules via requirements
# txt file.
with open('requirements.txt','w') as f:
    f.write('tensorflow-cloud\n')

# Optional: Some recommended base images. If you provide none the system
# will choose one for you.
TF_GPU_IMAGE= "tensorflow/tensorflow:latest-gpu"
TF_CPU_IMAGE= "tensorflow/tensorflow:latest"

# Submit a distributed training job using GPUs.
tfc.run(
    distribution_strategy='auto',
    requirements_txt='requirements.txt',
    docker_config=tfc.DockerConfig(
        parent_image=TF_GPU_IMAGE,
        image_build_bucket=GCS_BUCKET
        ),
    chief_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
      worker_config=tfc.COMMON_MACHINE_CONFIGS['K80_1X'],
      worker_count=3,
    job_labels={'job': JOB_NAME}
)

প্রশিক্ষণ ফলাফল

আপনার Colab ইন্সট্যান্স আবার কানেক্ট করুন

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

  1. প্রয়োজনীয় মডিউল আমদানি করুন
  2. প্রকল্প কনফিগারেশন
  3. আপনার Google ক্লাউড প্রকল্প ব্যবহার করার জন্য নোটবুক প্রমাণীকরণ করা হচ্ছে

টেনসরবোর্ড লোড করুন

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

%load_ext tensorboard
%tensorboard --logdir $TENSORBOARD_LOGS_DIR

আপনার প্রশিক্ষিত মডেল লোড করুন

trained_model = tf.keras.models.load_model(SAVED_MODEL_DIR)
trained_model.summary()