TensorFlow.org पर देखें | Google Colab में चलाएं | GitHub पर स्रोत देखें | नोटबुक डाउनलोड करें |
अवलोकन
यह नोटबुक एडॉन्स पैकेज से आलसी एडम ऑप्टिमाइज़र का उपयोग करने का तरीका प्रदर्शित करेगी।
आलसी एडम
LazyAdam एडम ऑप्टिमाइज़र का एक प्रकार है जो विरल अपडेट को अधिक कुशलता से संभालता है। मूल एडम एल्गोरिथ्म प्रत्येक प्रशिक्षित चर के लिए दो चलती-औसत संचायक रखता है; संचयकों को हर कदम पर अद्यतन किया जाता है। यह वर्ग विरल चरों के लिए ग्रेडिएंट अपडेट की आलसी हैंडलिंग प्रदान करता है। यह केवल सभी सूचकांकों के लिए संचायकों को अद्यतन करने के बजाय, वर्तमान बैच में दिखाई देने वाले विरल चर सूचकांकों के लिए चलती-औसत संचयकों को अद्यतन करता है। मूल एडम ऑप्टिमाइज़र की तुलना में, यह कुछ अनुप्रयोगों के लिए मॉडल प्रशिक्षण थ्रूपुट में बड़े सुधार प्रदान कर सकता है। हालांकि, यह मूल एडम एल्गोरिथम की तुलना में थोड़ा अलग शब्दार्थ प्रदान करता है, और विभिन्न अनुभवजन्य परिणामों को जन्म दे सकता है।
सेट अप
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
ट्रेन और मूल्यांकन
बस विशिष्ट केरस अनुकूलकों को नए 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