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 tofloat32
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. placeholder
与 feed_dict={}
是绑定在一起出现的。
比如这个样子1
2
3
4
5
6
7
8
9feed_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
列。
- biasesbiases 是 长度为
1
biases = tf.Variable(tf.zeros([num_classes]))
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_images
行num_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中自带的函数可以轻松的实现交叉熵的计算。
TensorFlow 一些概念