Tensorflow 有监督学习

Submitted by Lizhe on Fri, 08/18/2017 - 09:20

有监督的学习在于

使用某个带标注信息的输入数据集合(其中的每个样本都标注了真是的或者期望的输出), 去训练一个推断模型,

该模型能够覆盖一个数据集, 并可对不存在于初始训练集合中的新样本的输出进行干预

这个推断模型实际上是一系列的数学运算, 运算使用的公式是固定的,但是参与运算的值 都是模型的参数, 在训练过程中会被不断更新, 以使模型能够学习,并对其输出进行调整

462

首先需要对模型参数进行初始化. 通常采用对参数随机赋值的方法, 但对于比较简单的模型,也可以将各个参数的初始值全部设置为0

读取训练数据(包括每个数据样本及其期望输出). 通常人们会在这些数据送入模型之前随机打乱样本的次序

在训练数据上执行推断模型. 这样, 在当前模型的参数配置下, 每个训练样本都会得到一个输出值

Tensorflow Summary

Submitted by Lizhe on Thu, 08/17/2017 - 17:27

直接上例子

import tensorflow as tf

data = tf.Variable(0, trainable=False)
increment_data = tf.assign_add(data, tf.constant(1))
tf.scalar_summary('increment_data', data)

sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)

summary_writer = tf.train.SummaryWriter('./my_graph', sess.graph)

Tensorflow Name Scope

Submitted by Lizhe on Thu, 08/17/2017 - 16:50

Name scope 是TensorFlow数据流图的核心构件.

当节点过多时, 我们需要一种机制可以有效的组织节点, 降低图的复杂性

Name scope可以帮助用户组织流程图

Name scope允许用户将Op划分到一些较大的, 可以命名的语句块中, 当使用TensorBoard加载数据流图时,

每个名称的作用域都将对其自己的Op进行封装, 从而得到更好的可视化效果

看下面的例子

Tensorflow Variable

Submitted by Lizhe on Thu, 08/17/2017 - 11:51

Tensor对象和Operation对象都是不可变的,如果需要可变对象需要使用Variable对象

a=tf.Variable(3, name="my_variable")

variable对象可以代替Tensor对象传入Tensorflow函数或Operation中使用

例如

add = tf.add(a, 5)

variable对象的初始值通常是0,1或者随机数填充的阶数较高的张量,不过可以使用辅助Op来初始化特定的值

tf.zeros()

Tensorflow placeholder

Submitted by Lizhe on Thu, 08/17/2017 - 10:45

tf.placeholder 可以创建一个占位符用来等待feed_dict为其提供数据

import tensorflow as tf
a=tf.placeholder(tf.float32)
b=tf.placeholder(tf.float32)
c=tf.add(a,b)

with tf.Session() as sess:
    print(sess.run(c,feed_dict={a:10,b:30}))
 

 

使用tf.placeholder() 时 dtype 参数是必须指定的, shape可选默认是None,接收任意类型

不能直接将placeholder的值(上面代码中的a和b) 传入session.run(), 这些值是无法进行计算的,直接传入run方法会触发一个异常

例如将上面例子中run方法的第一个参数改成a

Tensorflow Session

Submitted by Lizhe on Thu, 08/17/2017 - 09:53

tf.Session() 接收3个可选参数

target 该参数用于在分布式设置中指定连接不同的tf.train.Server实例, 一般来说默认是空字符串

graph 参数指定了将要在Session对象中加载的Session对象, 默认值是None, 表示使用当前默认的数据流

config 参数允许用户指定配置, 如cpu或gpu内核数

 

一旦创建了Session对象之后, 就可以使用session.run()方法来计算Tensor对象的输出

run方法接收一个参数fetches 以及 3个可选参数 feed_dict, options 和 run_metadata

fetches参数接收任意的数据流图元素 ( Operation 和 Tensor) , 如果是Tensor对象, run会输出一个NumPy数组, 如果是Operation则输出None

feed_dict参数用于覆盖数据流图中的Tensor对象的原始值, 它接收一个字典参数, key为要覆盖值的句柄, 值类型必需与原类型相同或者可以相互转换

下面的例子输出6 而不是 3

Tensorflow Graph

Submitted by Lizhe on Wed, 08/16/2017 - 18:08

要创建Graph对象需要使用下面的语句

g1 = tf.Graph()
g2 = tf.Graph()

然后使用来使用这个g1对象的上下文

with g1.as_default():

    ....

不过你可能会奇怪为什么之前我们没有创建过这个对象

当TensorFlow库被加载时, 它会自动创建一个Graph对象,并将其作为默认的数据流图

因此, 在Graph.as_default() 上下文管理器 (例如 g1.as_default())之外定义的任何Op和Tensor对象都会自动被放置在这个默认的Graph中

Tensorflow 张量

Submitted by Lizhe on Wed, 08/16/2017 - 16:09

张量是n维矩阵的抽象

简单来说, 1D张量也就是一个向量, 2D张量是一个矩阵

之前的例子中我们使用了两个参数, 分别是5和3

如果将两个参数合并成一个1D张量

import tensorflow as tf

sess = tf.Session()

a = tf.constant([5,3],name="user_input_2")
b = tf.reduce_prod(a, name="mul_op")
c = tf.reduce_sum(a, name="add_op")
d = tf.add(b,c, name="sum_op")
print(d)
print(sess.run(d))
writer = tf.train.SummaryWriter('./my_graph3',sess.graph)

Tensorflow 安装和简单入门

Submitted by Lizhe on Wed, 08/16/2017 - 14:12

Tensorflow的安装其实很简单

centos7自带了python2.7所以python的安装可以省略掉

yum install  python-pip python-devel

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

安装结束...

 

然后试试helloworld