TF 2.0 tensorboard 可视化 用法

参数解析

tf.keras.callbacks.TensorBoard
(log_dir="", # log files
histogram_freq=0,

   对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化的验证数据(或分离数据)一定要明确的指出。

write_graph=True,

 是否在 TensorBoard 中可视化图像。 如果 write_graph 被设置为 True,日志文件会变得非常大。

write_grads=False,

 是否在 TensorBoard 中可视化梯度值直方图。 histogram_freq 必须要大于 0

write_images=False,

 是否在 TensorBoard 中将模型权重以图片可视化

embeddings_freq=0,

 被选中的嵌入层会被保存的频率(在训练轮中)。

batch_size=32,

用以直方图计算的传入神经元网络输入批的大小

embeddings_layer_names=None,

一个列表,会被监测层的名字。 如果是 None 或空列表,那么所有的嵌入层都会被监测。

embeddings_metadata=None,

  一个字典,对应层的名字到保存有这个嵌入层元数据文件的名字。 查看 详情 关于元数据的数据格式。 以防同样的元数据被用于所用的嵌入层,字符串可以被传入。

embeddings_data=None,

要嵌入在 embeddings_layer_names 指定的层的数据。 Numpy 数组(如果模型有单个输入)或 Numpy 数组列表(如果模型有多个输入)。 Learn ore about embeddings。

update_freq=‘epoch’,

batch’ 或 ‘epoch’ 或 整数。当使用 ‘batch’ 时,在每个 batch 之后将损失和评估值写入到 TensorBoard 中。同样的情况应用到 ‘epoch’ 中。如果使用整数,例如 10000,这个回调会在每 10000 个样本之后将损失和评估值写入到 TensorBoard 中。注意,频繁地写入到 TensorBoard 会减缓你的训练。

profile_batch=2)

用法

tensorboard --logdir =log files

界面展示

scalars:可以看到 accuracy,cross entropy,dropout,bias,weights 等的趋势.
image audio:可以看到输入的数据.
graphs:可以看到模型的结构.
histogram:可以看到 activations,gradients 或者 weights 等变量的每一步的分布,越靠前面就是越新的步数的结果。
distribution:可以看到activations,gradients 或者 weights等变量整体的状况。
embedding:可以看到用 PCA 主成分分析方法将高维数据投影到 3D 空间后的数据的关系。

在model.fit() model.fit_generator()使用tensorboard

model.fit()

log_dir=""
tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log_dir,)
model.fit(x=train_x
                    y=train_y
                    epoch=5
                    callbacks=[tensorboard_callback])

model.fit_generator()

log_dir=""
tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log_dir,)
checkpoint = ModelCheckpoint(filepath=filepath, verbose=1)
model.fit_generator(
                     train_generator,
				    steps_per_epoch=train_generator.samples / train_generator.batch_size,
				    epochs=99,
				    validation_data=validation_generator,
				    validation_steps=validation_generator.samples / validation_generator.batch_size,
				    verbose=1,
				    callbacks=[tensorboard, checkpoint],
				    use_multiprocessing=True,
				    workers=8

其他功能函数中嵌入TensorBoard

在训练模型时,我们可以在 tf.GradientTape()等等功能函数中个性化得通过tf.summary()方法指定需要TensorBoard展示的参数。

log_dir=""+datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
summary_write=tf.summary.create_file_write(log_dir)
# 将图片写入tensorboard
with summary_write.as_default():
          tf.summary.image('Training data', images, max_outputs=5, step=0)
tf.summary.trace_on(graph=True, profiler=True)
for epoch in range(30):
    train_loss = 0
    train_num = 0
    for step, (x, y) in enumerate(db):

        x = tf.reshape(x, [-1, 28*28])

        with tf.GradientTape() as tape: 
            logits = model(x)
            y_onehot = tf.one_hot(y,depth=10)

            loss_mse = tf.reduce_mean(tf.losses.MSE(y_onehot, logits))
            loss_ce = tf.losses.categorical_crossentropy(y_onehot, logits, from_logits=True)
            
            loss_ce = tf.reduce_mean(loss_ce)  # 计算整个簇的平均loss
        grads = tape.gradient(loss_ce, model.trainable_variables)  # 计算梯度
        optimizer.apply_gradients(zip(grads, model.trainable_variables)) # 更新梯度

        train_loss += float(loss_ce)
        train_num += x.shape[0]
        
    loss = train_loss / train_num  # 计算每一次迭代的平均loss
    with summary_writer.as_default():  # 将loss写入TensorBoard
        tf.summary.scalar('train_loss', train_loss, step=epoch)

    total_correct = 0
    total_num = 0
    for x,y in db_test:  # 用测试集验证每一次迭代后的准确率
        x = tf.reshape(x, [-1, 28*28])
        logits = model(x)
        prob = tf.nn.softmax(logits, axis=1)
        pred = tf.argmax(prob, axis=1)
        pred = tf.cast(pred, dtype=tf.int32)
        correct = tf.equal(pred, y)
        correct = tf.reduce_sum(tf.cast(correct, dtype=tf.int32))

        total_correct += int(correct)
        total_num += x.shape[0]
    acc = total_correct / total_num  # 平均准确率
    with summary_writer.as_default():  # 将acc写入TensorBoard
        tf.summary.scalar('test_acc', acc, step=epoch)
    print(epoch, 'train_loss:',loss,'test_acc:', acc)

你可能感兴趣的:(tensorflow,学习)