Как нарисовать гистограмму весов на тензорной доске? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть train.py и model.py для 3D-модели глубокого обучения.Я определяю модель в model.py.В train.py я импортирую модель из model.py и начинаю тренировку.

Я визуализировал потерю или точность тренировки, используя функцию tf.summary.scalar в train.py.

Однако я 'У меня возникли проблемы, когда я пытаюсь построить гистограмму веса.Я нахожу функцию tf.summary.histogram, но я не могу понять, куда поместить эту функцию (в train.py или model.py?).

В model.py я определил слои, используя функцию tf.contrib.layers,(извините за плохое владение английским)

PS :
Я сохранил свою модель в формате .ckpt.Можно ли построить весовую гистограмму, загрузив эту сохраненную модель?

1 Ответ

0 голосов
/ 27 декабря 2018

Я постараюсь ответить на каждый ваш вопрос отдельно.

У меня проблемы с попыткой нарисовать гистограмму веса.

В идеале вы определяете веса и смещения используя tf.get_variable и добавьте их в сводные гистограммы.

Например:

with tf.name_scope("layer1"):
    W1 = tf.get_variable("W1", shape=[input_size, hidden_layer_neurons],
                         initializer=tf.contrib.layers.xavier_initializer())
    layer1 = tf.matmul(X, W1)
    layer1_act = tf.nn.tanh(layer1)
    tf.summary.histogram("weights", W1)

При необходимости мы также можем добавить гистограммы выходов слоя и выходов активации:

    tf.summary.histogram("layer-outputs", layer1)
    tf.summary.histogram("activation-outputs", layer1_act)

Но так как вы используетеtf.contrib.layers, у вас нет такого положения, поскольку contrib.layers заботится о создании весов и уклонов для вас.В таком случае вы можете взглянуть на tf.trainable_variables();Он должен содержать все обучаемые переменные из вашего графика, который содержит все веса и смещения сети.

Вы можете определить простую функцию, например, такую:

def add_hist(train_vars):
    for i in train_vars:
        name = i.name.split(":")[0]
        value = i.value()
        tf.summary.histogram(name, value)

Я не могу понять, где разместить эту функцию (в train.py? Или model.py?)

Скалярные сводки, такие как потери и точность, получены во время обучения, поэтому они включены в train.py;Принимая во внимание, что весовые коэффициенты являются частью вашей базовой модели и, следовательно, должны быть включены в model.py

Так что в ваш model.py включите это, прежде чем использовать tf.summary.merge_all()

train_vars = tf.trainable_variables()
add_hist(train_vars)

Могу ли я нарисовать весовую гистограмму, загрузив эту сохраненную модель?

Эти гистограммы обычно показывают распределение объектов (весов, активаций и т. Д.) Во время тренировки.Эти графики часто используются в основном для понимания того, как эти распределения меняются со временем, если параметры или их градиенты насыщены или нет, любые четкие шаги, которые необходимо предпринять для улучшения и т. Д.

После сохранения сохраненной контрольной точки (.Предполагается, что ckpt) содержит только окончательные веса и смещения, получено только окончательное распределение, а не график гистограммы за весь период обучения.

Надеюсь, это поможет.

...