#tensorflow
#тензорный поток
Вопрос:
Что такое эпоха в TensorFlow и для чего она используется?
Ответ №1:
Эпоха в машинном обучении — это полная обработка алгоритмом обучения всего обучающего набора.
Набор поездов MNIST состоит из 55000 выборок. После того, как алгоритм обработал все эти 55000 выборок, проходит эпоха.
Ответ №2:
Эпоха — это полная итерация по выборкам. Количество эпох — это то, сколько раз будет выполняться алгоритм. Количество эпох напрямую влияет (или нет) на результат этапа обучения (всего за несколько эпох вы можете достичь только локального минимума, но с большим количеством эпох вы можете достичь глобального минимума или, по крайней мере, лучшего локального минимума).
Ответ №3:
Эпоха не является чем-то неотъемлемым от фреймворка TensorFlow. Он долгое время использовался в области машинного обучения.
Одна эпоха — это временной шаг, который увеличивается каждый раз, когда он проходит через все выборки в обучающем наборе.
Ответ №4:
Эпоха — это одна обучающая итерация, поэтому на одной итерации все выборки повторяются один раз. При вызове обучающей функции tensorflows и определении значения параметра epochs вы определяете, сколько раз ваша модель должна быть обучена на ваших выборочных данных (обычно не менее нескольких сотен раз).
Ответ №5:
Epoch — это подход, при котором мы несколько раз передаем один и тот же набор данных в сеть, чтобы найти оптимальные веса.
Поскольку мы используем градиентный спуск для оптимизации, и есть возможность приземления на локальных минимумах, поэтому, чтобы преодолеть это, мы проходим один и тот же набор данных n раз (т. Е. N эпох), чтобы найти оптимальные веса.
Здесь количество эпох подвергается применению, и меньшее количество эпох может привести к недостаточной подгонке, в то время как большее количество итераций может привести к переобучению.
Ответ №6:
Просто чтобы добавить немного больше к другим ответам. Рассматривайте это как количество шансов, предоставленных алгоритмам для улучшения его прогнозирования.
Рассмотрим следующий последовательный код, который попытается получить двойное значение.
<!DOCTYPE html>
<html>
<head>
<title>TensorFlow.js get double of a number</title>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<h2>Get double of number</h2>
<input type="text" id="txtBoxNumber" />
<br />
Nearly : <input type="text" id="txtBoxDouble" />
<script type="text/javascript">
const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [1] }));
// Prepare the model for training: Specify the loss and the optimizer.
model.compile({ loss: 'meanSquaredError', optimizer: 'sgd' });
// Generate some synthetic data for training. (y = 2x)
const xs = tf.tensor2d([1, 2, 3, 4, 5, 6, 7, 8,9,10,11,12], [12, 1]);
const ys = tf.tensor2d([2, 4, 6, 8, 10, 12, 14, 16,18,20,22,24], [12, 1]);
// Train the model using the data.
model.fit(xs, ys, { epochs: 99999 });
$(document).on('keyup', '#txtBoxNumber', function () {
setInterval(getDouble, 1000);
});
function getDouble() {
$('#txtBoxDouble').val(model.predict(tf.tensor2d([parseInt($('#txtBoxNumber').val())], [1, 1])).dataSync()[0]);
}
</script>
</body>
</html>
Я удалил метод await для model.fit(), который будет предсказывать результат, пока другие эпохи все еще продолжаются.
Комментарии:
1. Это не повлияет на JSFiddle. Вместо этого используйте его на локальном компьютере. Добавьте некоторое высокое значение, чтобы проверить его.
Ответ №7:
эпоха: сколько раз алгоритм просматривает обучающие данные.
К вашему СВЕДЕНИЮ: низкая эпоха -> недостаточная высокая эпоха -> избыточная
оптимальная эпоха: известна только путем экспериментов. Поэтому просто установите значение epoch high и используйте обратные вызовы, чтобы остановить обучение, когда (средняя) ошибка проверки превышает (среднюю) ошибку обучения.