TensorFlow官方教程学习笔记(五)——前馈神经网络

教程地址:TensorFlow官方文档中文版

本文主要是在TensorFlow上搭建一个前馈神经网络(feed-forward neural network)来对TensorFlow的运作方式进行简单介绍。

代码在\examples\tutorials\mnist\中,主要使用两个文件:mnist.py和fully_connected_feed.py。

先看mnist.py,mnist.py的作用是构建一个完全连接的前馈网络,主要包含四个部分:inference(),loss()、trainging()以及evaluation()。

inference(),为满足促使神经网络向前反馈并做出预测的要求来构建模型,看代码:

def inference(images, hidden1_units, hidden2_units):
  """Build the MNIST model up to where it may be used for inference.

  Args:
    images: Images placeholder, from inputs().
    hidden1_units: Size of the first hidden layer.
    hidden2_units: Size of the second hidden layer.

  Returns:
    softmax_linear: Output tensor with the computed logits.
  """
  # Hidden 1
  with tf.name_scope('hidden1'):
    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 = tf.nn.relu(tf.matmul(images, weights) + biases)
  # Hidden 2
  with tf.name_scope('hidden2'):
    weights = tf.Variable(
        tf.truncated_normal([hidden1_units, hidden2_units],
                            stddev=1.0 / math.sqrt(float(hidden1_units))),
        name='weights')
    biases = tf.Variable(tf.zeros([hidden2_units]),
                         name='biases')
    hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases)
  # Linear
  with tf.name_scope('softmax_linear'):
    weights = tf.Variable(
        tf.truncated_normal([hidden2_units, NUM_CLASSES],
                            stddev=1.0 / math.sqrt(float(hidden2_units))),
        name='weights')
    biases = tf.Variable(tf.zeros([NUM_CLASSES]),
                         name='biases')
    logits = tf.matmul(hidden2, weights) + biases
  return logits

使用tf.name_scope()定义了名为“hidden1”、“hidden2”和“softmax_linear”的三个变量空间,即作用域 ,作用域中创建的元素将会带上scope名称的前缀,那这和我们之前文章中的tf.variable_scope()有什么区别呢,在网上你可以搜到很多关于这两者的区别,但是我认为,在tf.name_scope()中使用tf.Variable()来创建变量,tf.variable_scope()中使用tf.get_variable()来创建变量,而tf.Variable()和tf.get_variable()的区别就是,使用tf.get_variable()创建的变量可以用来共享,而tf.Variable()不行。

在初始化时,对weight的初始化使用标准方差为输入维度开根号分之一的正太分布,biase的初始化使用常量0,在“hidden1”和“hidden2”中使用ReLU的激活函数,“softmax_linear”是输出维度和分类的总数相同,在这里为10 ,它的输出也就与分类情况有关。


loss(),定义了模型的损失函数:

def loss(logits, labels):
  """Calculates the loss from the logits and the labels.

  Args:
    logits: Logits tensor, float - [batch_size, NUM_CLASSES].
    labels: Labels tensor, int32 - [batch_size].

  Returns:
    loss: Loss tensor of type float.
  """
  labels = tf.to_int64(labels)
  cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
      logits, labels, name='xentropy')
  loss = tf.reduce_mean(cross_entropy, name='xentropy_mean')
  return loss<
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值