Tensorflow教程(一)——教程模板说明

本文深入浅出地介绍了TensorFlow的基础教程,通过一个简单的线性模型示例,详细讲解了如何构建TensorFlow程序,包括x、y数组的构建,模型设置,损失函数与训练过程,以及如何启动图和执行循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇博客参考TensorFlow 官方文档中文版,对其进行进一步加深理解,博主也是刚刚入手TensorFlow,如果有什么不对的地方可以评论交流。

TensorFlow 总程序

这里边介绍了一个TensorFlow基础教程,我们可以看一下这个程序

import tensorflow as tf
import numpy as np

# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300

# 构造一个线性模型
# 
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# 初始化变量
init = tf.initialize_all_variables()

# 启动图 (graph)
sess = tf.Session()
sess.run(init)

# 拟合平面
for step in range(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print step, sess.run(W), sess.run(b)

# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]

这个是一个最基本的TensorFlow程序,基本就是求解等式
y = W 1 x 1 + W 2 x 2 + b y = {W_1}{x_1}+{W_2}{x_2} + b y=W1x1+W2x2+b
该程序的主要任务就是:已知 y y y x 1 x_1 x1 x 2 x_2 x2 一些数据,求解 W 1 {W_1} W1 W 2 {W_2} W2 b b b数值大小。

构建 x、y 数组
# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300

程序借助NumPy数据库对 x x x产生一个随机的2*100的数组,接着利用相应的乘法,使每一个 x x x数据都会产生一个 y y y数据。其中[0.100,0.200]就是我们假设的 W 1 、 W 2 W_1、W_2 W1W2, 0.300为 b b b

构建TensorFlow模型
# 构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

在上边程序中会构建一个TensorFlow变量,一个为 b b b,另一个为 W W W
b b b 的创建直接借助tf.zeros()函数,创建一个 1 ∗ 1 1*1 11 的 0 数组。
W W W 的创建使用tf.random_uniform()函数,会产生一个 1 ∗ 2 1*2 12的数组,最小值为-1.0(可以包括)、最大值为1.0(不包括)。
直接将 b b b W W W 打印可以看到下边的信息,其中包括变量名、大小与类型。

<tf.Variable 'Variable:0' shape=(1,) dtype=float32_ref>
<tf.Variable 'Variable_1:0' shape=(1, 2) dtype=float32_ref>
设置损失函数、操作、以及训练
# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

在上边的程序中首先设置损失函数loss,它是借助tf.square()函数计算真实值与计算值之间的方差,接着使用tf.reduce_mean()函数计算各个数值的平均值。

使用tf.train.GradientDescentOptimizer接口使用GradientDescentOptimizer自适应学习率来自动调节训练过程中学习速率。

train = optimizer.minimize(loss)然后定义训练为使用GradientDescentOptimizer方法来使得损失函数最小的操作。

初始化变量
# 初始化变量
init = tf.initialize_all_variables()

使用tf.initialize_all_variables()函数将所有的函数进行初始化,就是将我们之前设定的 b b b W W W 进行初始化。

启动图
# 启动图 (graph)
sess = tf.Session()
sess.run(init)

图 (graph)是TensorFlow中一个很重要的概念,TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op。上边的程序就是将TensorFlow执行启动图的操作。

run(fetches, feed_dict=None, options=None, run_metadata=None)

run()运行fetches中的操作节点并求其,fetches参数可以是单个图元素(single graph element),也可以是任意嵌套的列表list,元组tuple,名称元组namedtuple,字典dict或包含图元素的OrderedDict。是将 ‘ feed_dict ’ 中的值替换为相应的输入值,通过运行必要的图形片段(necessary graph fragment)来执行每一个 ‘ Operation ’ 并评估 ‘ fetches ’ 中的每一个张量(evaluate every Tensor in fetches

执行循环
# 拟合平面
for step in range(0, 201):
    sess.run(train)
    if step % 20 == 0:
        print step, sess.run(W), sess.run(b)

在上边程序中我们开始执行循环,从for()函数中能够看出循环执行200次,每次循环都会启动图的训练操作( sess.run(train)),而且在每20次循环过程中输出一次优化以后的 b b b W W W 的数值。

0 [[0.76612234 0.3431572 ]] [0.66802967]
20 [[0.8309442  0.18778986]] [0.34280622]
40 [[0.8805279 0.1933982]] [0.313826]
60 [[0.8942932  0.19743352]] [0.30440328]
80 [[0.8982843  0.19910687]] [0.30139136]
100 [[0.8994758  0.19970436]] [0.30043778]
120 [[0.8998383  0.19990459]] [0.30013737]
140 [[0.89994985 0.19996963]] [0.30004302]
160 [[0.8999844  0.19999044]] [0.30001345]
180 [[0.89999515 0.199997  ]] [0.3000042]

从上边的运行结果中能够看出 b b b W W W再不断朝着我们期望的数值进行变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值