TF: Optimasi kinerja pelatihan model

From OnnoWiki
Jump to navigation Jump to search

Mengoptimalkan kinerja pelatihan model TensorFlow dapat dicapai melalui berbagai teknik lanjutan yang dirancang untuk meningkatkan efisiensi dan efektivitas proses pelatihan. Berikut adalah beberapa teknik utama beserta contoh implementasinya:

1. Paralelisme Model dan Data

Paralelisme memungkinkan distribusi beban kerja pelatihan model ke beberapa perangkat keras, seperti CPU atau GPU, untuk mempercepat proses pelatihan.

Paralelisme Data:

Data pelatihan dibagi menjadi beberapa subset yang diproses secara paralel. https://lmsspada.kemdiktisaintek.go.id/pluginfile.php/795078/mod_resource/content/2/Modul%20Digital%20-%20Machine%20Learning%20-%20Hartono-compressed.pdf

Contoh:

import tensorflow as tf

# Membuat strategi untuk distribusi data
strategy = tf.distribute.MirroredStrategy()

# Memasukkan model dalam konteks strategi
with strategy.scope():
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Melatih model dengan data yang didistribusikan
model.fit(train_dataset, epochs=10)

Paralelisme Model:

Model dibagi menjadi beberapa bagian yang dapat diproses secara paralel. Misalnya, menggunakan Amazon SageMaker untuk paralelisme model dengan TensorFlow. https://docs.aws.amazon.com/id_id/sagemaker/latest/dg/model-parallel-customize-training-script-tf.html

Contoh:

import tensorflow as tf
import smdistributed.modelparallel.tensorflow as smp

# Inisialisasi paralelisme model
smp.init()

# Definisikan model dalam konteks paralelisme
class MyModel(tf.keras.Model):
    def __init__(self):
        super(MyModel, self).__init__()
        self.dense1 = tf.keras.layers.Dense(128, activation='relu')
        self.dense2 = tf.keras.layers.Dense(10, activation='softmax') 

    def call(self, inputs):
        x = self.dense1(inputs)
        return self.dense2(x)

# Membuat instance model
model = MyModel()

# Kompilasi model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Melatih model
model.fit(train_dataset, epochs=10)

2. Kuantisasi Model

Kuantisasi adalah teknik untuk mengurangi presisi angka dalam model, seperti mengubah bobot dari 32-bit float menjadi 8-bit integer, yang dapat mengurangi ukuran model dan meningkatkan kecepatan inferensi. https://ai.google.dev/edge/litert/models/model_optimization?hl=id

Contoh:

import tensorflow as tf

# Memuat model yang telah dilatih
model = tf.keras.models.load_model('model_path')

# Membuat converter untuk kuantisasi
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

# Mengonversi model
tflite_model = converter.convert()

# Menyimpan model yang telah dikuantisasi
with open('quantized_model.tflite', 'wb') as f:
    f.write(tflite_model)

3. Augmentasi Data

Augmentasi data adalah teknik untuk memperbesar jumlah dan keragaman data pelatihan dengan melakukan transformasi seperti rotasi, flipping, atau penambahan noise pada data yang ada. Ini membantu model menjadi lebih robust dan mengurangi overfitting. https://blog.algorit.ma/augmentasi-data/

Contoh:

import tensorflow as tf

# Membuat generator augmentasi data
datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)

# Melatih model menggunakan data yang diaugmentasi
model.fit(datagen.flow(train_images, train_labels, batch_size=32), epochs=50)

4. Penyetelan Hyperparameter (Hyperparameter Tuning)

Menggunakan teknik seperti Grid Search atau Random Search untuk menemukan kombinasi hyperparameter yang optimal dapat meningkatkan kinerja model secara signifikan. https://lmsspada.kemdiktisaintek.go.id/pluginfile.php/795078/mod_resource/content/2/Modul%20Digital%20-%20Machine%20Learning%20-%20Hartono-compressed.pdf

Contoh:

from sklearn.model_selection import RandomizedSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

# Membuat fungsi untuk membuat model
def create_model(optimizer='adam'):
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(128, activation='relu', input_shape=(784,)),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    model.compile(optimizer=optimizer, loss='sparse_categorical_crossentropy', metrics=['accuracy'])
    return model

# Membuat KerasClassifier
model = KerasClassifier(build_fn=create_model)

# Mendefinisikan ruang hyperparameter
param_dist = {
    'optimizer': ['adam', 'sgd'],
    'epochs': [10, 20],
    'batch_size': [32, 64]
}

# Melakukan Random Search
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=5, cv=3)
random_search_result = random_search.fit(train_images, train_labels)

# Menampilkan hasil terbaik
print(f"Best: {random_search_result.best_score_} using {random_search_result.best_params_}")

5. Penggunaan Mini-Batch

Melatih model menggunakan mini-batch, yaitu subset kecil dari data pelatihan, dapat meningkatkan efisiensi pelatihan dengan memanfaatkan paralelisme komputasi dan stabilitas dalam pembaruan bobot. https://lmsspada.kemdiktisaintek.go.id/course/view.php?id=3839

Contoh:

import tensorflow as tf

# Kompilasi model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Melatih model dengan mini-batch
model.fit(train_images, train_labels, batch_size=32, epochs=10)


Dengan menerapkan teknik-teknik lanjutan di atas, Anda dapat mengoptimalkan kinerja pelatihan model TensorFlow, sehingga mencapai hasil yang lebih efisien dan akurat.