世界杯预选赛预测

前言:开始学习TensorFlow框架,以下概念表述均来自网络,仅供自己理解和学习。

1.Tensorflow 介绍

TensorFlow教程:TensorFlow快速入门教程(非常详细)

TensorFlow模型的理解

1.1Tensorflow的安装

网上有很多的Tensorflow安装教程,我也写了一篇《win7 64位 安装tensorflow》,链接地址:https://blog.csdn.net/Logintern09/article/details/105825437

如果已安装了 TensorFlow,则可以调用 pip install --upgrade tensorflow 进行升级。

1.2Tensorflow的特征

TensorFlow入门极简教程(一),链接地址:https://www.jianshu.com/p/4665d6803bcf

上面的文章告诉我:TensorFlow 不是一个严格的“神经网络”库。只要你可以将你的计算表示为一个数据流图,你就可以使用Tensorflow。在Google,科学家用Tensorflow尝试新的算法,产品团队则用Tensorflow来训练和使用计算模型,并直接提供给在线用户。使用Tensorflow可以让应用型研究者将想法迅速运用到产品中,也可以让学术性研究者更直接地彼此分享代码,从而提高科研产出率。

1.3TensorFlow中最重要的几个基本概念

TensorFlow框架介绍,链接地址:https://www.cnblogs.com/kongweisi/p/11038395.html

简单地说,tf框架中,代码的执行都要在会话中进行,而这里所说的图往往指的都是默认图,不需要我们去指定。因此我们只要开启会话,(在默认图中)执行代码即可,代码所执行的操作,我们称之op,即节点。

1.3.1 Graph图

计算图模型,链接地址:https://zhuanlan.zhihu.com/p/35226768

Tensorflow是一种计算图模型,即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建和图的执行两个阶段。图的构建阶段也称为图的定义阶段,该过程会在图模型中定义所需的运算,每次运算的的结果以及原始的输入数据都可称为一个节点(operation ,缩写为op)。

图包含了一组tf.Operation代表计算单元的对象和tf.Tensor代表计算单元之间流动的数据。

为什么Tensorflow要使用图模型?图模型有什么优势呢?

首先,图模型的最大好处是节约系统开销,提高资源的利用率,可以更加高效的进行运算。因为我们在图的执行阶段,只需要运行我们需要的op,这样就大大的提高了资源的利用率;其次,这种结构有利于我们提取中间某些节点的结果,方便以后利用中间的节点去进行其它运算;还有就是这种结构对分布式运算更加友好,运算的过程可以分配给多个CPU或是GPU同时进行,提高运算效率;最后,因为图模型把运算分解成了很多个子环节,所以这种结构也让我们的求导变得更加方便。

Tensorflow框架实现中的“三”种图,连接地址:https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念。从前端(python)描述神经网络的结构,到后端在多机和分布式系统上部署,到底层 Device(CPU、GPU、TPU)上运行,都是基于图来完成。

1.3.2 Tensor张量

节点之间的边就是张量,是一个 n 维数组, 类型为tf.Tensor。Tensor具有以下两个重要的属性:(1)type:数据类型;(2)shape:形状(阶)。

1.3.3 Session会话

TensorFlow框架之会话,链接地址:https://www.cnblogs.com/kongweisi/p/11038550.html

应用sess.run或者eval运行图程序并获取张量值 应用feed_dict机制实现运行时填充数据 Placeholder:占位符。这是一个在定义时不需要赋值,但在使用之前必须赋值(feed)的变量,通常用作训练数据。

在运行图时,需要为所有的变量和占位符赋值,否则就会报错。会话的主要任务是在图运算时分配CPU或GPU。tf.Session 对象使用分布式 TensorFlow 运行时提供对本地计算机中的设备和远程设备的访问权限。

1.3.4 Variable变量

TensorFlow常量、变量和占位符详解

Variable:变量,它和占位符的不同是它在定义时需要赋值,而且它的数值是可以在图的计算过程中随时改变的。因此,占位符通常用作图的输入(即训练数据),而变量用作图中可以被“训练”或“学习”的那些tensor,例如y=ax+b中的a和b。

