TensorFlow--Chapter03编程基础知识总结,TensorBoard可视化初步

Deep learning 专栏收录该内容
9 篇文章 0 订阅

TensorFlow1.8编程基础知识总结

TensorFlow–Chapter03编程基础知识总结,TensorBoard可视化初步
TensorFlow 是一个端到端开源机器学习平台。它拥有一个全面而灵活的生态系统,其中包含各种工具、库和社区资源,可助力研究人员推动先进机器学习技术的发展,并使开发者能够轻松地构建和部署由机器学习提供支持的应用。

在这里插入图片描述

由于课程教了1.8版本的操作,所以在这里我会总结TensorFlow1.8版本的编程基础知识
作者:北山啦
地址:https://beishan.blog.csdn.net

import tensorflow as tf
tf.__version__
'1.8.0'

1 变量与常量

1.1 变量

变量创建采用tf.Variable类:例如创建w1、w2变量,初始值分别为3和1

在这里插入图片描述

w1 = tf.Variable(initial_value=3, name="w1")
w2 = tf.Variable(initial_value=1, name="w2")

当创建一个变量时,可以将一个张量作为初始值传入构造函数Variable()

weights = tf.Variable(tf.random_normal(
    [784, 200], stddev=0.35), name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")

变量初始化:tf.global_variables_initializer()

必须在模型的其他操作运行之前先明确地完成变量初始化,最简单的方法是添加一个给所有变量初始化的操作,并在模型使用前首先运行该操作

Int_ops = tf.global_variables_initializer()
sess = tf.Session()
sess.run(Int_ops)

常量是不能修改的张量,用constant类定义

con1 = tf.constant(100)
import tensorflow as tf

1.2 常量

  • tf.zeros(shape, dtype=tf.float32, name=None) 创建大小为shape的张量,值都为0
  • tf.ones(shape, dtype=tf.float32, name=None)
  • tf.constant(value,dtype=None,name=“Cons”)
x = tf.zeros([2,3],tf.int32)
sess = tf.Session()
sess.run(x)
array([[0, 0, 0],
       [0, 0, 0]])

1.3 序列

生成序列有以下几种方法

  • tf.linspace(start, stop, num, name=None)
  • tf.range
a = tf.linspace(10.0,12.0,3,name="linspace")
sess = tf.Session()
sess.run(a)
array([ 10.,  11.,  12.], dtype=float32)

1.4 随机量

  • tf.random_normal():生成1个服从正太分布的随机值
  • tf.random_uniform():从均值分布中产生随机值
  • tf.set_random_seed():设置随机种子
  • tf.random_gama():生成一个服从Gama分布的随机值

2 会话

在TensorFlow的Python API中,张量对象a、b和c是操作结果的字符别名,他其实并不存储输出结果的值
在这里插入图片描述

2.1 会话的模式1

需要明确调用Session.close()函数来关闭会话并释放资源

tens1 = tf.constant([1, 2, 3])  # 定义计算图
sess = tf.Session()  # 创建一个会话
try:
    print(sess.run(tens1))  # 得到张量的取值
except:
    print("Exception")
finally:
    sess.close()  # 关闭会话使得本次运行中使用到的资源可以被释放
[1 2 3]

2.2 会话的模式2

不需要调用Session.close()函数来关闭会话

# 定义计算图
node1 = tf.constant(3.0, tf.float32, name="node1")
node2 = tf.constant(4.0, tf.float32, name="node2")
result = tf.add(node1, node2)
# 创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:
    print(sess.run(result))
7.0

2.3 指定默认的会话

TensorFlow不会自动生成默认的会话,需要手动指定,当默认的会话被指定之后可以通过tf.Tensor.eval函数来计算一个张量的取值

node1 = tf.constant(3.0, tf.float32, name="node1")
node2 = tf.constant(4.0, tf.float32, name="node2")
result = tf.add(node1, node2)

sess = tf.Session()
with sess.as_default():
    print(result.eval())
7.0

3 变量的赋值

与传统编程语法不同,TensorFlow中的变量定义之后,一般五福人工赋值,系统会根据算法模型,训练优化过程中自动调整变量对应的数值

  • 特殊情况需要人工更新的,可用变量赋值语句tf.assign()
    在这里插入图片描述

通过变量赋值输出1、2、3……10

value = tf.Variable(0, name="value")
one = tf.constant(1)
new_value = tf.add(value, one)
update_value = tf.assign(value, new_value)
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    for _ in range(10):
        sess.run(update_value)
        print(sess.run(value))
1
2
3
4
5
6
7
8
9
10

4 占位符、Feed、Fetch

4.1 占位符

tf.placeholder(dtype, shape=None, name=None)
在这里插入图片描述

"""此代码生成一个2*3的二维数组,矩阵中每个元素的类型都是tf.float32,内部对应的符号名称都是tx"""
x = tf.placeholder(tf.float32,[2,3],name="tx")

如果构建了一个包含placeholder操作的计算图,但在session中调用run方法时,placeholder占用的变量必须通过feed_dict参数传递进去

4.2 fedd_dict传入值

a = tf.placeholder(tf.float32,name="a")
b = tf.placeholder(tf.float32,name="b")
c = tf.multiply(a,b,name="c")
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    """通过feed_dict的参数传值,按字典格式"""
    result = sess.run(fetches=c, feed_dict={a:8.0,b:3.5})
    print(result)
28.0

4.3 多个操作可以通过一次feed完成

a = tf.placeholder(tf.float32,name="a")
b = tf.placeholder(tf.float32,name="b")
c = tf.multiply(a,b,name="c")
d = tf.subtract(a,b,name="d")
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    """通过feed_dict的参数传值,按字典格式"""
    result = sess.run(fetches=[c,d], feed_dict={a:8.0,b:3.5})
    print(result)
28.0 4.5

4.4 一次返回多个值分别赋给多个变量

# 作者:北山啦
# 地址:https://beishan.blog.csdn.net

a = tf.placeholder(tf.float32,name="a")
b = tf.placeholder(tf.float32,name="b")
c = tf.multiply(a,b,name="c")
d = tf.subtract(a,b,name="d")
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    """通过feed_dict的参数传值,按字典格式"""
    rc,rd = sess.run(fetches=[c,d], feed_dict={a:8.0,b:3.5})
    print("value of c = ",rc,"\nvalue of d = ",rd)
value of c =  28.0 
value of d =  4.5

5 TensorBoard可视化

  • TensorBoard是TensorFlow的可视化工具
  • 通过Tensor Flow程序运行过程中输出的日志文件可视化TensorFlow程序的运行状态
  • TensorBoard和TensorFlow程序跑在不同的进程中
    在这里插入图片描述

5.2 产生日志文件

  • tf.reset_default_graph():清除default graph和不断增加的节点
# 作者:北山啦
# 地址:https://beishan.blog.csdn.net

tf.reset_default_graph()

logdir = "D:/log"
"""定义一个简单的计算图,实现向量加法的操作"""
input1 = tf.constant([1.0, 2.0, 3.0], name="input1")
input2 = tf.Variable(tf.random_uniform([3]), name="input2")
output = tf.add_n([input1, input2], name="add")
"""生成一个写日志的writer,并将当前的TensorFlow计算图写入日志"""
writer = tf.summary.FileWriter(logdir, tf.get_default_graph())
writer.close()

在这里插入图片描述

5.2 启动TensorBoard

  1. 在Anaconda Prompt中进入日志存放的目录
    在这里插入图片描述

  2. 运行TensorBoard
    将日志的地址只想程序日志输出的地址

tensorboard --logdir=D:\log

在这里插入图片描述
3. 通过给定的网址,进入即可
在这里插入图片描述

到这里就结束了,如果对你有帮助,欢迎点赞关注评论,你的点赞对我很重要

在这里插入图片描述

  • 10
    点赞
  • 8
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值