TensorFlow 一些概念
in Tensorflow with 0 comment

TensorFlow 一些概念

in Tensorflow with 0 comment
惊奇的发现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()。

img_size_flat = img_size * img_size

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 = tf.placeholder(tf.float32, [None, num_classes])

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

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

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

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

比如这个样子

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 = 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 = tf.Variable(tf.zeros([num_classes]))

biases 是 长度为num_classes的一维向量

线性回归

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之间。

y_pred = tf.nn.softmax(logits)

预测向量中,最大的那个class作为结果

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中自带的函数可以轻松的实现交叉熵的计算。
Responses

From now on, bravely dream and run toward that dream.
陕ICP备17001447号