tensorflow中的概念的基础使用

本文详细介绍了TensorFlow中会话(Session)的使用方法,包括创建、运行和关闭会话,以及如何在不同图(Graph)间切换。同时,深入探讨了张量的基本属性、生成方式、类型转换、占位符的使用、形状修改和数学运算等关键概念。

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

Session使用

#创建会话,使用默认图
tf.Session()
#运行
session.run(fetches,feed_dict=None)
#参数:fetches图中的单个操作,或多个操作的列表
#     feed_dict运行传入的参数构成的字典,可以覆盖之前的值

#关闭,使用with语句打开时不需要关闭
session.close()

Graph图和Session

import tensorflow as tf
import os

#调整警告级别,低于这个级别的警告不会报出来
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'

#定义常量,这是一组操作
a = tf.constant(5.0)
b = tf.constant(1.0)
c = tf.add(a,b)

#获取缺省默认图
graph = tf.get_default_graph()
print(graph)

#用session()来执行默认图
with tf.Session() as sess:
	print(sess.run(c))
	#打印出a,b,c,sess这些张量,操作,session中的grap
	print(a.graph)	
	print(b.graph)
	print(c.graph)
	print(sess.graph)
	#发现在默认情况下,他们使用的图和上面获取的默认图是同一个

#创建一个新的图对象
graph2 = tf.Graph()
#print(graph2)

with graph2.as_default():	#将graph2设置为缺省默认图
	#在graph2下定义操作op
	d = tf.constant(1111.0)	

#用session在graph2上执行op
with tf.Session(graph=graph2) as sess:
	print(sess.run(d))
	#在graph2中不能执行a,b,c操作,因为他们不属于graph2
Session常见的错误及原因

调用run()方法时,可能会出现的错误及原因

  1. RuntimeError:Session处于无效(如关闭)
  2. TypeError:fetches或feed_dict的键是不合适的值
  3. ValueError:fetches或feed_dict的键无效或引用的值不存在

张量

张量属性

import tensorflow as tf

a = tf.constant(5.0)
with tf.Session() as sess:
	print(sess.run(a))
	#打印出张量 a的属性
	print('name:',a.name)	#名称:系统自动分配
	print('dtype:',a.dtype)	#元素类型
	print('shape:',a.shape)	#维度:0维:()
	print('op:',a.op)	#操作名:由张量的各个属性组成
	print('graph:',a.graph)	#所属图:打印出图对象的地址
张量生成
import tensorflow as tf

#生成值全为0的张量
t_zeros = tf.zeros(shape=[2,3],	#形状
		   dtype='float32')	#元素类型

#生成值全为1的张量
t_ones = tf.ones(shpae=[2,3],dtype='float32')

#生成正太分布的张量
t_nd = tf.random_normal(shape=[10],	#1维:1行10元素
			mean1.7,	#均值,不写有默认值
			stddev=0.2,	#标准差,不写有默认值
			dtype='float32')

#生成和指定张量shape相同的张量
t_zeros_like = tf.zeros_like(t_nd)
			
with tf.Session() as sess:
	print(t_zeros.eval())	#eval()表示在sess执行op,效果和Session.run()是一样的
	print(t_ones.eval())
	print(t_nd.eval()
	print(t_zeros_like.eval())
张量类型转换
import tensorflow as tf

t_ones = tf.ones(shape=[2,3],dtype='int32')

with tf.Session() as sess:
	#将int型张量 t_ones 转为float32
	print(tf.cast(t_ones,tf.float32).eval()
占位符

不确定张量内容时,可使用占位符先占个位置,然后执行计算,通过参数传入具体数据执行计算(通过feed_dict参数指定)
占位符在我们训练时喂入样本数据时经常用到

import tensorflow as tf

#d定义占位符plhd1
plhd1 = tf.placeholder(tf.float32,	#类型
			[2,3])		#shape

#定义占位符plhd2
plhd2 = tf.placeholder(tf.float32,
			[None,3]	#N行3列

with tf.Session() as sess:
	#给出之前使用占位符的张量
	d = [[1,2,3],
	     [4,5,6]]
	#将shape作为参数传入
	params = {plhd1: d}
	print(sess.run(plhd1,	#op
		       feed_dict=params))

	print(sess.run(plhd2,
		       feed_dict={plhd2:d}))
修改张量形状

静态形状:张量在创建时的初始形状,一旦固定则不能修改,静态形状不能跨阶修改形状(2阶的只能转为2阶,3阶的只能转为3阶)
动态形状:张量在执行时修改形状,可以跨阶修改(注意元素个数要匹配)

import tensorflowj as tf

#定义占位符
plhd = tf.placeholder(tf.float32,[None,3])

#修改静态形状
plhd.set_shape([4,3])	#修改静态形状,静态形状修改一次就固定,之后不能修改
print(plhd)

#动态形状:创建一个新张量,并设置形状
#这也是一个操作
new_plhd = tf.reshape(plhd,[3,4])
print(new_plhd)

#这也是一个操作,和python不一样,这里的new_plhd不会将上一个操作的new_plhd覆盖
new_plhd = tf.reshape(plhd,[2,6])
print(new_plhd)

with tf.Session() as sess:
	pass
张量数学操作
import tensorflow as tf

x = tf.constant([[1,2],[3,4]],
		dtype=tf.float32)
y = tf.constant([[4,3],[3,2]],
		dtype=tf.float32)

#张量相加,对应位置值相加
x_add_y = tf.add(a,b)

#张量相乘,行行遍历相乘求和
x_mul_y = tf.matmul(x,y)

#求张量的自然对数,对每一个元素求自然对数
x_log = tf.log(x)

#计算张量指定维度上的和,参数x为张量,参数aixs为指定的维度:0(列求和)/1(行求和)
x_sum = tf.reduce_mean(x,aixs=[1],keep_dims=False)	

#计算张量片段的和,把具有相同值的片段的值累加起来
data = tf.constant([1,2,3,4,5,6,7,8,9,10],	#data根据下面的seg_idx分片段求和,0对应位置求和、1对应位置求和、2对应位置上的值求和
			dtypy=int.float32)
seg_idx = tf.constant([0,0,0,1,1,2,2,2,2,2],
			dtype=tf.int32)
			
seg_data = tf.segment_sum(data,	#原始张量
			  seg_idx)	#分段依据

with tf.Session() as sess:
	print(x_add_y.eval())
	print(x_mul_y.eval())	#[[10. 7.] [24. 17.]]
	print(x_log.eval())
	print(x_sum.eval())
	print(seg_data.eval())

变量

变量是一种张量,他的值是张量,能够持久保存(存到文件中)(普通张量不行)(模型和参数需要存到文件中保存)

import tensorflow as tf

a = tf.constant([1,2,3,4,5])	#张量

#变量
var = tf.Variable(tf.random_normal([2,3]),	#变量的初始值
		  name='var1')			#变量名称
		  
#初始化op,定义变量必须初始化
init_op = tf.global_variables_initializer()

with tf.Session() as sess:
	#执行初始化全局变量
	sess.run(init_op)
	
	print(sess.run([a,var]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值