TensorFlow 一些概念

惊奇的发现github上竟然有这么好的东西,Hvass-Labs/TensorFlow-Tutorials, 对应01_Simple_Linear_Model.ipynb,也不知道谷歌这么赔下去,会不会砍掉这个服务。

Placeholder

传入值

Placeholder variables serve as the input to the graph that we may change each time we execute the graph.

placeholder 是 Tensorflow 中的占位符,暂时储存变量。

Tensorflow 如果想要从外部传入data, 那就需要用到 tf.placeholder()。

1
img_size_flat = img_size * img_size
  • x
    x = tf.placeholder(tf.float32, [None, img_size_flat])
    The data-type is set to float32 and the shape is set to [None, img_size_flat]
    None 意味着: 数值类型为float32, tensor可能有着无穷个图, 每个图的大小是 img_size_flat。

  • y_true
    y_true = tf.placeholder(tf.float32, [None, num_classes])

刚才的x表示的是图,这边的y_true表示的是 正确的标签,纬度是num_classes,这里指的是 10维, 其实也就是 one-hot编码。

  • y_true_cls
    y_true_cls = tf.placeholder(tf.int64, [None])

这里y_true_cls 就是把y_true进一步处理,将one-hot编码,换成易见的真实值。

接下来, 传值的工作交给了 sess.run() , 需要传入的值放在了feed_dict={} 并一一对应每一个 input. placeholderfeed_dict={} 是绑定在一起出现的。

比如这个样子

1
2
3
4
5
6
7
8
9
feed_dict_test = {x: data.test.images,
y_true: data.test.labels,
y_true_cls: data.test.cls}
def print_accuracy():
# Use TensorFlow to compute the accuracy.
acc = session.run(accuracy, feed_dict=feed_dict_test)

# Print the accuracy.
print("Accuracy on test-set: {0:.1%}".format(acc))

Variables

在 Tensorflow 中,定义了某字符串是变量,它才是变量,这一点是与 Python 所不同的。

定义语法: state = tf.Variable()

  • weights
    1
    weights = tf.Variable(tf.zeros([img_size_flat, num_classes]))
    第一个必须初始化的变量是 weights 必须以 0 初始化,形状为 [img_size_flat, num_classes], 因此它是一个 2-维 张量(or matrix) ,拥有img_size_flat 行 和 num_classes 列。
  • biases
    1
    biases = tf.Variable(tf.zeros([num_classes]))
    biases 是 长度为num_classes的一维向量

线性回归

1
logits = tf.matmul(x, weights) + biases

第一个模型应该就是最简单的 线性回归模型
这里简单的回顾一下

维度关系

x : [num_images, img_size_flat]
weights : [img_size_flat, num_classes],
result = x * weights —> [num_images, num_classes]

logits 是一个有num_imagesnum_classes列的矩阵, 那么第i行,第j列的意思就是预计第$i$’输入图像 是第$j$’th类型的可能性.

softmax argmax

  • 正则化
    预测可能会很大或者很小,所以我们将其正则化,确保每一行和为1,每个元素在0和1之间。
1
y_pred = tf.nn.softmax(logits)
  • argmax
    预测向量中,最大的那个class作为结果
    1
    y_pred_cls = tf.argmax(y_pred, axis=1)

Cross entropy(交叉熵)

wiki交叉熵
交叉熵(Cross-Entropy)
tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵

交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。tensorflow中自带的函数可以轻松的实现交叉熵的计算。

作者

mmmwhy

发布于

2018-06-08

更新于

2022-10-08

许可协议

评论