TensorFlow 入门教程

本文介绍了TensorFlow的基础概念,包括张量、计算图、会话等,并详细讲解了常量、变量、占位符的使用方法及损失函数的概念。通过实例演示了如何使用TensorFlow进行线性回归分析。

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

TensorsTensorFlow的数据中央控制单元是tensor(张量),一个tensor由一系列的原始值组成,这些值被形成一个任意维数的数组。

The Computational Graph 计算图

TensorFlow核心程序由两个部分组成:

  • Building the computational graph 构建计算图
  • Running the computational graph 运行计算图

节点与会话

TensorFlow 是图计算,op为计算的节点,运行时需要用tf.session来执行graph

import tensorflow as tf

node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)# also tf.float32 implicitly
print(node1, node2)

结果:

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0",shape=(), dtype=float32)

要想得到答应结果,需要调用session会话来运行:

sess = t f.Session()
print(sess.run([node1, node2])

node3 = tf.add(node1, node2)
print("node3:", node3)
print("sess.run(node3):", sess.run(node3))

结果:

node3:Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3):7.0

TensorFlow提供一个统一的调用称之为TensorBoard,它能展示一个计算图的图片;如下面这个截图就展示了这个计算图
在这里插入图片描述

TensorFlow中的数据变量

  • constant:常量,当被调用时常量被初始化,其值是不可以改变的

  • variable:变量,每次需要使用sess.run(tf.golbal_variables_initializer())来初始化变量,可以用tf.assign来改变这个值

  • placeholder: 可以参数化的接收外部的输入,通过feed_dict来传递参数

  1. Constant
    常量,当被调用时常量被初始化,其值是不可以改变的

  2. Variable
    变量,每次需要使用sess.run(tf.golbal_variables_initializer())来初始化变量,可以用tf.assign来改变这个值

W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b

'''初始化variable'''
init = tf.global_variables_initializer()
sess.run(init)

要实现初始化所有全局变量的TensorFlow子图的的处理是很重要的,直到我们调用sess.run,这些变量都是未被初始化的。
既然x是一个占位符,我们就可以同时地对多个x的值进行求值linear_model,例如:

print(sess.run(linear_model, {x: [1,2,3,4]}))

# 输出为: [0.  0.30000001  0.60000002  0.90000004]
  1. Placeholder占位符
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # + provides a shortcut for tf.add(a, b)

print(sess.run(adder_node, {a:3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2,4]}))

结果:

7.5
[3.  7.]

Loss function 损失函数 或 cost function

  • 损失函数是模型输出和观测结果间概率分布差异的量化
  • 均方误差损失最为常用,平方避免了真负值低消,平方关系又放大了较大误差与较小误差间的差距(对较大误差惩罚力度更大,二队较小误差更为容忍)
  • 在最小二乘法中,它的思想是使得各个训练点到最优拟合线的距离最小(平方和最小),其表达式为
    最小二乘法
  1. 我们将会使用一个标准的损失模式来线性回归,它的增量平方和就是当前模型与提供的数据之间的损失
    ,linear_model - y创建一个向量,其中每个元素都是对应的示例错误增量。这个错误的方差我们称为tf.square。然后
    ,我们合计所有的错误方差用以创建一个标量,用tf.reduce_sum抽象出所有示例的错误
y = tf.placeholder(tf.float32)
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
输出的结果为
23.66
  1. 我们分配一个值给W和b(得到一个完美的值是-1和1)来手动改进这一点,一个变量被初始化一个值会调用tf.Variable,
    但是可以用tf.assign来改变这个值,例如:fixW = tf.assign(W, [-1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
最终打印的结果是:
0.0
  1. tf.train APITessorFlow提供optimizers(优化器),它能慢慢改变每一个变量以最小化损失函数,最简单的优化器是
    gradient descent(梯度下降),它根据变量派生出损失的大小,来修改每个变量。通常手工计算变量符号是乏味且容易出错的,
    因此,TensorFlow使用函数tf.gradients给这个模型一个描述,从而能自动地提供衍生品,简而言之,优化器通常会为你做这个。例如:
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init)# reset values to incorrect defaults.
for iin range(1000):
   sess.run(train, {x: [1,2,3,4], y: [0, -1, -2, -3]})
 
print(sess.run([W, b]))
输出结果为
[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

参考:TensorFlow 完整的TensorFlow入门教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值