TensorFlow学习——Getting Started With TensoFlow

本博文是根据TensorFlow最新(r1.0)官方文档编写的,自己对上面的教程整理了一下,根据自己的理解写的。
本人看过TensrFlow(0.5)的官方文档。因此,我不会把全部教程都写上来,主要写和之前不同的,或者我没看过的。


https://www.tensorflow.org/get_started/get_started

 

使用TensorFlow Python API 编程入门


TensorFlow Core指南

一、导入TensorFlow

典型的导入TensorFlow程序的做法如下:

 

运行这个,可以得到Python下的TensorFlow中的所有类、方法和符号。大多数的文档默认你已经执行了这个。

 

二、计算图 (Computational Graph)

TensorFlow Core程序是由两个分离的部分组成的:

1、构建计算图。

2、运行计算图。

一个计算图是一系列TensorFlow操作的点(nodes)。我们构建一个简单的计算图。每一个点需要零个或者更多的张量(tensor)作为输入,并且产生一个张量作为输出。


2.1 常量(Constant)

点的一种形式是常数。像所有TensorFlow常数,它不需要输入,而它会从内部输出一个值。我们可以创建两个点的张量node1node2,如下所示:

 

注意到,它输出的并不是3.04.0的值,而是对应的点张量,要通过开启会话,才能直接输出其值。这直接反映了TensorFlow的构建和计算是分离的。


2.2 会话

接下来的代码就是创建一个Session对象,调用它的run方法。只有这样,才能进行真正的运算。如下所示:

 

这时,我们就能得到了想象中的两个值。

 

我们可以通过联合多个张量(Tensors),构建更为复杂的运算。例如,我们可以进行点张量的相加,如下所示:

 

 

2.3 占位符(Placeholder)

有些时候,我们不会直接使用常量进行计算,而需要事先创建一个量去表示运算。这时,在TensorFlow中可以采用placeholders的方法。它的本质就是一个占位符,先用placeholder表示进行运算的表达,程序后面在进行“喂值”(feed_dict)。如下所示:

 

由上面操作可见,ab都没有固定的值,它们创建的目的只是为了表示相加这种运算。

如果程序后面需要用到这种运算,我们可以使用feed_dict进行喂值。

 

显然,不同的“喂值”,得出的结果可能也不同。

在基础上,我们可以进行更复杂的操作。我们可以对adder_node进行相乘操作。如下所示:

 

当然,要显示最终结果,需要进行回话和喂值。

 

2.4 变量(Variable)

机器学习中,我们构建模型,TensorFlow中模型有输入有输出,训练中参数会不断更新,这时,我们需要创建变量(Variable)TensorFlow中,Variable可以将训练参数添加到图中,声明变量时,一般需要声明变量的类型(如:tf.float32)和赋初值。如下所示:

 

这样,我们就成功地创建了变量。从上面例子,我们可以看出placeholderVariable的区别。当该量是通过训练更新的,我们可以通过Variable创建,当该量是作为模型的输入,我们可以通过placeholder创建。

当然,变量的启动不仅需要开启会话,还要在会话中进行初始化。

 

这样,变量才真正地被初始化。

 

2.5 基本模型的训练优化

初始化成功,我们给模型喂值,

 

其实,这里我们构建了一个很简单的线性模型。我们希望该模型能够进行训练优化,然而,我们没有设定训练集的期望值。因此,我们自定义期望值。

 

优化训练,我们采用最小二乘法。

代价函数为:cost(x) = sum(linear_model(x) - y)/number of trainset

 

我们得出了训练一次的代价值。通过观察训练数据(即xy的取值),我们可以发现,当W-1b1的时候,模型代价最小,为0

 

显然,-11是我们观察出来的最优解。我们怎么通过优化方法,最小化代价函数呢?答案:使用TensorFlow自带的优化函数api,进行大量的迭代和参数的更新,最小化代价。

 

通过1000次的迭代训练,最终得到了理想的参数值。


 三、整合

# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np

# Model paramters
W = tf.Variable([.3],tf.float32)
b = tf.Variable([1.],tf.float32)
# Model io
x = tf.placeholder(tf.float32)
linear_model = W*x+b
y = tf.placeholder(tf.float32)
# cost function
cost = tf.reduce_sum(tf.square(linear_model-y))
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(cost)
# trianing data
x_train = [1.,2.,3.,4.]
y_train = [0.,-1.,-2.,-3.]
# training loop
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for i in range(1000):
        sess.run(train,{x:x_train,y:y_train})
        if i%100==0:
            cc = sess.run(cost,{x:x_train,y:y_train})
            print("training step(%s), cost: %s"%(i,cc))

    # Evaluate training accuracy
    curr_W,curr_b,currr_cost = sess.run([W,b,cost],{x:x_train,y:y_train})
    print("W: %s,b: %s,cost: %s"%(curr_W,curr_b,currr_cost))


实验结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值