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 空间后的数据的关系。
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])
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
在训练模型时,我们可以在 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)