实验3-4 数据结构-张量
1)已知两个张量[1,3,5,7]和[2,4,4,8],编写一个模型,计算两个张量的加法,输出结果,并在tensorboard中显示
2)已知张量[1,2,3,4,5,6,7,8,9,10,11,12]有12个元素,利用tf.reshape()将其形状转换为[2,3,2]的三维张量
要求:程序+截图
1)已知两个张量[1,3,5,7]和[2,4,4,8],编写一个模型,计算两个张量的加法,输出结果,并在tensorboard中显示
①第一步
TensorBoard是TensorFlow自带的一个强大的可视化工具,也是一个web应用程序套件。通过TensorFlow程序运行过程中产生的日志文件可视化TensorFlow的程序运行状态,它与TensorFlow跑在两个不同的进程中。
启动tensorboard:
打开anaconda prompt:
激活环境activate tensorflow
切换到根目录:cd /
切换到日志存放的目录:cd log
查看文件:dir
启动tensorboard:tensorboard --logdir=C:\log
TensorBoard目前支持7种可视化,即SCALARS、IMAGES、AUDIO、GRAPHS、
DISTRIBUTIONS、HISTOGRAMS、EMBEDDINGS,这七种可视化的主要功能如下:
lSCALARS:展示训练过程中的准确率、损失值、权重/偏置的变化情况
lIMAGES:展示训练过程中的图像
lAUDIO:展示训练过程中的音频
lGRAPHS:展示模型的数据流图,以及训练在各个设备上消耗的内存和时间
lDISTRIBUTIONS:展示训练过程中记录的数据的分布图
lHISTOGRAMS:展示训练过程中记录的数据的柱状图
lEMBEDDINGS:展示此向量后的投影分布
计算图的概念
计算图实际上描述的是需要依次完成的计算单元以及这些计算单元之间的相互依赖关系。由一组节点和一组有向边构成。
①每一个计算都被称为节点(operation,简称op)
②节点之间的边描述了计算之间的依赖关系
③一个节点获得0 个或多个张量,产生0 个或多个张量
计算图描述了一组需要依次序完成的计算单元以及这些计算单元之间相互依赖的关系。图中的节点表示某一具体的计算单元,如张量以及张量之间的乘积,点积等。
计算图中的节点就是操作(Operation)
一次加法是一个操作
一次乘法是一个操作
构建一些变量的初始值也是一个操作
每个运算操作都有属性,它在构建图的时候就需要确定下来
操作也可以和计算设备绑定,指定操作在某个设备上执行
操作之间存在顺序关系,这些操作之间的依赖就是“边”
如果操作A的输入是操作B执行的结果,那么这个操作A就依赖于操作B。
TensorBoard的启动:
不需要额外安装,安装TensorFlow时已自动完成。
在Anaconda Prompt中先进入日志存放的目录,再运行TensorBoard,并将日志的地址指向程
序日志输出的地址,命令为:tensorboard--logdir= /path/log(路径自己定)
启动tensorboard服务的端口默认为为6006,
通过--port参数可以改变启动服务的端口
②第二步
import tensorflow as tf
#清除default graph和不断增加的节点
tf.reset_default_graph()#logdir改为自己机器上的合适路径
logdir = 'C:/log'
#定义一个简单的计算图,实现两个张量的加法
a = tf.constant([1,3,5,7],dtype = tf.int32)
b = tf.constant([2,4,4,8],dtype = tf.int32)
result = tf.add(a,b)
with tf.Session() as sess:print(sess.run(result))
#生成一个写日志的writer,并将当前的TensorFlow计算图写入日志
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
③第三步
TensorBoard是一个在本地启动的服务,启动完成后在浏览器输入网址:http://localhost:6006(一般都是电脑名称)即可进行访问。
查看TensorBoard内所执行完毕的计算图
2)已知张量[1,2,3,4,5,6,7,8,9,10,11,12]有12个元素,利用tf.reshape()将其形状转换为[2,3,2]的三维张量
import tensorflow as tf #导入tensorflow类库,别名为tf
#定义c1是一维张量,共有12个元素
c1 = tf.constant([1,2,3,4,5,6,7,8,9,10,11,12],dtype = tf.float32,name = "c1")
c2 = tf.reshape(c1,[2,3,2])
with tf.Session() as sess:sess.run(tf.global_variables_initializer())print(sess.run(c1))print(sess.run(c2))