5、变量和可视化
1、变量的创建
变量也是一种op,是一种特殊的张量,能够进行存储持久化(用于保存参数,系数等),它的值就是张量,默认被训练
tf.Variable(initial_ value=None,name=None, trainable=True) (name表示在可视化中显示的名字)
创建一个带值initial_value的新变量,initial_value初始值,可以是随机的值
- assign(value)
为变量分配一个新值,返回新值
- eval(session=None)
计算并返回此变量的值
- name 属性表示变量名字
1 import tensorflow as tf
2 import os
3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升
4
5 a = tf.constant([1,2,3,4,5])
6 var = tf.Variable(tf.random.normal([2,3],mean=0.0,stddev=1.0)) #random.normal从正态分布中输出随机值,平均值0.0,标准差1.0
7 print(a)
8 print(var)
输出 :
Tensor("Const_1:0", shape=(5,), dtype=int32)
<tf.Variable 'Variable:0' shape=(2, 3) dtype=float32_ref>
2、变量的初始化 (变量在进行run时,必须先要进行初始化)
没有进行初始化
1 import tensorflow as tf
2 import os
3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升
4
5 a = tf.constant([1,2,3,4,5])
6 var = tf.Variable(tf.random.normal([2,3],mean=0.0,stddev=1.0)) #random.normal从正态分布中输出随机值,平均值0.0,标准差1.0
7 with tf.Session() as sess:
8 print(sess.run([a,var]))
输出:
Attempting to use uninitialized value Variable
添加一个初始化所有变量的op(tf.global_variables_initializer())在会话中开启
1 import tensorflow as tf
2 import os
3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升
4
5 a = tf.constant([1,2,3,4,5])
6 var = tf.Variable(tf.random.normal([2,3],mean=0.0,stddev=1.0)) #random.normal从正态分布中输出随机值,平均值0.0,标准差1.0
7
8 #在打印var之前必须做一个显示的初始化
9 init_op = tf.global_variables_initializer() #不需要传入值
10
11 with tf.Session() as sess:
12 sess.run(init_op) #必须运行初始化op
13 print(sess.run([a,var]))
输出:
[array([1, 2, 3, 4, 5]), array([[-0.11310391, 1.3286809 , 0.06200764],
[ 0.45713297, -0.33347377, 1.4530548 ]], dtype=float32)]
- 变量的op能够持久化保存,普通张量的op是不行的
- 当定义一个变量op的时候,一定要在会话中初始化
4、可视化Tensorboard
将tensorflow图结构显示在web界面,程序图结构——>序列化为events事件文件——>通过tensorboard工具显示到web界面
- 数据序列化-events文件
TensorBoard通过读取TensorFlow的事件文件来运行
- t.summary.FileWriter(" events事件文件的路径 ", graph= ) summary
返回filewriter,写入事件文件到指定目录(最好用绝对路径),以提供给tensorboard使 用
- 开启
tensorboard -logdir= “events事件文件的路径"
一"般浏览器打开为127.0.0.1:6006
注:修改程序后,再保存一遍会有新的事件文件, 打开默认为最新的。
①
1 import tensorflow as tf 2 import os 3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升 4 5 a = tf.constant([1,2,3,4,5]) 6 var = tf.Variable(tf.random.normal([2,3],mean=0.0,stddev=1.0)) #random.normal从正态分布中输出随机值,平均值0.0,标准差1.0 7 8 #在打印var之前必须做一个显示的初始化 9 init_op = tf.global_variables_initializer() #不需要传入值 10 11 with tf.Session() as sess: 12 sess.run(init_op) #必须运行初始化op 13 14 #把程序的图结构写入事件文件中,graph:把指定的图写进事件文件当中(这个图的获取方式有很多种), summary 摘要 15 fileWriter = tf.summary.FileWriter("E:/pythonprogram/deepLearning/base/visual/",graph=sess.graph) #返回一个实例 16 print(sess.run([a,var]))
输出:
[array([1, 2, 3, 4, 5]), array([[ 1.3283709 , 0.04997791, -0.25768515],
[ 0.12506656, -0.48526055, 0.06624609]], dtype=float32)]
② 同时在写入事件的目录中生成了一个events文件
③ 接下来使用tensorboard将事件文件读到web中(如果有多个事件,会自动按照时间读取最近的一次事件进行读取)
- 首先在命令行输入 : tensorboard --logdir="E:/pythonprogram/deepLearning/base/visual/" (注意是自己的events文件目录)
- 在浏览器的地址栏输入 http://LAPTOP-3O0EGQPQ:6006/ (在③中的输出提示)
- 浏览器显示如下 ,左下角是一些图的符号的对应标记类型
①GRAPHS 显示程序的图结构
②SCALARS 显示0维度的值,即数值,标量
③HISTOGRAMS 显示高维度的值(如权重,偏置等)
④每个参数中都有一个name,它的作用是在tensorboard中显示设定的名字
- 每个op对应的常数的张量
- 符号的意义
- name设置,主要是为了能在web中分清变量
1 import tensorflow as tf 2 import os 3 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #去掉警告,将警告级别提升 4 5 a = tf.constant(2.0,name='a') 6 b = tf.constant(3.0,name='b') 7 c = tf.add(a,b,name='c') 8 9 with tf.compat.v1.Session() as sess: 10 fileWriter = tf.summary.FileWriter("E:/pythonprogram/deepLearning/base/visual/",graph=sess.graph) 11 print(sess.run(c))
tensorboard显示: