TensorBoardX lets you watch Tensors Flow without Tensorflow
Low-level writer for protocol buffers to event files, providing fine-grained control over TensorBoard event file creation and management. Used internally by SummaryWriter but available for direct use when manual event handling is needed.
Creates a FileWriter for direct protocol buffer event file management with configurable queue and flush settings.
class FileWriter:
def __init__(
self,
logdir: str,
max_queue: int = 10,
flush_secs: int = 120,
filename_suffix: str = ''
):
"""
Creates a FileWriter for protocol buffer event files.
Parameters:
- logdir: Directory where event files will be written
- max_queue: Maximum number of pending events and summaries before flush (default: 10)
- flush_secs: Seconds between automatic flushes to disk (default: 120)
- filename_suffix: Suffix added to all event filenames in logdir
"""Access and manage the log directory for the writer.
def get_logdir(self) -> str:
"""
Returns the directory where event files will be written.
Returns:
str: The log directory path
"""Add raw events and summaries directly to the event file with precise control over timing and metadata.
def add_event(
self,
event,
step: Optional[int] = None,
walltime: Optional[float] = None
):
"""
Add a raw event to the event file.
Parameters:
- event: Protocol buffer Event object
- step: Global step value (uses event.step if None)
- walltime: Timestamp (uses current time if None)
"""
def add_summary(
self,
summary,
global_step: Optional[int] = None,
walltime: Optional[float] = None
):
"""
Add a summary protocol buffer to the event file.
Parameters:
- summary: Protocol buffer Summary object
- global_step: Global step value for the summary
- walltime: Timestamp (uses current time if None)
"""Add computational graphs directly as protocol buffers to the event file.
def add_graph(
self,
graph_profile,
walltime: Optional[float] = None
):
"""
Add graph and step stats to the event file.
Parameters:
- graph_profile: Graph protocol buffer or RunMetadata
- walltime: Timestamp (uses current time if None)
"""
def add_onnx_graph(
self,
graph,
walltime: Optional[float] = None
):
"""
Add ONNX graph to TensorBoard.
Parameters:
- graph: ONNX graph protocol buffer
- walltime: Timestamp (uses current time if None)
"""
def add_openvino_graph(
self,
graph,
walltime: Optional[float] = None
):
"""
Add OpenVINO graph to TensorBoard.
Parameters:
- graph: OpenVINO graph protocol buffer
- walltime: Timestamp (uses current time if None)
"""Manage file flushing, closing, and reopening for precise control over event file lifecycle.
def flush(self):
"""
Flush pending events and summaries to disk.
Call this method to ensure all pending events are written.
"""
def close(self):
"""
Flush all data to disk and close the event file.
Call when no longer need the writer.
"""
def reopen(self):
"""
Reopen the EventFileWriter after closing.
Can be called after close() to add more events in the same directory.
Events will go into a new event file.
Does nothing if the writer was not closed.
"""Set default metadata for multiple operations using context managers.
def use_metadata(self, *, global_step=None, walltime=None):
"""
Context manager to temporarily set default metadata for enclosed add_event calls.
Parameters:
- global_step: Default global step value for enclosed operations
- walltime: Default walltime for enclosed operations (uses time.time() if None)
Returns:
Context manager that sets default metadata
"""from tensorboardX import FileWriter
from tensorboardX.proto import event_pb2, summary_pb2
import time
# Create writer
writer = FileWriter('logs/direct_events')
# Create custom event
event = event_pb2.Event()
event.wall_time = time.time()
event.step = 100
# Create custom summary
summary = summary_pb2.Summary()
value = summary.value.add()
value.tag = 'custom_metric'
value.simple_value = 42.0
# Add to event file
writer.add_summary(summary, global_step=100)
writer.flush()
writer.close()from tensorboardX import FileWriter
# Context manager usage
with FileWriter('logs/context') as writer:
# Set default metadata for multiple operations
with writer.use_metadata(global_step=50):
# Add multiple events with the same step
writer.add_event(custom_event1)
writer.add_event(custom_event2)
writer.add_event(custom_event3)from tensorboardX import FileWriter
writer = FileWriter('logs/manual_control', max_queue=5, flush_secs=60)
# Add events manually
for i in range(100):
writer.add_summary(create_summary(i), global_step=i)
# Force flush every 10 steps
if i % 10 == 0:
writer.flush()
# Close and reopen for new data
writer.close()
writer.reopen()
# Add more events to new file
for i in range(100, 200):
writer.add_summary(create_summary(i), global_step=i)
writer.close()FileWriter operations can raise exceptions for invalid paths, permission errors, and protocol buffer issues:
from tensorboardX import FileWriter
import os
try:
# May fail if directory doesn't exist or no write permissions
writer = FileWriter('/invalid/path')
except OSError as e:
print(f"Failed to create writer: {e}")
try:
# Ensure directory exists
os.makedirs('logs/safe_path', exist_ok=True)
writer = FileWriter('logs/safe_path')
# Use writer safely
writer.add_summary(summary, global_step=0)
finally:
writer.close()FileWriter supports writing directly to cloud storage with appropriate URLs:
# S3 storage (requires boto3)
writer = FileWriter('s3://mybucket/tensorboard-logs/experiment1')
# Google Cloud Storage (requires google-cloud-storage)
writer = FileWriter('gs://mybucket/tensorboard-logs/experiment1')Install with Tessl CLI
npx tessl i tessl/pypi-tensorboardx