当前位置: 首页 > news >正文

tensorflow 基本概念和基本操作

op和tensor之间的关系

  • op是graph上的节点,线就是tensor。
    op输入tensor,同时也产出下游的tensor
    作为每一个tensor,都会有一个op的属性(attribute),该op就代表着这个tensor是被什么计算产出的。举个例子:
In [74]: with tf.Session() as sess:
    ...:     zer = tf.zeros(shape=(32, 32))
    ...:     print(zer.op)
    ...:     
name: "zeros_0"
op: "Const"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "value"
  value {
    tensor {
      dtype: DT_FLOAT
      tensor_shape {
        dim {
          size: 32
        }
        dim {
          size: 32
        }
      }
      float_val: 0.0
    }
  }
}

zer是个Tensor,op属性是Const,代表是被Const 的op生成的。

  • tf.constant/zeros是小写,因为这里都是一个方法,一个生成op的function,这op会产出元素全为0的tensor ;
  • tf.Variable 本身是一个类,所以是大写;
  • op是和graph绑定的,tensor是和session绑定的。

随机种子固定

reference

  • 深度学习模型稳定,设定随机种子大全

    这个解释了下解决方案中 最基本的设置种子方式 里面 的每一行的含义

  • Tensorflow随机数生成种子tf.set_random_seed()

    这个做实验证明了:图级别的随机种子设置 和 op级别的随机种子设置的区别 ,以及 前者可以涵盖后者 的特性

  • stackoverflow:How to get stable results with TensorFlow, setting random seed

    高赞:tf.set_random_seed只是设定了当前图的默认seed,所以每次创建一张新的图,应该在其作用域内重新设定一下种子

  • stackoverflow:reproducible-results-in-tensorflow-with-tf-set-random-seed

    tf里的随机数生成,不仅受你设置的seed值的影响,定,计算图的随机种子实际上是当前计算图的最后一个操作的id号– 创建图后,需要先设置随机数种子,然后再生成随机数算子。
    那我其实就不是很理解这里的tf.set_random_seed的作用了( 似乎完全咩有起作用… )

  • 注意,GPU上的随机数目前是无法设置多次运行固定死的 – 公知

    • reddit的这个回答似乎是有办法 (还未尝试过),在下述解决方案的基础上要加如下的代码 [记得也有人说这是tf2才有效的方式,对tf1无效…]:
      os.environ['TF_DETERMINISTIC_OPS'] = '1'
      os.environ['TF_CUDNN_DETERMINISTIC'] = '1'
      tf.config.threading.set_inter_op_parallelism_threads(1)
      tf.config.threading.set_intra_op_parallelism_threads(1)
      

解决方案

  • 最基本的
    def seed_tensorflow(seed=1217):
        import random
        import os
        random.seed(seed)
        os.environ['PYTHONHASHSEED'] = str(seed)
        np.random.seed(seed)
        tf.set_random_seed(seed)	# , disable_gpu = TRUE
    
        # the below seems configs that work for tf2
        os.environ['TF_DETERMINISTIC_OPS'] = '1'
        os.environ['TF_CUDNN_DETERMINISTIC'] = '1'
    
        tf.config.threading.set_inter_op_parallelism_threads(1)
        tf.config.threading.set_intra_op_parallelism_threads(1)
    

tf 赋值与依赖性

在这里插入图片描述
黄色的是参考边 reference edge 表示节点的输出值用于改变箭头指向的向量,但对于指向的向量来说不存在DAG里的拓扑依赖
灰色的是数据流边 dataflow edge 箭头指向的向量的计算在DAG中对上游向量存在拓扑依赖

import tensorflow as tf
sess= tf.InteractiveSession()

with tf.name_scope('test_1') as scope:
    W = tf.Variable(10,name='W')
    assign_op = W.assign(100,name='assign_W')

with tf.name_scope('test_2') as scope:
    my_var = tf.Variable(2, name="my_var")
    my_var_times_two = my_var.assign(2 * my_var,name='multiply')
#     sess.run(my_var_times_two)
    # print(f"my_var_times_two is {my_var_times_two}")
    
writer=tf.summary.FileWriter('graph',sess.graph)	# 其实这一步写完就会存储tensorboard了。后面两部是为了能立马flush进文件中去
writer.flush()
writer.close()
# sess.close()
W = tf.Variable(10)
assign_op = W.assign(100)
sess.run(assign_op)
print(W.eval() )

>>> 100
my_var = tf.Variable(2, name="my_var")
my_var_times_two = my_var.assign(2 * my_var)
sess.run(my_var_times_two)
# print(f"my_var_times_two is {my_var_times_two}")
---------------------------------------------------------------------------
FailedPreconditionError                   Traceback (most recent call last)
~/.conda/envs/tf1.15/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _do_call(self, fn, *args)
   1364     try:
-> 1365       return fn(*args)
   1366     except errors.OpError as e:

~/.conda/envs/tf1.15/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _run_fn(feed_dict, fetch_list, target_list, options, run_metadata)
   1349       return self._call_tf_sessionrun(options, feed_dict, fetch_list,
-> 1350                                       target_list, run_metadata)
   1351 

~/.conda/envs/tf1.15/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata)
   1442                                             fetch_list, target_list,
-> 1443                                             run_metadata)
   1444 

FailedPreconditionError: Attempting to use uninitialized value my_var_3
	 [[{{node my_var_3/read}}]]

During handling of the above exception, another exception occurred:

总而言之,还是乖乖sess.run(tf.global_variables_initializer())吧


在这里插入图片描述

一些场景下的依赖需求

  • op的control dependency控制 目前还不知道哪里用到了在这里插入图片描述* 不知道依赖的Variable是否已经初始化情况下的 intialized_value() 使用
    在这里插入图片描述

在这里插入图片描述

相关文章:

  • 吉林省住房城乡建设网站/如何免费建立一个网站
  • wordpress发卡/企业网站推广方案策划
  • 建立网站大约多少钱/苏州网站制作开发公司
  • b2c电商网站对比/网页设计与制作期末作品
  • 苏州网站建设风兰/外贸获客软件
  • 石岩做网站公司/指数是什么
  • 基于Python+Echarts+Pandas 搭建一套图书分析大屏展示系统(附源码)
  • 洞察市场需求,深耕大健康赛道,缤跃酒店打造一站式运动酒店品牌
  • TCP半关闭状态分析和skynet对半关闭状态的支持
  • 第三章:远程登陆Linux系统-[实操篇]
  • 科研人快速入门LaTex到日常使用,下载安装配置,语法使用说明等
  • 二叉树9:二叉树的最大深度
  • CAP定理通俗理解
  • 内存分配函数(动态内存分配)详解
  • MCU-51:让LED闪烁起来
  • 前端基础(十五)_多栏布局(两列自适应布局、圣杯布局---三列布局、双飞翼布局--三列布局、等高布局)
  • 贪心算法(Java版本)
  • IU酒店释放轻中端投资活力,开启曲靖酒店新篇章