Свой цикл обучения в TensorFlow
Обучение можно вести без метода
fit: на каждой эпохе
открывают ленту GradientTape,
считают предсказание и ошибку,
затем методом gradient
получают производные по обучаемым
весам и передают их оптимизатору
через метод apply_gradients.
Соберём короткую модель с одним выходом, средний квадрат и спуск с фиксированным шагом. Три эпохи на трёх точках - и выведем ошибку после последнего шага:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, input_shape=(1,)),
])
loss_fn = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.SGD(
learning_rate=0.1
)
features = tf.constant([[1.0], [2.0], [3.0]])
targets = tf.constant([[2.0], [4.0], [6.0]])
for _ in range(3):
with tf.GradientTape() as tape:
preds = model(features, training=True)
loss = loss_fn(targets, preds)
grads = tape.gradient(
loss, model.trainable_variables
)
optimizer.apply_gradients(
zip(grads, model.trainable_variables)
)
print(loss)
# выведет tf.Tensor(0.06944366544485092, shape=(), dtype=float32)
Тот же порядок шагов подходит и для явных переменных весов и смещения. Два прохода по двум парам «признак - ответ»:
import tensorflow as tf
tf.keras.utils.set_random_seed(0)
w = tf.Variable([[0.0]])
b = tf.Variable([0.0])
loss_fn = tf.keras.losses.MeanSquaredError()
optimizer = tf.keras.optimizers.SGD(
learning_rate=0.2
)
x = tf.constant([[1.0], [2.0]])
y = tf.constant([[3.0], [5.0]])
for _ in range(2):
with tf.GradientTape() as tape:
pred = x @ w + b
loss = loss_fn(y, pred)
grads = tape.gradient(loss, [w, b])
optimizer.apply_gradients(zip(grads, [w, b]))
print(w, b)
# выведет (<tf.Variable shape=(1, 1), dtype=float32, numpy=array([[1.64]], dtype=float32)>, <tf.Variable shape=(1,), dtype=float32, numpy=array([0.99999994], dtype=float32)>)
Подготовьте модель с одним
выходом для одного признака.
Проведите два полных прохода
по строкам [1.0], [2.0]
с ответами 2.0 и 4.0
своим циклом и выведите
ошибку после второго прохода.
Задайте переменные веса
и смещения для одного признака.
Сделайте три шага спуска
на парах (0, 1), (1, 3),
(2, 5) и выведите
итоговые коэффициенты.
Соберите таблицу из трёх
признаков 1.0, 2.0,
3.0 и столбец целей
0.0, 1.0, 2.0.
Обучите однослойную модель
за четыре эпохи вручную
и выведите прогноз для
4.0.