عرض على TensorFlow.org | تشغيل في Google Colab | عرض المصدر على جيثب | تحميل دفتر |
ملخص
سيوضح هذا الكمبيوتر الدفتري كيفية استخدام مُحسِّن adam الكسول من حزمة Addons.
LazyAdam
LazyAdam هو نوع من مُحسِّن Adam يتعامل مع التحديثات المتفرقة بكفاءة أكبر. تحتفظ خوارزمية آدم الأصلية بمركمين متوسطين متحركين لكل متغير قابل للتدريب ؛ يتم تحديث المجمعات في كل خطوة. توفر هذه الفئة معالجة أكثر كسلاً لتحديثات التدرج للمتغيرات المتفرقة. يقوم فقط بتحديث مركمات المتوسط المتحرك للمؤشرات المتغيرة المتفرقة التي تظهر في الدُفعة الحالية ، بدلاً من تحديث المجمعات لجميع المؤشرات. بالمقارنة مع مُحسِّن Adam الأصلي ، يمكن أن يوفر تحسينات كبيرة في إنتاجية تدريب النموذج لبعض التطبيقات. ومع ذلك ، فإنها توفر دلالات مختلفة قليلاً عن خوارزمية آدم الأصلية ، وقد تؤدي إلى نتائج تجريبية مختلفة.
اقامة
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
تدريب وتقييم
ما عليك سوى استبدال محسنات keras النموذجية بمحسِّن tfa الجديد
# 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