tensorflow学习(二)深入使用阅读笔记

    xiaoxiao2021-03-25  78

    inference()函数会尽可能地构建图表,做到返回包含了预测结果(output prediction)的Tensor

    每一层都创建于一个唯一的tf.name_scope之下,创建于该作用域之下的所有元素都将带有其前缀。

    with tf.name_scope('hidden1') as scope weights = tf.Variable( tf.truncated_normal([IMAGE_PIXELS, hidden1_units], stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights') biases = tf.Variable(tf.zeros([hidden1_units]), name='biases')

    当这些层是在hidden1作用域下生成时,赋予权重变量的独特名称将会是”hidden1/weights”。 其中truncated_normal:生成截尾正态分布

    loss()函数通过添加所需的损失操作,进一步构建图表。

    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits, onehot_labels, name='xentropy')

    注意这里的logits是(batch_size,class_num)的scores矩阵,不要把计算过softmax的数据代入,否则会出错!

    training()函数添加了通过梯度下降(gradient descent)将损失最小化所需的操作。

    global_step = tf.Variable(0, name='global_step', trainable=False) train_op = optimizer.minimize(loss, global_step=global_step)

    class tf.train.Optimizer:千万不要直接用这个大类,而要用子类,比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer. trainable=False 可以防止该变量被数据流图的 GraphKeys.TRAINABLE_VARIABLES 收集, 这样我们就不会在训练的时候尝试更新

    evaluate()函数是得到最终预测正确的结果数量 correct = tf.nn.in_top_k(logits, labels, 1) return tf.reduce_sum(tf.cast(correct, tf.int32))

    tf.nn.in_top_k(predictions, targets, k, name=None) 判断target 是否在top k 的预测之中。 输出batch_size 大小的bool 数组,如果对目标类的预测在所有预测的top k 中,条目 out[i]=True。注意 InTopK 和 TopK 的操作是不同的。如果多个类有相同的预测值并且跨过了top-k 的边界,所有这些类都被认为是在 top k 中。 返回值: bool类型的Tensor。计算预测的前k个值作为一个bool Tensor 利用tf.cast()可以将布尔变量转换成数值变量,如[True, False, True, True]转换为[1, 0, 1, 1]

    一旦图表构建完毕,就通过fully_connected_feed.py文件中的用户代码进行循环地迭代式训练和评估。 with tf.Graph().as_default(): # Generate placeholders for the images and labels. images_placeholder, labels_placeholder = placeholder_inputs( FLAGS.batch_size) # Build a Graph that computes predictions from the inference model. logits = mnist.inference(images_placeholder, FLAGS.hidden1, FLAGS.hidden2) …… …… ……

    with这个命令表明所有已经构建的操作都要与默认的tf.Graph全局实例关联起来。

    with tf.Graph().as_default():的作用: 返回一个使得这个图成为默认图的上下文管理器(context manager)。如果你想在同一个任务里面创造多个图,那么你应该用这个方法。 为了方便,要是你不显式创建一个新的图,一个全局的默认的图会被提供,全部的操作都会被添加到这个默认的图里面。 使用with关键字调用这个函数用来指定在这个程序块内的操作应该被添加到这个新的图里面。 默认的图是当前线程的属性,如果你创建了一个新的线程而且想在这个新线程中使用默认的图,你必须显式在这个线程函数中添加一个with g.as_default():

    保存检查点(checkpoint)

    为了得到可以用来后续恢复模型以进一步训练或评估的检查点文件(checkpoint file),我们实例化一个tf.train.Saver。 saver = tf.train.Saver() 在训练循环中,将定期调用saver.save()方法,向训练文件夹中写入包含了当前所有可训练变量值得检查点文件。 saver.save(sess, FLAGS.train_dir, global_step=step) 这样,我们以后就可以使用saver.restore()方法,重载模型的参数,继续训练。 saver.restore(sess, FLAGS.train_dir)

    转载请注明原文地址: https://ju.6miu.com/read-19853.html

    最新回复(0)