如何记录TensorFlow变量中的单个标量值?

如何使用SummaryWriter(例如用于TensorBoard)记录张量Variable的单个标量元素?例如,如何记录网络中给定层或节点的各个权重?

在我的示例代码中,我使用了一个通用的前馈神经网络来进行简单的线性回归,并且希望(在这种情况下)记录学习过程中唯一隐藏层中唯一节点的权重。

我可以在会话中明确获取这些值,例如

sess.run(layer_weights)[0][i][0]

用于第i个权重,其中layer_weights是权重Variable的列表;但我不知道如何记录相应的标量值。如果我尝试

w1 = tf.slice(layer_weights[0], [0], [1])[0]tf.scalar_summary('w1', w1)

w1 = layer_weights[0][1][0]tf.scalar_summary('w1', w1)

我会得到

ValueError: Shape (5, 1) must have rank 1

如何记录TensorFlow Variable中的单个标量值?


from __future__ import (absolute_import, print_function, division, unicode_literals)import numpy as npimport tensorflow as tf# 基本模型参数作为外部标志flags = tf.app.flagsFLAGS = flags.FLAGSflags.DEFINE_float('network_nodes', [5, 1], '每层节点的数量,包括输入和输出。')flags.DEFINE_float('epochs', 250, '运行的轮数')flags.DEFINE_float('learning_rate', 0.15, '初始学习率。')flags.DEFINE_string('data_dir', './data', '保存训练和测试数据的目录。')flags.DEFINE_string('train_dir', './_tmp/train', '记录训练(和网络定义)的目录。')flags.DEFINE_string('test_dir', './_tmp/test', '记录测试的目录。')def variable_summaries(var, name):    with tf.name_scope("summaries"):        mean = tf.reduce_mean(var)        tf.scalar_summary('mean/' + name, mean)        with tf.name_scope('stddev'):            stddev = tf.sqrt(tf.reduce_sum(tf.square(var - mean)))            tf.scalar_summary('sttdev/' + name, stddev)    tf.scalar_summary('max/' + name, tf.reduce_max(var))    tf.scalar_summary('min/' + name, tf.reduce_min(var))    tf.histogram_summary(name, var)def add_layer(input_tensor, input_dim, output_dim, neuron_fn, layer_name):    with tf.name_scope(layer_name):        with tf.name_scope("weights"):            weights = tf.Variable(tf.truncated_normal([input_dim, output_dim], stddev=0.1))        with tf.name_scope("biases"):            biases = tf.Variable(tf.constant(0.1, shape=[output_dim]))        with tf.name_scope('activations'):            with tf.name_scope('weighted_inputs'):                weighted_inputs = tf.matmul(input_tensor, weights) + biases                tf.histogram_summary(layer_name + '/weighted_inputs', weighted_inputs)            output = neuron_fn(weighted_inputs)    return output, weights, biasesdef make_ff_network(nodes, input_activation, hidden_activation_fn=tf.nn.sigmoid, output_activation_fn=tf.nn.softmax):    layer_activations = [input_activation]    layer_weights = []    layer_biases = []    n_layers = len(nodes)    for l in range(1, n_layers):        a, w, b = add_layer(layer_activations[l - 1], nodes[l - 1], nodes[l],                         output_activation_fn if l == n_layers - 1 else hidden_activation_fn,                         'output_layer' if l == n_layers - 1 else 'hidden_layer' + (                             '_{}'.format(l) if n_layers > 3 else ''))        layer_activations += [a]        layer_weights += [w]        layer_biases += [b]    with tf.name_scope('output'):        net_activation = tf.identity(layer_activations[-1], name='network_activation')    return net_activation, layer_weights, layer_biases# 输入和输出with tf.name_scope('data'):    x = tf.placeholder(tf.float32, shape=[None, FLAGS.network_nodes[0]], name='inputs')    y_ = tf.placeholder(tf.float32, shape=[None, FLAGS.network_nodes[-1]], name='correct_outputs')# 网络结构y, layer_weights, layer_biases = make_ff_network(FLAGS.network_nodes, x, output_activation_fn=tf.identity)# 指标和操作with tf.name_scope('accuracy'):    with tf.name_scope('loss'):        loss = tf.reduce_mean(tf.square(y - y_))    # 这些都不起作用:    #w1 = tf.slice(layer_weights[0], [0], [1])[0]    #tf.scalar_summary('w1', w1)    #w1 = layer_weights[0][1][0]    #tf.scalar_summary('w1', w1)    tf.scalar_summary('loss', loss)train_step = tf.train.GradientDescentOptimizer(FLAGS.learning_rate).minimize(loss)# 记录train_writer = tf.train.SummaryWriter(FLAGS.train_dir, tf.get_default_graph())test_writer = tf.train.SummaryWriter(FLAGS.test_dir)merged = tf.merge_all_summaries()W = np.array([1.0, 2.0, 3.0, 4.0, 5.0])train_x = np.random.rand(100000, FLAGS.network_nodes[0])train_y = np.array([np.dot(W, train_x.T)+ 6.0]).Ttest_x = np.random.rand(1000, FLAGS.network_nodes[0])test_y = np.array([np.dot(W, test_x.T)+ 6.0]).Twith tf.Session() as sess:    sess.run(tf.initialize_all_variables())    for ep in range(FLAGS.epochs):        sess.run(train_step, feed_dict={x: train_x, y_: train_y})        summary = sess.run(merged, feed_dict={x: test_x, y_: test_y})        test_writer.add_summary(summary, ep+1)    # 这些可以工作    print('w1 = {}'.format(sess.run(layer_weights)[0][0][0]))    print('w2 = {}'.format(sess.run(layer_weights)[0][1][0]))    print('w3 = {}'.format(sess.run(layer_weights)[0][2][0]))    print('w4 = {}'.format(sess.run(layer_weights)[0][3][0]))    print('w5 = {}'.format(sess.run(layer_weights)[0][4][0]))    print(' b = {}'.format(sess.run(layer_biases)[0][0]))

回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注