WALS (взвешенное альтернативное наименьшее квадратичное приближение) — алгоритм для взвешенной матричной факторизации. Он вычисляет приближение низкого ранга заданной разреженной (n x m) матрицы A, умножением двух матриц, U * V^T, где U — это (n x k) матрица, а V — (m x k) матрица. Здесь k — ранг приближения, также называемый размерностью вложения. Мы называем U строчными факторами, а V — столбцовыми факторами. См. tensorflow/contrib/factorization/g3doc/wals.md для точного определения задачи.
Обучение происходит циклами: в строчном цикле мы фиксируем V и решаем для U. В столбцовом цикле мы фиксируем U и решаем для V. Каждая из этих задач является задачей безусловной минимизации квадратичной функции и может быть решена точно (ее также можно решить по мини-пакетно, так как решение декомпозируется по строкам каждой матрицы). Переключение между циклами достигается с помощью крючка во время обучения, который отвечает за отслеживание циклов и запуск операций подготовки в начале каждого цикла. Он также обновляет переменную global_step, которая отслеживает количество обработанных пакетов с начала обучения. Текущая реализация предполагает, что обучение выполняется на одной машине, и завершится неудачно, если config.num_worker_replicas не равно единице. Обучение выполняется вызовом self.fit(input_fn=input_fn), где input_fn предоставляет два тензора: один для строк входной матрицы и один для строк транспонированной входной матрицы (т.е. столбцов исходной матрицы). Обратите внимание, что во время строчного цикла обрабатываются только строчные пакеты (игнорируя столбцовые пакеты) и наоборот. Также обратите внимание, что каждая строка (соответственно каждый столбец) входной матрицы должна быть обработана хотя бы один раз, чтобы цикл считался завершенным. В частности, обучение не будет продвигаться, если некоторые строки не сгенерированы input_fn.
Для предсказания, учитывая новый набор входных строк A', мы вычисляем соответствующий набор строчных факторов U', таких, что U' * V^T является хорошим приближением A'. Мы называем эту операцию проекцией строки. Аналогичная операция определена для столбцов. Проекция выполняется путем вызова self.get_projections(input_fn=input_fn), где input_fn удовлетворяет ограничениям, приведенным ниже.
Функции ввода должны удовлетворять следующим ограничениям: Вызов input_fn должен возвращать кортеж (features, labels), где labels равно None, а features — словарь, содержащий следующие ключи:
TRAIN:
WALSMatrixFactorization.INPUT_ROWS: float32 SparseTensor (матрица). Строки входной матрицы для обработки (или для проекции).
WALSMatrixFactorization.INPUT_COLS: float32 SparseTensor (матрица). Столбцы входной матрицы для обработки (или для проекции), транспонированные.
INFER:
WALSMatrixFactorization.INPUT_ROWS: float32 SparseTensor (матрица). Строки для проекции.
WALSMatrixFactorization.INPUT_COLS: float32 SparseTensor (матрица). Столбцы для проекции.
WALSMatrixFactorization.PROJECT_ROW: Булевый тензор. Нужно ли проектировать строки или столбцы.
WALSMatrixFactorization.PROJECTION_WEIGHTS (необязательно): float32 Tensor (вектор). Веса для использования в проекции.
EVAL:
WALSMatrixFactorization.INPUT_ROWS: float32 SparseTensor (матрица). Строки для проекции.
WALSMatrixFactorization.INPUT_COLS: float32 SparseTensor (матрица). Столбцы для проекции.
WALSMatrixFactorization.PROJECT_ROW: Булевый тензор. Нужно ли проектировать строки или столбцы.
Args
num_rows
Общее количество строк для входной матрицы.
num_cols
Общее количество столбцов для входной матрицы.
embedding_dimension
Размерность для использования в факторах.
unobserved_weight
Вес непроверенных элементов матрицы.
regularization_coeff
Вес члена L2 регуляризации. По умолчанию None, в этом случае задача не регуляризована.
row_init
Инициализатор строчного фактора. Должен быть:
Тензор: матрица строчного фактора инициализируется этим тензором,
Константа numpy,
"random": строки инициализируются с помощью нормального распределения.
col_init
Инициализатор столбцового фактора. См. row_init.
num_row_shards
Количество фрагментов для использования в строчных факторах.
num_col_shards
Количество фрагментов для использования в столбцовых факторах.
row_weights
Должен быть в одном из трех следующих форматов:
None: в этом случае вес каждого элемента — unobserved_weight, и задача упрощается до ALS. Обратите внимание, что в этом случае col_weights также должны быть установлены в «None».
Список списков неотрицательных скаляров в форме \([[w_0, w_1, ...], [w_k, ... ], [...]]\), где количество внутренних списков равно количеству фрагментов строчных факторов, а элементы в каждом внутреннем списке — это веса строк этого фрагмента. В этом случае, \(w_ij = unonbserved_weight + row_weights[i] * col_weights[j]\).
Неотрицательный скаляр: это значение используется для всех весов строк. Обратите внимание, что разрешено иметь row_weights как список, а col_weights как скаляр, или наоборот.
col_weights
См. row_weights.
use_factors_weights_cache_for_training
Булево, хранятся ли факторы и веса на рабочих узлах до начала обновлений во время обучения. По умолчанию True. Обратите внимание, что кэширование отключено во время предсказания.
use_gramian_cache_for_training
Булево, хранятся ли Грамианы на рабочих узлах до начала обновлений во время обучения. По умолчанию True. Обратите внимание, что кэширование отключено во время предсказания.
max_sweeps
целое число, необязательно. Указывает количество циклов, для которых необходимо обучить модель, где цикл определяется как полное обновление всех строчных факторов (соответственно столбцовых факторов). Если steps или max_steps также указаны в model.fit(), обучение останавливается, когда выполняется любое из условий шагов или циклов.
model_dir
Директория для сохранения результатов модели и журналов.
config
Объект конфигурации. См. Estimator.
Raises
ValueError
Если config.num_worker_replicas строго больше единицы. Текущая реализация поддерживает только запуск на одном рабочем узле.
Attributes
config
model_dir
Возвращает путь, в котором процесс оценки будет искать контрольные точки.
Экспортирует граф предсказания в заданную директорию. (устарело)
Аргументы
export_dir
Строка, содержащая путь к каталогу для записи экспортированной графы и контрольных точек.
input_fn
Если use_deprecated_input_fn равно true, то функция, которая, получив Tensor строк Example, анализирует их в признаки, которые затем передаются в модель. В противном случае функция, которая не принимает аргументов и возвращает кортеж (признаки, метки), где признаки — словарь строк-ключей к Tensor, а метки — Tensor, который в настоящее время не используется (и поэтому может быть None).
input_feature_key
Используется только если use_deprecated_input_fn равно false. Строковый ключ в словаре признаков, возвращаемом input_fn, который соответствует сырым Example строкам Tensor, которые будут приняты экспортированной моделью в качестве входных данных. Может быть только None, если вы используете пользовательскую signature_fn, которая не использует первый аргумент (примеры).
use_deprecated_input_fn
Определяет формат сигнатуры input_fn.
signature_fn
Функция, которая возвращает стандартную сигнатуру и карту именованных сигнатур, заданных Tensor строк Example, dictTensor для признаков и Tensor или dictTensor для прогнозов.
prediction_key
Ключ для тензора в словаре predictions (выходной результат model_fn), который нужно использовать в качестве входного значения predictions для signature_fn. Необязательно. Если None, прогнозы будут переданы signature_fn без фильтрации.
default_batch_size
Значение по умолчанию размера пакета Example заполнителя.
exports_to_keep
Количество сохраняемых экспортов.
checkpoint_path
Путь к контрольной точке модели, которую нужно экспортировать. Если это None (что является значением по умолчанию), будет использоваться последняя контрольная точка в export_dir.
Возвращаемое значение
Путь к строке экспортированного каталога. Примечание: эта функция была добавлена примерно 25.09.2016; клиентам, зависящим от возвращаемого значения, может потребоваться обработать случай, когда эта функция возвращает None, потому что подклассы не возвращают значение.
Экспортирует график предсказания как SavedModel в заданный каталог.
Аргументы
export_dir_base
Строка, содержащая путь к каталогу для записи экспортированной графы и контрольных точек.
serving_input_fn
Функция, которая не принимает аргументов и возвращает InputFnOps.
default_output_alternative_key
Имя головки, используемой для обслуживания, если не указано. Не нужно для моделей с одной головкой.
assets_extra
Словарь, определяющий, как заполнить каталог assets.extra экспортированного SavedModel. Каждый ключ должен задавать путь назначения (включая имя файла) относительно каталога assets.extra. Соответствующее значение указывает полный путь к исходному файлу, который нужно скопировать. Например, простой случай копирования одного файла без переименования определяется как {'my_asset_file.txt': '/path/to/my_asset_file.txt'}.
as_text
Нужно ли записывать протокол SavedModel в текстовом формате.
checkpoint_path
Путь к контрольной точке для экспорта. Если None (по умолчанию), выбирается последняя контрольная точка, найденная в каталоге модели.
graph_rewrite_specs
Итерируемый список GraphRewriteSpec. Каждый элемент создаст отдельный MetaGraphDef в экспортированном SavedModel, помеченный и переписанный как указано. По умолчанию один элемент с использованием стандартной метки обслуживания ("serve") и без перезаписи.
Инкрементное обучение на пакете образцов. (устаревшие аргументы)
Ожидается, что этот метод будет вызываться несколько раз последовательно на разных или одних и тех же фрагментах набора данных. Это позволяет реализовать итерационное обучение или обучение вне памяти/онлайн-обучение.
Это особенно полезно, когда весь набор данных слишком большой, чтобы поместиться в памяти одновременно. Или когда модели требуется много времени на сходимость, и вы хотите разбить обучение на подчасти.
Аргументы
x
Матрица формы [n_samples, n_features...]. Может быть итератором, возвращающим массивы признаков. Образцы входных данных для обучения модели. Если установлено, input_fn должно быть None.
y
Вектор или матрица [n_samples] или [n_samples, n_outputs]. Может быть итератором, возвращающим массив меток. Значения меток обучения (метки классов в классификации, вещественные числа в регрессии). Если установлено, input_fn должно быть None.
input_fn
Функция ввода. Если установлено, x, y, и batch_size должны быть None.
steps
Количество шагов для обучения модели. Если None, обучение будет продолжаться бесконечно.
batch_size
Размер мини-пакета для использования на входе, по умолчанию равен первой размерности x. Должен быть None, если указан input_fn.
monitors
Список экземпляров подкласса BaseMonitor. Используется для обратных вызовов внутри цикла обучения.
Возвращаемое значение
self, для цепочки вызовов.
Исключения
ValueError
Если хотя бы один из x и y предоставлен, а input_fn также предоставлен.
Возвращает прогнозы для заданных признаков. (устаревшие аргументы)
Аргументы
x
Матрица формы [n_samples, n_features...]. Может быть итератором, возвращающим массивы признаков. Образцы входных данных для обучения модели. Если установлено, input_fn должно быть None.
input_fn
Функция ввода. Если установлено, x и 'batch_size' должны быть None.
batch_size
Переопределённый размер пакета. Если установлено, 'input_fn' должно быть 'None'.
outputs
Список str, имя выходного значения для прогноза. Если None, возвращает все.
as_iterable
Если True, возвращает итератор, который продолжает предоставлять прогнозы для каждого примера до тех пор, пока ввод не закончится. Примечание: ввод должен завершиться, если вы хотите завершить итератор (например, убедитесь, что передали num_epochs=1, если используете что-то вроде read_batch_features).
iterate_batches
Если True, выводит весь пакет сразу вместо разбиения пакета на отдельные образцы. Релевантно только когда as_iterable True.
Возвращаемое значение
Массив NumPy предсказанных классов или регрессионных значений, если конструктор model_fn возвращает Tensor для predictions или массив NumPy массивов, если model_fn возвращает dict. Возвращает итератор прогнозов, если as_iterable True.
Метод работает как с простыми оценщиками, так и со вложенными объектами (например, с конвейерами). Первые имеют параметры вида <component>__<parameter>, что позволяет обновлять каждый компонент вложенного объекта.