TensorFlow学习笔记(3):TensorFlow编程基础

说明

此系列文档为学习中国大学mooc,浙江大学开设的《深度学习应用开发-TensorFlow实践》随堂笔记。

介绍

  • TensorFlow是一个开放源代码软件库,用于高性能数值计算。
  • 借助其灵活的架构,可以将工作灵活地部署在多种平台(CPU,GPU,TPU)和多种设备(桌面设备,服务器集群,移动设备,边缘设备等)
  • 最初由Google Brain团队的工程师与研究院研发,可为机器学习与深度学习提供强力支持。

开始

  • TensorFlow 中 hellow world
import tensorflow as tf
#创建一个常量
hollow=tf.constant("hollow world")
#创建一个TF对话
sess=tf.Session()
#运行并获得结果
print(sess.run(hollow))

输出为b'hollow world'
b表示字节文字bytes literals
对话中run的是对象就是hollow

  • tensorflow计算模型-计算图
  1. tensorflow=tensor(张量,数据结构:多维数组)+flow(流,计算模型:张量之间通过计算而转化的过程)
  2. tesnorflow是一种通过计算图的形式表述计算的编程系统。每一个计算都是计算图上的一个节点,节点之间的边描述了计算之间的关系
  3. 计算图是有向图,有两种边 常规边(实线) 表示数据依赖关系:输出与输入, 特殊边(虚线) 不携带值,比如 happens-before的关系
  4. 计算图 实例:
node1=tf.constant(3.0,tf.float32,name= "node1")
node2=tf.constant(4.0,tf.float32,name= "node2")
node3=tf.add(node1,node2)
print(node3)
  1. 输出为Tensor("Add_1:0", shape=(), dtype=float32)
    tensor这里是一个数据结构,输出的不是一个具体的数字而是一个张量的结构。
  2. 注意标量与向量
  3. 建立流图或者计算图就是建立模型,执行对话才能提供数据获取结果。
sess=tf.Session()
print(sess.run(node1))
#关闭对话释放资源
sess,close()

在这里插入图片描述

张量

  1. 零阶张量为标量scalar,一个数
  2. 一阶张量为数组vector,是一个一维数组
  3. 多阶张量是n维数组。
  4. 张量保存的是计算过程不是数值
  5. Tensor(name,shape,type)
    name="nodename:src_output"
    shape=()表示为标量
    type=float32每个张量唯一类型
  6. 描述张量的维度:阶段(rank),形状(shape),维数(dimension number)
  7. 在这里插入图片描述
  8. 通过下表获取值t[i,j],i,j0开始
  9. 数据类型
    在这里插入图片描述

operation操作

  • 节点就是操作
  • 一次加法一次减法均为操作
    在这里插入图片描述
  1. 重置计算图tf.reset_default_graph()

Tensorflow基本运算

会话(session)

  • 拥有并管理tensorflow程序运行时的所有资源
  • 创建sess=tf.Session()
  • 运行某个对象sess.run(object)
  • 计算完成后要关闭会话帮助资源回收sess.close()
  • 一定要释放资源
sess=tf.Session()
try:
	print(sess.run(object))
except:
	print("Exception")
finially:
	sess.close()
  • 也可以通过上下文管理器退出语句段后自动释放资源
with tf.Session as sess:
	sess.run(object)
  • tensorflow 不会自动生成默认的会话,需要手动指定。但是默认后可以通过tf.Tensor.eval计算一个张量的取值。
result=tf.constant(3,0,name="result")
sess=tf.Session()
with sess.as_default:
	print(result.eval())

或者

print(resulteval(session=sess))

或者注册会话并成为默认会话

sess=tf.InteractiveSession()

常量与变量

常量 constant

  1. 创建语句constant_name=tf.constant(value,type,name)

变量 variable

1.创建 name_variable=tf.Variable(value,name)
2. 变量需要初始化

  • 个别变量初始化init_op=name_variable.initializer()
  • 所有变量初始化init_op=tf.global_variables_initializer()
    初始化的操作也是一个结点需要初始化sess.run(init_op)
node1=tf.Variable(3,name="node1")
node2=tf.Variable(4,name="node2")

sess=tf.Session()

init=tf.global_variables_initializer()
sess.run(init)

print(sess.run(node2))
  • 与传统编程语言不同,Tensorflow的变量定义后一般无需人工赋值。系统会根据算法模型,训练优化过程中`自动调整变量对应的数值
  • 机器学习训练模型的时候,比如权重Weight变量w,经过多次迭代,会自动调。
  • -不希望训练的时候被更改的话epoch=tf.Variable(0,name='epoch',trianable=False)
  • 需要人工更改update_op=tf.assign(variable_to_be updated,new_value)也需要run
  • 举例1+2+3+4+…+10
import tensorflow as tf
var=tf.Variable(0,name="var")
output=tf.Variable(0,name="output")

new_var=tf.add(var,1)
updated=tf.assign(var,new_var)
final=tf.assign(output,output+updated)

init_op=tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init_op)
    for _ in range(10):
        sess.run(final)
        print(sess.run(output))

占位符 placeholder

  1. 有些变量初始化的时候并不能知道它的值只有当程序运行时由外部输入,比如训练数据,需要用到占位符
  2. tf.placeholder() 占位符,特有的数据结构,类似于c语言或者Python中的%
  3. x=tf.placeholder(tf,float32,[2,3],name='tx')
  4. Feed提交数据 feed_dict通过字典方式传递参数给占位符例如result= sess.run(c,feed_dict={a:8.0,b:3.0})//a与b均是占位符
  5. 可以一次运行很多个节点rc,rd=sess.run([c,d])

TensorBoard 可视化初步

  • TensorBoard和TensorFlow 运行在不同的进程
tf.reset_default_graph()
logdir='D:/log'
'''
xxx
'''
writer=tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
  • Anaconda Prompt 进入日志存放的目录
  • 再运行TensorBoard,并将日志的地址指向日志输出的地址
tensorboard --logdir=/path/log
tensorboard --logdir=D:\log

默认的端口为6006 可以通过--port更改启动服务的端口
在这里插入图片描述
复制网址到浏览器,点击graphs选项即可

网上都说google chrome浏览器兼容,而我遇见的情况是显示为空白
解决方法:换一个浏览器(手动滑稽)

end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值