|
|
|
import tensorflow as tf |
|
import numpy as np |
|
import scipy.misc |
|
try: |
|
from StringIO import StringIO |
|
except ImportError: |
|
from io import BytesIO |
|
|
|
|
|
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): |
|
|
|
try: |
|
s = StringIO() |
|
except: |
|
s = BytesIO() |
|
scipy.misc.toimage(img).save(s, format="png") |
|
|
|
|
|
img_sum = tf.Summary.Image(encoded_image_string=s.getvalue(), |
|
height=img.shape[0], |
|
width=img.shape[1]) |
|
|
|
img_summaries.append(tf.Summary.Value(tag='%s/%d' % (tag, i), image=img_sum)) |
|
|
|
|
|
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.""" |
|
|
|
|
|
counts, bin_edges = np.histogram(values, bins=bins) |
|
|
|
|
|
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)) |
|
|
|
|
|
bin_edges = bin_edges[1:] |
|
|
|
|
|
for edge in bin_edges: |
|
hist.bucket_limit.append(edge) |
|
for c in counts: |
|
hist.bucket.append(c) |
|
|
|
|
|
summary = tf.Summary(value=[tf.Summary.Value(tag=tag, histo=hist)]) |
|
self.writer.add_summary(summary, step) |
|
self.writer.flush() |
|
|