как гистограмма 1D переменного тензора вычисляется за один шаг? - PullRequest
0 голосов
/ 11 января 2019

очень простой классификатор NN с одним 2D-входным узлом и одним выходным узлом для классификации двух точек (1,0) и (1,1), которые обозначены 0 и 1 соответственно. Модель классификатора имеет вид w1 * x1 + w2 * x2 + b = 0 Сеть обучается только одному шагу, а гистограмма параметра b отрисовывается инструментом тензорной доски. Гистограмма выглядит как равномерное распределение в диапазоне [1.97,2.16]. Почему гистограмма b имеет такую ​​форму?

import tensorflow as tf
import numpy as np

'''
generate synthesis dataset
'''
N = 2
x_np = np.array([[1,0],[1,1]]).astype('float32')
y_np = np.array([0,1]).astype('float32')

'''
generate tensorflow graph for the classifier model
'''
with tf.name_scope("placeholders"):
  x = tf.placeholder(tf.float32, (N,2))
  y = tf.placeholder(tf.float32, (N,))
with tf.name_scope("weights"):
  W = tf.Variable([[3.],[5.]])
  b = tf.Variable([2.])
with tf.name_scope("prediction"):
  y_logit = tf.squeeze(tf.matmul(x,W)+b)

# define the loss function
with tf.name_scope("loss"):
  #compute the cross-entropy term for each datapoint
  entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=y_logit, labels=y)
  #sum all contributions
  l = tf.reduce_sum(entropy)

# add training op
with tf.name_scope("optim"):
  train_op = tf.train.GradientDescentOptimizer(.1).minimize(l)

'''
for debugging
'''
with tf.name_scope("summaries"):
  tf.summary.histogram("b", b)
  merged = tf.summary.merge_all()
train_writer = tf.summary.FileWriter("/tmp/classifier-train", tf.get_default_graph())

'''
train the classifier model
'''
n_steps = 1
with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  train_writer.add_graph(sess.graph)
  #train the model
  for i in range(n_steps):
    feed_dict = {x:x_np, y:y_np}
    _,summary,b_val = sess.run([train_op, merged, b], feed_dict=feed_dict)
    train_writer.add_summary(summary,i)
...