瞎聊深度学习——TensorFlow的基本应用

本文深入解析了TensorFlow的关键概念,包括图(graph)、会话(Session)、张量(tensor)、变量(Variable)、feed和fetch。通过实例演示了如何构建和运行计算图,以及在GPU上执行操作。此外,还介绍了变量的使用和计数器实现,以及feed和fetch的灵活运用。

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

首先来说一下TensorFlow的几个关键词:

图(graph)、会话、张量(tensor)、变量(Variable)、feed、fetch。

说一下上面关键词的作用:

  • 用图(graph)来表示计算任务
  • 在被称之为会话(Session)的上下文(context)中执行图
  • 使用tensor表示数据
  • 通过变量(Variable)维护状态
  • 用feed和fetch可以为任意操作赋值或者从中获取数据

张量(tensor)是什么?

我们可以把张量认作是基于向量和矩阵的推广,举几个实例来表示一下N阶标量都代表什么:

数学实例实例表示
0常数(只有大小)s = 123
1向量(有大小和方向)v = [1.2,1.3,1.4]
2矩阵m = [[1,2,3],[4,5,6]]
3三阶张量t = [[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]
nn阶张量以此类推......

Tensorflow中用图来表示计算任务,图中的每个节点我们叫它OP,并且每一个OP都可以获得0个以上的tensor,然后执行计算后产生0个或多个tensor;而在计算图的时候为了能够进行计算,必须在会话(session)中启动图,session会将图上的OP分配到CPU、GPU等设备上(我们无需具体的定义使用CPU还是GPU,如果检测到GPU,TensorFlow会用检测到的第一个GPU来执行),同时提供执行OP的方法,执行完成后再将OP返回。

下面用具体的操作来讲解一下每一步的实际应用。

构建并启动图

先上一段代码看一下

import tensorflow as tf

# 此处用来定义OP中的张量
matrix1 = tf.constant([[1, 2, 3]])
matrix2 = tf.constant([[4], [5], [6]])

# 矩阵相乘(执行OP的方法)
Matrix = tf.matmul(matrix1, matrix2)

# 启动默认图(计算图时一定要先启动默认图)
sess = tf.Session()

# 想要执行我们所定义的执行OP的方法,要调用sess中的run函数,返回的是一个numpy `ndarray` 对象
re = sess.run(Matrix)
# 会话完成后要close以释放资源
sess.close()
print(re)

运行结果

说明:

这是一段简单的使用TensorFlow计算常量矩阵相乘的代码,在TensorFlow中我们可以使用constant来创建常量OP,需要注意的是在执行OP的时候一定要先启动默认图:session = tf.Session() ,然后使用session.run()执行即可,使用session的run函数的时候就像是我们在使用一种编译器的时候进行编译执行一样。

另一种执行方法:

with tf.Session() as sess:
    re = sess.run(Matrix)
    print(re)

这样做的好处是我们无需再使用close释放资源,在with执行完后会自动进行close操作。

GPU

如果电脑上右多个可用的GPU我们可以用如下的语句来选择GPU

with tf.device("/gpu:1"):
    ......

可以使用:

"/cpu:0" 表示使用第一个cpu

"/gpu:0" 表示使用第一个gpu

以此类推

变量(variable)

变量用来维护图执行过程中的状态信息,例如在神经网络总用于保存和更新神经网络上的参数。

举一个常见的例子,用变量来实现一个计数器,通过assign函数不断的给变量count赋计数后的值即可。

import tensorflow as tf

count = tf.Variable(0)
add = tf.constant(1)
add_one = tf.add(count, add)
# assign函数用于复制操作
update = tf.assign(count, add_one)
# init用于在session中让变量初始化
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for i in range(5):
        result = sess.run(update)
        print(result)

运行结果如下:

Feed和Fetch

Feed主要用于临时替换一个操作的输出结果,我们可以提供feed数据作为run()函数调用的参数,feed只在方法内有效,结束后feed就会消失,常见的一种形式是我们用tf.placeholder()来创建占位符,方便于feed在run()内的赋值。举例如下:

import tensorflow as tf

matrix1 = tf.placeholder(dtype=tf.float32)
matrix2 = tf.placeholder(dtype=tf.float32)

Matrix = tf.multiply(matrix1,matrix2)
with tf.Session() as sess:
    re = sess.run([Matrix],feed_dict={matrix1: [1.2], matrix2: [2.2]})
    print(re)

结果:

要注意一下multiply实现的是元素级别的相乘,两个相乘的数一定要有相同的数据类型,而matmul是矩阵相乘。

在之前的run()操作中,我们每次只返回了一个OP操作的值,Fetch一个可以返回多个OP值得属性。

import tensorflow as tf

num1 = tf.constant(3)
num2 = tf.constant(4)
num3 = tf.constant(5)

count1 = tf.add(num1, num2)
count2 = tf.add(count1, num3)
with tf.Session() as sess:
    re = sess.run([count1, count2])
    print(re)

结果如下:

以上就是对TensorFlow的一些基本操作和性质的解释和示例,后续还会更深一步的学习tf的其他用法。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二哥不像程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值