学习笔记 | 深度学习开发—TensorFlow实践(基础概念)

 

  1. TensorFlow计算模型—计算图

1,概念

①TensorFlow=Tensor + Flow

Tensor 张量

Tensorflow中,所有的数据都通过张量的形式来表示

张量没有真正保存数字,二十保存的是计算过程

数据结构:多维数组

Flow 流

计算模型:张量之间通过计算而转换的过程

基础代码:

import  tensorflow as tf#导入tensorflow模型
hello=tf.constant("hello world")#定义常量并赋值
sess=tf.Session()#开启会话
print(sess.run(hello))#运行会话并打印

输出结果:b'hello world'

#一个简单计算图

import  tensorflow as tf
node1=tf.constant(3.0,tf.float32,name="node1")
node2=tf.constant(4.0,tf.float32,name="node2")
node3=tf.add(node1,node2)
sess=tf.Session()
print(sess.run(node3))

输出结果:7.0

 

②张量的属性

Tensor("node1:0", shape=(), dtype=float32)

Name:节点名称

shape:张量的维度信息,shape=()表示标量

Type:每个张量都有唯一类型

③张量的形状

阶(rank)、形状(shape)、维数(dimension number)

 

import  tensorflow as tf
tens1=tf.constant([[[1,2,2],[2,2,3]],
                    [[3,5,6],[5,4,3]],
                    [[7,0,1],[5,4,3]],
                    [[11,12,7],[1,3,14]]],name="tensor1")
#语句包含[],{},()括号中间换行就不需要使用多行连接符
print(tens1)

输出结果:Tensor("tensor1:0", shape=(4, 2, 3), dtype=int32)

shape=(4, 2, 3):三个元素表示三维数组,最外围数字有4个元素,也就是4个2为数组,往里一层一个2维数组有2个元素,也就是有2个一维数组,再往里一层一个一维数组有3个元素,也就是3个元素

import  tensorflow as tf
scalar=tf.constant(100)
vector=tf.constant([1,2,3,4,5])
matrix=tf.constant([[1,2,3],[4,5,6]])
cube_martix=tf.constant([[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]])
#语句包含[],{},()括号中间换行就不需要使用多行连接符
print(scalar.get_shape())
print(vector.get_shape())
print(matrix.get_shape())
print(cube_martix.get_shape())

输出结果:

()

(5,)

(2, 3)

(3, 3, 1)

④张量的阶

表征张量的维度

 

⑤获取张量的元素

阶为1的张量等价于向量

阶为2的张量等价于矩阵,通过t[i,j]获取元素

阶为3的张量,通过t[i,j,k]获取元素

import  tensorflow as tf
tens1=tf.constant([[[1,2],[2,3]],[[3,4],[5,6]]])

sess=tf.Session()
print(sess.run(tens1)[1,1,0])
sess.close()

#下标从0开始

输出结果:5

⑥张量的类型

Tensorflow支持14种不同类型

实数 tf.float32 , tf.float64

整数 tf.int8 ,tf.int16,tf.int64,tf.uint8

布尔 tf.bool

负数 tf.complex64,tf.complex128

默认类型:不带小数点的数会默认为int32

带小数点的会被默认为float32

 

import  tensorflow as tf
a=tf.constant([1,2],name="a")
b=tf.constant([2.0,3.0],name="b")
renult=a+b

输出结果:TypeError: Input 'y' of 'Add' Op has type float32 that does not match type int32 of argument 'x'.

Tensorflow会对参与运算的所有张量进行类型的检查,发现类型不匹配时会报错.

2,操作

计算图中的节点就是操作;加法,乘法,构建变量都是操作

每个运算操作都有属性,再构建图的时候需要确定下来。

操作之间存在顺序关系,操作之间的依赖就是“边”,如果操作a的输出是操作b执行的结果,那么这个操作a就依赖与操作b

 

import  tensorflow as tf#导入tensorflow模型
tf.reset_default_graph()#清楚默认图和不断增加的节点

#定义变量a
a=tf.Variable(1,name="a")
#定义操作b
b=tf.add(a,1,name="b")
#定义操作c为b*4
c=tf.multiply(b,4,name="c")
#定义d为c-d
d=tf.subtract(c,b,name="d")
#存放文件路径
logdir='D:/pycharm project/logs'

#生成一个写日志的writer,并将当前的tensorflow计算图写入日志
writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()

计算图:

 

3,TensorFlow是一个通过计算图的形式表述计算的编程系统,每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的关系。

抽象出来就是点和边的关系

计算图是一个有向图,由以下内容构成:

一组节点,每个节点都代表一个操作,是一种运算

一组有向边,每条边代表节点之间的关系(数据传递和控制依赖)

TensorFlow有两种边:

常规边(实现):代表数据依赖关系。一个节点的运算输出成为另一个节点的输入,两个节点之间有tensor流动(值传递)

特殊边(虚线):不携带值,便是两个节点之间的控制相关性。

 

import  tensorflow as tf
node1=tf.constant(3.0,tf.float32,name="node1")
node2=tf.constant(4.0,tf.float32,name="node2")
node3=tf.add(node1,node2)
sess=tf.Session()
print(node1)

输出结果:Tensor("node1:0", shape=(), dtype=float32)

输出的结果不是一个数字而是一个张量的结构

创建流图(计算图),就是建立计算模型,执行会话才能提供数据并获得结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值