defimage_summary(self, tag, images, step): """Log a list of images.""" # 图像信息 日志 img_summaries = [] for i, img inenumerate(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) defhisto_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)
for tag, value in info.items(): logger.scalar_summary(tag, value, step+1)
# 2. Log values and gradients of the parameters (histogram summary) # 日志输出参数值和梯度(histogram summary) for tag, value in model.named_parameters(): tag = tag.replace('.', '/') logger.histo_summary(tag, value.data.cpu().numpy(), step+1) logger.histo_summary(tag+'/grad', value.grad.data.cpu().numpy(), step+1)
# 3. Log training images (image summary) # 日志输出图像(image summary) info = { 'images': images.view(-1, 28, 28)[:10].cpu().numpy() }
for tag, images in info.items(): logger.image_summary(tag, images, step+1)