Я пробовал учебник TensorFlow 2.0 Обрезка веса на основе величины с помощью Keras и наткнулся на параметр initial_sparsity
import tensorflow_model_optimization as tfmot
from tensorflow_model_optimization.sparsity import keras as sparsity
import numpy as np
epochs = 12
num_train_samples = x_train.shape[0]
end_step = np.ceil(1.0 * num_train_samples / batch_size).astype(np.int32) * epochs
print('End step: ' + str(end_step))
pruning_params = {
'pruning_schedule': sparsity.PolynomialDecay(initial_sparsity=0.50,
final_sparsity=0.90,
begin_step=2000,
end_step=end_step,
frequency=100)
}
В учебнике написано:
Используемый здесь параметр означает:
Разреженность PolynomialDecay используется во всем процессе обучения. Мы начинаем с уровня разреженности 50% и постепенно обучаем модель достижению разреженности 90%. X% разреженности означает, что X% весового тензора будет удалено.
Мой вопрос: разве вы не должны начинать с initial_sparsity , равной 0%, а затем обрезать 90% от веса?
Что означает начинать с initial_sparsity из 50%? Означает ли это, что 50% весов сначала сокращается, а затем достигается 90% разреженности сокращения?
Кроме того, для tfmot.sparsity.keras.ConstantSparsity API следующим образом:
pruning_params_unpruned = {
'pruning_schedule': sparsity.ConstantSparsity(
target_sparsity=0.0, begin_step=0,
end_step = 0, frequency=100
)
}
Инициализирует расписание сокращения с постоянной разреженностью.
Разреженность применяется в интервале [begin_step, end_step] каждые частотные шаги. На каждом применимом шаге разреженность (%) постоянна.
Означает ли это, что если модель нейронной сети уже находится на уровне разреженности 50%, но target_sparsity = 0,5 тогда будет выполнено расписание обрезки:
- Без обрезки, так как модель уже на уровне обрезки 50%
- Это дополнительно сокращает 50% от веса уже (50% обрезка) модель
Вы можете прочитать об этом в PolynomialDecay и в ConstantSparsity
Спасибо