Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
TensorBoard — это набор средств визуализации, упрощающий понимание и отладку программ глубокого обучения. Например, он позволяет просматривать граф модели, отображать различные скалярные значения в процессе обучения и визуализировать внедрение.
Python
Класс TensorBoardProgressWriter в Python теперь поддерживает выходные данные в собственном формате TensorBoard, что позволяет использовать широкие возможности визуализации для CNTK заданий. В настоящее время TensorBoardProgressWriter можно использовать для выполнения следующих задач:
- Запись графа модели.
- Запись произвольных скалярных значений во время обучения.
- Автоматически записывайте значения функции потери и частоту ошибок во время обучения.
- Отображение изображений (начиная с версии 2.2)
Сначала необходимо создать экземпляр класса TensorBoardProgressWriter, предоставив некоторые из следующих аргументов:
- freq — как часто регистрировать выходные файлы. Например, значение 2 приведет к каждому второму вызову метода обновления для записи на диск.
- log_dir — каталог, в котором будут созданы выходные файлы.
- Rank — в случае распределенного обучения это значение должно быть присвоено рангу рабочей роли. Если задано значение, TensorBoardProgressWriter гарантирует, что записывается только ход выполнения из рабочей роли 0.
- модель — модель CNTK для визуализации.
Например, в приведенной ниже строке создается экземпляр TensorBoardProgressWriter, который будет создавать файлы в каталоге log и записывать на диск при каждом 10-м вызове. Он также сохранит граф my_model для визуализации позже.
tensorboard_writer = TensorBoardProgressWriter(freq=10, log_dir=’log’, model=my_model)
Затем необходимо указать указанный выше объект Trainer при построении:
trainer = Trainer(my_model, (ce, pe), learner, tensorboard_writer)
Объект Trainer обязательно обновит TensorBoardProgressWriter значениями метрики потери и оценки после обучения или тестирования на каждом мини-пакете. Поэтому явно не нужно вызывать TensorBoardProgressWriter для записи этих значений. Для записи других скалярных значений можно использовать метод write_value(), например:
# Log mean of each parameter tensor, to confirm that the parameters change indeed.
# Don't want to do that very often though, not to spend too much time computing the mean.
if minibatch_idx % 10000 == 0:
for p in my_model.parameters:
tensorboard_writer.write_value(p.uid + "/mean", reduce_mean(p).eval(), minibatch_idx)
Начиная с CNTK версии 2.2 можно использовать функцию образа TensorBoard для CNTK. Чтобы отобразить изображения, необходимо вызвать метод TensorBoardProgressWriter.write_image(). Ниже приведен пример использования TensorBoard для отображения изображений из набора данных MNIST.
Во-первых, мы считываем изображения из набора данных MNIST и кормим их как часть входных данных модели.
# Input variables denoting the features and label data
input_var = C.ops.input_variable((num_channels, image_height, image_width), np.float32)
label_var = C.ops.input_variable(num_output_classes, np.float32)
# Create a model
with C.layers.default_options(activation=C.ops.relu, pad=False):
conv1 = C.layers.Convolution2D((5, 5), 32, pad=True)(scaled_input)
...
#load image data as model input
reader_train = create_reader(os.path.join(data_path, 'minist_data_set_file'), True, input_dim,
num_output_classes)
input_map = {
input_var: reader_train.streams.features,
label_var: reader_train.streams.labels
}
Чтобы сериализовать изображение в tensorboard, необходимо получить переменную образа во время обучения, а затем вызвать TensorBoardProgressWriter.write_image(), чтобы отобразить его. Вы можете получить любую промежуточную переменную в виде изображений, в следующем примере input_var содержит образы, которые мы хотим сериализовать.
for epoch in range(max_epochs):
sample_count = 0
while sample_count < epoch_size:
#train the model using input data
data = reader_train.next_minibatch(min(minibatch_size, epoch_size - sample_count),
input_map=input_map)
#Store input data in the output
output = trainer.train_minibatch(data, outputs=[input_var])
#Write output images to tensorboard
tensorboard_writer.write_image('training', output[1], sample_count)
TensorBoard не входит в состав пакета CNTK и должен быть установлен отдельно. После установки после запуска задания обучения можно запустить TensorBoard для мониторинга хода выполнения, выполнив следующую команду:
tensorboard --logdir=log
(при условии, что команда выполняется из рабочего каталога скрипта) и перейдите в http://localhost:6006/ избранный веб-браузер.
Следующие скрипты содержат примеры использования TensorBoardProgressWriter:
Examples/Image/Classification/MLP/Python/SimpleMNIST.py
Examples/Image/Classification/ResNet/Python/TrainResNet_CIFAR10.py
Examples/Image/Classification/ConvNet/Python/ConvNet_CIFAR10_DataAug_Distributed.py
Examples/LanguageUnderstanding/ATIS/Python/LanguageUnderstanding.py
BrainScript
Вы также можете указать CNTK регистрировать ход обучения и граф модели из BrainScript. Следующие два параметра в выходных данных блочного элемента УПРАВЛЕНИЯ TENSORBoard:
- tensorBoardLogDir — каталог, в котором должны быть созданы файлы событий TensorBoard. По умолчанию это значение пусто, то есть выходные данные TensorBoard отсутствуют.
- tensorBoardNumMBsToLogResult — частота, с которой в TensorBoard регистрируются промежуточные (на мини-биты) метрики потери и оценки. Этот параметр используется только в том случае, если tensorBoardLogDir не был пустым. По умолчанию используется то же значение, что и numMBsToShowResult. Если задать для него значение 0, промежуточные выходные данные не будут выводиться только для статистики эпохи. Если задать для него любое положительное целое число N, результаты выполнения TensorBoard будут выводиться для каждого мини-теста N.
Обычно эти параметры передаются при запуске CNTK из командной строки:
CNTK.exe configFile=myConfig tensorBoardLogDir=log tensorBoardNumMBsToLogResult=10