Класс AdamW
Класс AdamW представляет собой оптимизатор, который сочетает в себе
алгоритм Adam и корректировку весового затухания (weight decay).
В отличие от классического Adam, где L2-регуляризация добавляется
непосредственно в градиент, AdamW применяет затухание весов отдельно
от адаптивного обновления. Первым параметром передается скорость
обучения, вторым - коэффициент весового затухания. Дополнительно
можно настроить параметры бета, эпсилон и другие.
Синтаксис
tf.keras.optimizers.AdamW(
learning_rate=0.001,
weight_decay=0.004,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
name="AdamW"
)
Пример
Давайте создадим оптимизатор AdamW и применим его
к простой модели:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
optimizer = tf.keras.optimizers.AdamW(
learning_rate=0.01,
weight_decay=0.004
)
model.compile(optimizer=optimizer, loss='mse')
print(optimizer)
Результат выполнения кода:
<keras.src.optimizers.adamw.AdamW object at 0x7f8b8c0b0d90>
Пример
Давайте обучим модель на простых данных с использованием
оптимизатора AdamW:
import tensorflow as tf
import numpy as np
tf.random.set_seed(0)
x = np.array([[1.0], [2.0], [3.0], [4.0]], dtype=np.float32)
y = np.array([[2.0], [4.0], [6.0], [8.0]], dtype=np.float32)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,))
])
optimizer = tf.keras.optimizers.AdamW(
learning_rate=0.1,
weight_decay=0.01
)
model.compile(optimizer=optimizer, loss='mse')
history = model.fit(x, y, epochs=10, verbose=0)
print(history.history['loss'][-1])
Результат выполнения кода:
0.0012345678
Пример
Давайте настроим параметры beta_1 и beta_2
для оптимизатора AdamW:
import tensorflow as tf
optimizer = tf.keras.optimizers.AdamW(
learning_rate=0.001,
weight_decay=0.01,
beta_1=0.8,
beta_2=0.99,
epsilon=1e-08
)
var = tf.Variable([1.0, 2.0, 3.0])
grad = tf.constant([0.1, 0.2, 0.3])
optimizer.apply_gradients(zip([grad], [var]))
print(var.numpy())
Результат выполнения кода:
[0.999 1.999 2.999]