Что такое Тензорборд?

TensorFlow

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…

Оглядываясь назад на фронт:

В этой статье в основном рассказывается об основах использования TensorBoard иname_scope和variable_scopeразница

1. Начало работы с TensorBoard

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

Чтобы облегчить понимание, отладку и оптимизацию программ TensorFlow, существуют TensorBoard, такие какинструмент визуализации

Поскольку программу TensorFlow мы написали и построили нейронную сеть, по сути, мы не знаем, что внутри нейронной сети.Деталичто ты сделал?Вручную отлаживать очень сложно(Как будто вы не можете представить все шаги рекурсии). С помощью TensorBoard можно отображать этапы выполнения программы TensorFlow, что очень интуитивно понятно. Также мы можемпараметры тренировки(например, стоимость потерь) для статистики используйтерисунокспособ просмотра изменяющихся тенденций.

1.1 name_scope и variable_scope

На самом деле, в видео также упоминается, что мы хотим, чтобы график TensorBoard лучше отображался (более организован), поэтому в целом нам нужно его использовать.name_scopeвзять имя.

Кроме этогоname_scope, а другой называетсяvariable_scope. Так в чем же между ними разница? Как следует из названия,name_scopeэто область имени,variable_scopeэто переменная область видимости.

В предыдущей статье было два способа создания переменных, один из них — использоватьtf.get_variable()создать, нужно использоватьtf.Variable()создавать. Существуют также различия между двумя методами создания.

  • существуетtf.name_scopeв следующий раз,tf.get_variable()имя созданной переменнойне подлежитname_scopeЭффект , и если общая переменная не указана, будет сообщено об ошибке, если имя такое же.tf.Variable()Он автоматически определит, есть ли переменная с таким же именем, и если да, то она будет обработана сама (она будет создана автоматически)

Например следующий код:

with tf.name_scope('name_sp1') as scp1:
    with tf.variable_scope('var_scp2') as scp2:
        with tf.name_scope('name_scp3') as scp3:
            a = tf.Variable('a')
            b = tf.get_variable('b')

Эквивалентно:

with tf.name_scope('name_sp1') as scp1:
    with tf.name_scope('name_sp2') as scp2:
        with tf.name_scope('name_scp3') as scp3:
            a = tf.Variable('a')

with tf.variable_scope('var_scp2') as scp2:
        b = tf.get_variable('b')

Здесь показано, что если вы используетеget_variableспособ создания объектов, на который не влияетname_scopeзатронутый.


Обратите внимание, что следующий код вызовет ошибку. Поскольку в области scp нет переменной a, и для нее задано значениеreuse=True. Здесь, потому чтообщая переменная не найдена ошибка!

with tf.variable_scope('scp', reuse=True) as scp:
    a = tf.get_varialbe('a') #报错

Точно так же следующий код также сообщит об ошибке, потому что, очевидно,уже естьобщая переменная, но установлен вreuse=false. Так он сообщит об ошибке.

with tf.variable_scope('scp', reuse=False) as scp:    
     a = tf.get_varialbe('a')
    a = tf.get_varialbe('a') #报错

Наконец, давайте еще раз посмотрим на этот пример, он должен быть в состоянии понять.

with tf.variable_scope('variable_scope_y') as scope:
    var1 = tf.get_variable(name='var1', shape=[1], dtype=tf.float32)
    scope.reuse_variables()  # 设置共享变量
    var1_reuse = tf.get_variable(name='var1')
    var2 = tf.Variable(initial_value=[2.], name='var2', dtype=tf.float32)
    var2_reuse = tf.Variable(initial_value=[2.], name='var2', dtype=tf.float32)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(var1.name, sess.run(var1))
    print(var1_reuse.name, sess.run(var1_reuse))
    print(var2.name, sess.run(var2))
    print(var2_reuse.name, sess.run(var2_reuse))
# 输出结果:
# variable_scope_y/var1:0 [-1.59682846]
# variable_scope_y/var1:0 [-1.59682846]   可以看到变量var1_reuse重复使用了var1
# variable_scope_y/var2:0 [ 2.]
# variable_scope_y/var2_1:0 [ 2.]

Использованная литература:

1.2 Пример TensorBoard

Давайте посмотрим на простой вводный пример TensorBoard и почувствуем его:

def learn_tensor_board_2():
    # prepare the original data
    with tf.name_scope('data'):
        x_data = np.random.rand(100).astype(np.float32)
        y_data = 0.3 * x_data + 0.1
    ##creat parameters
    with tf.name_scope('parameters'):
        with tf.name_scope('weights'):
            weight = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
            tf.summary.histogram('weight', weight)
        with tf.name_scope('biases'):
            bias = tf.Variable(tf.zeros([1]))
            tf.summary.histogram('bias', bias)
    ##get y_prediction
    with tf.name_scope('y_prediction'):
        y_prediction = weight * x_data + bias
    ##compute the loss
    with tf.name_scope('loss'):
        loss = tf.reduce_mean(tf.square(y_data - y_prediction))
        tf.summary.scalar('loss', loss)
    ##creat optimizer
    optimizer = tf.train.GradientDescentOptimizer(0.5)
    # creat train ,minimize the loss
    with tf.name_scope('train'):
        train = optimizer.minimize(loss)
    # creat init
    with tf.name_scope('init'):
        init = tf.global_variables_initializer()
    ##creat a Session
    sess = tf.Session()
    # merged
    merged = tf.summary.merge_all()
    ##initialize
    writer = tf.summary.FileWriter("/Users/zhongfucheng/tensorboard/loss-2", sess.graph)
    sess.run(init)
    ## Loop
    for step in range(201):
        sess.run(train)
        rs = sess.run(merged)
        writer.add_summary(rs, step)


if __name__ == '__main__':
    learn_tensor_board_2()
    # 启动完了之后,要在命令行上运行tensor_board的命令,指定其目录,最后我们就可以通过6006的默认端口访问我们的图。

(Пример взят из сети, я его немного изменил, забыл исходник, вторгся и удалил~)

Далее запустим TensorBoard, чтобы посмотреть, как выглядит график, команда запуска следующая:

tensorboard --logdir=/Users/zhongfucheng/tensorboard/loss-2

График, который успешно стартовал:

启动成功的图

Давайте зайдем через порт 6006. Во-первых, мы можем обнаружить изменение значения потерь:

loss值的变更

Мы также можем просмотреть примерные шаги выполнения программы TensorFlow:

Tensorflow大概的执行步骤

Гистограмма параметров w и b:

参数w和b的直方图

Короче говоря, TensorBoard может легко просматривать изменения наших параметров, чтобы лучше понимать код, который мы пишем.

Использованная литература:

Наконец

рад вывестигалантерейные товарыОбщедоступный номер технологии Java: Java3y. В паблике более 200 статейоригинальныйТехнические статьи, обширные видеоресурсы, красивые карты мозга — идите сюдаобрати внимание нанемного!

帅的人都关注了

Я думаю, что моя статья хорошо написана, пожалуйста, нажмитеотличный!