TensorFlow Addons অপ্টিমাইজার: LazyAdam

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

ওভারভিউ

এই নোটবুকটি প্রদর্শন করবে কিভাবে অ্যাডঅন প্যাকেজ থেকে অলস অ্যাডাম অপ্টিমাইজার ব্যবহার করতে হয়।

অলস আদম

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

সেটআপ

pip install -q -U tensorflow-addons
import tensorflow as tf
import tensorflow_addons as tfa
# Hyperparameters
batch_size=64
epochs=10

মডেল তৈরি করুন

model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, input_shape=(784,), activation='relu', name='dense_1'),
    tf.keras.layers.Dense(64, activation='relu', name='dense_2'),
    tf.keras.layers.Dense(10, activation='softmax', name='predictions'),
])

ডেটা প্রস্তুত করুন

# Load MNIST dataset as NumPy arrays
dataset = {}
num_validation = 10000
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# Preprocess the data
x_train = x_train.reshape(-1, 784).astype('float32') / 255
x_test = x_test.reshape(-1, 784).astype('float32') / 255

ট্রেন এবং মূল্যায়ন

সাধারণ কেরাস অপ্টিমাইজারগুলিকে নতুন টিএফএ অপ্টিমাইজারের সাথে প্রতিস্থাপন করুন৷

# Compile the model
model.compile(
    optimizer=tfa.optimizers.LazyAdam(0.001),  # Utilize TFA optimizer
    loss=tf.keras.losses.SparseCategoricalCrossentropy(),
    metrics=['accuracy'])

# Train the network
history = model.fit(
    x_train,
    y_train,
    batch_size=batch_size,
    epochs=epochs)
Epoch 1/10
938/938 [==============================] - 3s 2ms/step - loss: 0.5700 - accuracy: 0.8378
Epoch 2/10
938/938 [==============================] - 2s 2ms/step - loss: 0.1523 - accuracy: 0.9552
Epoch 3/10
938/938 [==============================] - 2s 2ms/step - loss: 0.1040 - accuracy: 0.9694
Epoch 4/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0809 - accuracy: 0.9753
Epoch 5/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0614 - accuracy: 0.9812
Epoch 6/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0531 - accuracy: 0.9840
Epoch 7/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0481 - accuracy: 0.9850
Epoch 8/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0377 - accuracy: 0.9881
Epoch 9/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0336 - accuracy: 0.9892
Epoch 10/10
938/938 [==============================] - 2s 2ms/step - loss: 0.0272 - accuracy: 0.9909
# Evaluate the network
print('Evaluate on test data:')
results = model.evaluate(x_test, y_test, batch_size=128, verbose = 2)
print('Test loss = {0}, Test acc: {1}'.format(results[0], results[1]))
Evaluate on test data:
79/79 - 0s - loss: 0.0959 - accuracy: 0.9738
Test loss = 0.09588281810283661, Test acc: 0.973800003528595