可以在同一台机器上运行多个张量板实例(具有不同的日志目录)。甚至还有可以启动/重用 TB 进程的tensorboard.manager 类。问题是所有这些 TB 在不同端口上运行不同的 Web 服务器。
我想更进一步,将所有这些 TB 置于具有单个端口的同一 Web 服务器下。(TB 应该是动态的 - 以便可以动态添加新的 TB。)
如果我可以将 '&logdir=gs://bla/bla' 添加到 URL 并让 TB 与该日志目录相对应,那就太好了。
实现这一目标的最简单方法是什么?
我有一个使用 Keras 和张量流后端的生成对抗网络。我正在运行 Tensorflow 1.14.0、Python 3.7.4 和 Keras 2.2.4。完整的错误是:
Using TensorFlow backend.
Traceback (most recent call last):
File "C:/Users/Riley/PycharmProjects/shoeGAN/shoeWGAN.py", line 7, in <module>
from keras.layers import *
File "C:\Users\Riley\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\__init__.py", line 3, in <module>
from . import utils
File "C:\Users\Riley\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\utils\__init__.py", line 6, in <module>
from . import conv_utils
File "C:\Users\Riley\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\utils\conv_utils.py", line 9, in <module>
from .. import backend as K
File "C:\Users\Riley\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\backend\__init__.py", line 89, in <module>
from .tensorflow_backend import *
File "C:\Users\Riley\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\backend\tensorflow_backend.py", line 5, in <module>
import tensorflow as tf
File …Run Code Online (Sandbox Code Playgroud) 我注意到,无论我将多少图像保存到张量板日志文件中,张量板都只会显示其中的 10 个(每个标签)。
我们如何增加图像数量或至少选择显示哪些图像?
要重现我的意思,请运行以下 MCVE:
import torch
from torch.utils.tensorboard import SummaryWriter
tb = SummaryWriter(comment="test")
for k in range(100):
# create an image with some funny pattern
b = [n for (n, c) in enumerate(bin(k)) if c == '1']
img = torch.zeros((1,10,10))
img[0, b, :] = 0.5
img =img + img.permute([0, 2, 1])
# add the image to the tensorboard file
tb.add_image(tag="test", img_tensor=img, global_step=k)
Run Code Online (Sandbox Code Playgroud)
这将创建一个runs保存数据的文件夹。从同一文件夹执行tensorboard --logdir runs,打开浏览器并转到localhost:6006(或替换6006为启动后显示的任何端口张量板)。然后转到“图像”选项卡并将滑块移动到灰度图像上方。
就我而言,它仅显示步骤中的图像
k = 3, 20, …Run Code Online (Sandbox Code Playgroud) 我想在我的模型在 Tensorflow 2.0 中训练时监控梯度流。理想情况下,我希望在模型训练时将梯度存储在数组中,然后在训练完成后通过 matplotlib 查看它们。我该怎么做?
这是我想要运行的玩具模型:
tf.keras.backend.clear_session()
input_sequence = tf.keras.layers.Input(shape=[number_timesteps, number_features])
x = tf.keras.layers.Conv1D(2**5, 3, padding='same', activation='relu')(input_sequence)
x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dropout(0.5)(x)
output_sequence = tf.keras.layers.Dense(number_classes, activation="softmax")(x)
model = tf.keras.Model(input_sequence, output_sequence)
model.compile(loss=tf.keras.losses.categorical_crossentropy, metrics=["accuracy"], optimizer=tf.keras.optimizers.Adam())
model.summary()
model.fit(...)
Run Code Online (Sandbox Code Playgroud) 我是机器学习的新手,我正在尝试制作图像分类器,模型训练正确,但问题出在张量板上,如何可视化验证集上的损失和准确性图?你唯一看到的是测试集上的损失和准确性
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X, y, batch_size=32, epochs=5, validation_split=0.3, callbacks=[tensorboard])
Run Code Online (Sandbox Code Playgroud)
我有一个脚本,可以生成一系列 matplotlib 图形并使用 TensorBoard 将它们写入磁盘SummaryWriter()。TensorBoard 提供了移动小滑块以在图像序列中向前和向后前进的功能,但我想将图像序列转换为视频或动画。有没有办法做到这一点?
编辑 1:这是我的代码当前功能的简化示例。我想将写入日志文件的图像.add_figure转换为 gif。
import matplotlib.pyplot as plt
import numpy as np
from torch.utils.tensorboard import SummaryWriter
n = 200
nframes = 25
x = np.linspace(-np.pi*4, np.pi*4, n)
tensorboard_writer = SummaryWriter()
for i, t in enumerate(np.linspace(0, np.pi, nframes)):
plt.plot(x, np.cos(x + t))
plt.plot(x, np.sin(2*x - t))
plt.plot(x, np.cos(x + t) + np.sin(2*x - t))
plt.ylim(-2.5,2.5)
fig = plt.gcf()
tensorboard_writer.add_figure(
tag='temp',
figure=fig,
global_step=i,
close=True)
Run Code Online (Sandbox Code Playgroud) 的文档tf.keras.callbacks.TensorBoard说明该工具可以做到这一点:
此回调记录 TensorBoard 的事件,包括:
- 指标汇总图
- 训练图可视化
- 激活直方图
- 抽样分析
稍后还有:
histogram_freq:计算模型各层的激活和权重直方图的频率(以纪元为单位) 。如果设置为 0,则不会计算直方图。必须为直方图可视化指定验证数据(或分割)。
但是,当使用此参数时,我没有看到任何写入的激活摘要,只写入了权重本身。查看源代码,我也没有看到任何与激活相关的内容。
那么我错过了什么吗?是否可以在 TF2 中编写没有自定义代码的激活摘要?
我很难理解如何让 Tensorboard 在 Google Colab 上运行的笔记本上正常工作。我将在下面发布一系列用于处理张量板的代码片段。
\nTensorFlow 版本:2.2.0
\nEager 模式:True
\nHub 版本:0.8.0
\nGPU 可用
%load_ext tensorboard\nimport tensorflow as tf\nfrom tensorboard.plugins.hparams import api as hp\nRun Code Online (Sandbox Code Playgroud)\ncallbacks = [\n \n EarlyStopping(monitor=monitor_metric,\n min_delta=minimum_delta,\n patience=patience_limit,\n verbose=verbose_value,\n mode=mode_value,\n restore_best_weights=True),\n\n ModelCheckpoint(filepath=weights_fname,\n monitor=monitor_metric,\n verbose=verbose_value,\n save_best_only=True,\n save_weights_only=True),\n \n tf.keras.callbacks.TensorBoard(logdir), #used here\n\n TensorBoardColabCallback(tbc),\n \n hp.KerasCallback(logdir, hparams) #used here\n ]\n \n return callbacks\nRun Code Online (Sandbox Code Playgroud)\n初始化将由 Tensorboard 记录的超参数
\nHP_HIDDEN_UNITS = hp.HParam(\'batch_size\', hp.Discrete([128]))\nHP_EMBEDDING_DIM = hp.HParam(\'embedding_dim\', hp.Discrete([50, 100]))\nHP_LEARNING_RATE = hp.HParam(\'learning_rate\', hp.Discrete([0.01])) # Adam default: 0.001, SGD default: 0.01, RMSprop …Run Code Online (Sandbox Code Playgroud) 我有一个简单的神经网络,我尝试使用张量板通过使用回调来绘制梯度,如下所示:
class GradientCallback(tf.keras.callbacks.Callback):
console = False
count = 0
run_count = 0
def on_epoch_end(self, epoch, logs=None):
weights = [w for w in self.model.trainable_weights if 'dense' in w.name and 'bias' in w.name]
self.run_count += 1
run_dir = logdir+"/gradients/run-" + str(self.run_count)
with tf.summary.create_file_writer(run_dir).as_default(),tf.GradientTape() as g:
# use test data to calculate the gradients
_x_batch = test_images_scaled_reshaped[:100]
_y_batch = test_labels_enc[:100]
g.watch(_x_batch)
_y_pred = self.model(_x_batch) # forward-propagation
per_sample_losses = tf.keras.losses.categorical_crossentropy(_y_batch, _y_pred)
average_loss = tf.reduce_mean(per_sample_losses) # Compute the loss value
gradients = g.gradient(average_loss, self.model.weights) # …Run Code Online (Sandbox Code Playgroud) 我正在使用 Amazon Sagemaker 通过 Tensorflow 训练模型,并且我希望能够在作业运行时监控训练进度。然而,在训练期间,不会将 Tensorboard 文件输出到 S3,只有训练作业完成后,文件才会上传到 S3。训练完成后,我可以下载文件并看到 Tensorboard 在整个训练过程中正确记录值,尽管训练完成后仅在 S3 中更新一次。
我想知道为什么 Sagemaker 在整个训练过程中不将 Tensorboard 信息上传到 S3?
以下是我在 Sagemaker 上的笔记本中启动训练工作的代码
import sagemaker
from sagemaker.tensorflow import TensorFlow
from sagemaker.debugger import DebuggerHookConfig, CollectionConfig, TensorBoardOutputConfig
import time
bucket = 'my-bucket'
output_prefix = 'training-jobs'
model_name = 'my-model'
dataset_name = 'my-dataset'
dataset_path = f's3://{bucket}/datasets/{dataset_name}'
output_path = f's3://{bucket}/{output_prefix}'
job_name = f'{model_name}-{dataset_name}-training-{time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())}'
s3_checkpoint_path = f"{output_path}/{job_name}/checkpoints" # Checkpoints are updated live as expected
s3_tensorboard_path = f"{output_path}/{job_name}/tensorboard" # Tensorboard data isn't appearing here until the …Run Code Online (Sandbox Code Playgroud) python amazon-web-services tensorflow tensorboard amazon-sagemaker
tensorboard ×10
python ×6
tensorflow ×6
keras ×2
animation ×1
gradienttape ×1
image ×1
matplotlib ×1
python-3.x ×1
pytorch ×1
tensorboardx ×1
video ×1