2.Tensorflow 使用

我们所说的“训练”,也就是不停的计算一个图,获得图的计算结果,再根据结果的值调整节点变量的值,然后根据新的变量的值再重新计算图,如此重复,直到结果令人满意(小于某个阈值),或跑到了一个无穷大/小(这说明图的变量初始值设置的有问题),或者结果基本不变了为止。

TensorFlow实现反向传播算法详解

2.1常用函数

Tensorflow常用函数使用说明及实例简记

Tensorflow一些常用基本概念与函数

Tensorflow常用函数

2.1.1 tensor构造函数

2.1.2 比较函数

原文:对于tensor特定值进行逻辑判断和操作

#判断每一个数是否大于threshold

greater = tf.greater(x, threshold)

#判断每一个数是否小于threshold

less = tf.less(x,threshold)

#判断每一个数是否大于等于threshold

greater_equal=tf.greater_equal(x, threshold)

#判断每一个数是否小于等于threshold

less_equal=tf.less_equal(x, threshold)

#判断每一个数是否等于threshold

equal = tf.equal(x, threshold)

#判断每一个数是否不等于threshold

not_equal=tf.not_equal(x, threshold)

这些比较函数会输出bool类型的tensor,那么就可以配合tf.where来使用

tf.where(

condition,

x=None,

y=None,

name=None

x中为true的元素值不变,false的元素值替换为y中对应位置的值,因此,x,y是同一shape的 实践小栗子:

#将小于等于threshold的值替换为0

greater = tf.greater(x, threshold)

output = tf.where(greater,x,tf.subtract(x,x))

with tf.Session() as sess:

feed_dict={x:[1,2,3,4,5],threshold:3}

print(sess.run(output,feed_dict=feed_dict))

output: [0 0 0 4 5]

tf.gather_nd允许在多维上进行索引,得到新的向量 比如,想要获得大于0的元素的集合

idxs = tf.where(x>0)

output = tf.gather_nd(idxs)

2.1.3 数据类型转换

原文:tf.cast()数据类型转换

tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。 int32转换为float32:

import tensorflow as tf

t1 = tf.Variable([1,2,3,4,5])

t2 = tf.cast(t1,dtype=tf.float32)

print 't1: {}'.format(t1)

print 't2: {}'.format(t2)

with tf.Session() as sess:

sess.run(tf.global_variables_initializer())

sess.run(t2)

print t2.eval()

输出:

t1:

t2: Tensor("Cast:0", shape=(5,), dtype=float32)

[ 1. 2. 3. 4. 5.]

2.1.4 序列比较与索引提取

2.2从模型文件中加载训练好的模型

Tensorflow中保存模型时生成的各种文件区别和作用

tensorflow模型的格式通常支持多种,主要有CheckPoint(.ckpt)、GraphDef(.pb)、SavedModel。

ckpt存储参数值

pbtxt存储网络图

pb既存储参数值又存储网络图

graph.pbtxt: 这其实是一个文本文件,保存了模型的结构信息,部分信息如下所示:

node_def {

name: "FixedLengthRecordDataset/input_pipeline_task10/buffer_size"

op: "Const"

device: "/job:worker/task:10/device:CPU:0"

attr {

key: "dtype"

value {

type: DT_INT64

}

}

attr {

key: "value"

value {

tensor {

dtype: DT_INT64

tensor_shape {

}

int64_val: 262144

}

}

}

}

node_def {

name: "FixedLengthRecordDataset"

op: "FixedLengthRecordDataset"

input: "FixedLengthRecordDataset/input_pipeline_task10/filenames:output:0"

input: "FixedLengthRecordDataset/input_pipeline_task10/header_bytes:output:0"

input: "FixedLengthRecordDataset/input_pipeline_task10/record_bytes:output:0"

input: "FixedLengthRecordDataset/input_pipeline_task10/footer_bytes:output:0"

input: "FixedLengthRecordDataset/input_pipeline_task10/buffer_size:output:0"

device: "/job:worker/task:10/device:CPU:0"

}

...