TensorFlow编程基础


前言

简单记录一些TensorFlow1.x中的操作,主要记录TensorFlow2.x中张量的创建和运算。


一、TensorFlow1.x

(1)计算图:节点(操作)+边(关系),静态图
(2)节点:由属性操作,可与设备绑定,存在顺序关系(边)
(3)边:常规边(实线):数据依赖关系;特殊边(虚线):控制相关性

1.在2.x环境中运行1.x程序

import tensorflow.compat.v1 as tf
tf.disable_eager_execution()

2.定义计算图

a = tf.constant([[1,2],
                [3,4]], name = 'a')
b = tf.Variable([[5,6],
                [7,8]], name = 'b')
op = tf.add(a, b, name = 'op')

3.变量初始化

常量不需要初始化

init_op = b.initializer#单个变量
init_op = tf.global_variables_initializer()#所有变量

4.创建执行会话

(1)使用try、except捕捉异常,确保内存被释放

sess = tf.Session()
try:
    sess.run(init_op)
    result = sess.run(op)
except Exception as err:
    print(err)
finally:
    sess.close()

(2)使用上下文管理器,结束后释放资源

with tf.Session() as sess:
    sess.run(init_op)
    result = sess.run(op)

(3)指定默认会话

sess = tf.Session()
with sess.as_default():
    sess.run(init_op)
    result = op.eval()

sess = tf.Session()
sess.run(init_op)
op.eval(session=sess)

交互环境下

sess = tf.InteractiveSession()
sess.run(init_op)
result = op.eval()

初始化操作不是Tensor类型,没有eval()方法

5.占位符

变量由外部输入,数值未知(类似于函数参数)
tf.placeholder(dtype,shape=None,name=None)

a = tf.placeholder(dtype = tf.float32, name = 'a')
b = tf.placeholder(dtype = tf.float32, name = 'b')
c = tf.add(a, b, name = 'c')
d = tf.subtract(a, b, name = 'd')
feed_a = [[1,2],
          [3,4]]
feed_b = [[5,6],
          [7,8]]
with tf.Session() as sess:
    rc, rd = sess.run([c, d], feed_dict={a:feed_a, b:feed_b})#feed提交数据

6.TensorBoard可视化工具

通过TensorFlow日志文件可视化运行状态

tf.reset_default_graph()
logdir = 'G://log'

a = tf.constant([[1,2],
                [3,4]], name = 'a')
b = tf.Variable([[5,6],
                [7,8]], name = 'b')
init_op = b.initializer
op = tf.add(a, b, name = 'op')
with tf.Session() as sess:
    sess.run(init_op)
    result = sess.run(op)

write = tf.summary.FileWriter(logdir, tf.get_default_graph())
write.close()

在Anaconda Prompt中进入日志目录,运行TensorBoard

activate tensorflow2.4
g:
cd log
tensorboard --logdir=G:\log

在浏览器中访问网址

二、TensorFlow2.x

(1)动态图机制,立即执行
(2)keras标准API

1.Tensor类

tf.Tensor:张量,多维数据
属性:.ndim,.shape,.dtype
方法:.numpy(),.get_shape()

2.张量创建

(1)常量:tf.constant(value, dtype=None, shape=None, name=‘Const’)
(2)变量:tf.Variable(initial_value, dtype=None, shape=None, trainable=True, name=‘Variable’)
变量赋值:v.assign(v+1), v.assign_add(1), v.assign_sub(1)
(3)转化:tf.convert_to_tensor(数组/列表/数/布尔/字符串)
(4)改变类型:tf.cast(Tensor, dtype)
(5)全0:tf.zeros(shape, dtype=float32), 全1:tf.ones(shape, dtype=float32)
全val:tf.fill(shape, val)或tf.constant(val, shape)
(6)随机量:tf.random
设定种子值:.set_seed(s)
正态分布:.normal(shape, mean, stdder, dtype)
均匀分布:.uniform(shape, min, max, dtype)
打乱第一维:.shuffle(x)
(7)序列:tf.range(start, limit, delta=1, dtype)

3.维度变换

(1)改变维度:tf.reshape(Tensor, shape)
-1:缺省维度
(2)增加维度:tf.expand_dims(Tensor, axis),新增维度长度为1
(3)删除维度:tf.squeeze_dims(Tensor, axis),删除长度为1的维度
轴:维度:axis=0,1,2/-1,-2,-3
(4)交换维度:tf.transpose(Tensor, axis_list)
(5)拼接:tf.concat(Tensor_list, axis)
(6)分割:tf.split(Tensor, num_or_size_split, axis=0)
num_or_size_split:平均数目(如3)或各自长度(如[1,2,1])
(7)堆叠:tf.stack(Tensor,_list axis),创建新维度
(8)分解:tf.unstack(Tensor, axis),削减维度

4.张量索引

(1)索引:a[0], a[0][0],a[0,0]
(2)切片:a[m:n:l],a[m1:m2,n1:n2]
(3)数据提取:
按轴采样:tf.gather(Tensor, index_list, axis)
按点采样:tf.gather_nd(Tensor, index_list)
(4)最值索引:tf.argmax(), tf.argmin()

5.张量运算

(1)逐元素运算
tf.add()/+, .substract()/-, .multiply()/*, .divide()//, .math.mod()/%
.pow()/**, .square(), .sqrt(), .exp(), .math.log()
.sign(), .abs(), .negative(), .ceil(), .floor(), .round(), maximum(), .minimum()
.cos(), .sin(), .tan(), .acos(), .asin(), .atan()
(2)与低维广播运算(最低维度相同)
(3)与numpy数组运算
(4)矩阵乘法:tf.matmul(a, b)或a@b
(5)统计运算:tf.reduce
_sum(Tensor, axis)
_mean(Tensor, axis)
_max(Tensor, axis)
_min(Tensor, axis)


总结

tf1.x需要创建并执行会话后才进行运算,静态提高效率;tf2.x动态执行,便于调试。指定低精度32位数据可提高计算速度。Tensor张量操作与numpy类似,也可先将Tensor转化为ndarray进行运算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值