1. 程式人生 > >pytorch 其他深度框架使用tensorflow的tensorboard 視覺化

pytorch 其他深度框架使用tensorflow的tensorboard 視覺化

程式碼來源
首先你需要安裝

tensorflow
pytorch

定義一個logger.py檔案:

import tensorflow as tf
import numpy as np
import scipy.misc 

try:
    from StringIO import StringIO  # Python 2.7
except ImportError:
    from io import BytesIO         # Python 3.x


class Logger(object):

    def __init__(self, log_dir):
        """Create a summary writer logging to log_dir."""
self.writer = tf.summary.FileWriter(log_dir) def scalar_summary(self, tag, value, step): """Log a scalar variable.""" summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=value)]) self.writer.add_summary(summary, step) def image_summary(self, tag, images, step)
:
"""Log a list of images.""" img_summaries = [] for i, img in enumerate(images): # Write the image to a string try: s = StringIO() except: s = BytesIO() scipy.misc.toimage(img).save(s, format="png"
) # Create an Image object img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(), height=img.shape[0], width=img.shape[1]) # Create a Summary value img_summaries.append(tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum)) # Create and write Summary summary = tf.Summary(value=img_summaries) self.writer.add_summary(summary, step) def histo_summary(self, tag, values, step, bins=1000): """Log a histogram of the tensor of values.""" # Create a histogram using numpy counts, bin_edges = np.histogram(values, bins=bins) # Fill the fields of the histogram proto hist = tf.HistogramProto() hist.min = float(np.min(values)) hist.max = float(np.max(values)) hist.num = int(np.prod(values.shape)) hist.sum = float(np.sum(values)) hist.sum_squares = float(np.sum(values**2)) # Drop the start of the first bin bin_edges = bin_edges[1:] # Add bin edges and counts for edge in bin_edges: hist.bucket_limit.append(edge) for c in counts: hist.bucket.append(c) # Create and write Summary summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)]) self.writer.add_summary(summary, step) self.writer.flush()

在你想要使用的地方使用:

# 使用方法:
from logger import Logger
logger = Logger('./logs')

# (1) Log the scalar values
info = {
    'loss': loss.data[0],
    'accuracy': accuracy.data[0]
}

for tag, value in info.items():
    logger.scalar_summary(tag, value, step)

# (2) Log values and gradients of the parameters (histogram)
for tag, value in model.named_parameters():
    tag = tag.replace('.', '/')
    logger.histo_summary(tag, to_np(value), step)  # from Parameter to np.array
    logger.histo_summary(tag+'/grad', to_np(value.grad), step) # from Variable to np.array

# (3) Log the images
info = { # reshape (樣本,h,w)
    'images': to_np(img.view(-1, 28, 28)[:10])
}

for tag, images in info.items():
    logger.image_summary(tag, images, step)

開啟終端開啟tensorboard:

# shell終端開啟視覺化
tensorbard --logdir='./logs'