tensorflow 基本概念和基本操作

news2025/7/17 20:46:51

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() 使用
    在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis6 主从复制

Redis6 主从复制1. 什么是主从复制2. 能做什么3. 配置1主2从3.1 配置3.2 启动redis3.3 配置主从关系4.常见问题4.1 一主二仆5. 主从复制原理6. 薪火相传7. 反客为主1. 什么是主从复制 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制&#xff0c…

C++--数据结构--最短路径--Dijkstra--Bellman-Ford算法--Floyd-Warshall算法--高阶0713 14

注:本篇所用的某些未在本文中实现的函数,或不明确的类,均在上篇博客中有详细过程,因篇幅问题不再赘述。 C--数据结构--图的相关概念及模拟实现--高阶0712_Gaze!的博客-CSDN博客 1. Dijkstra算法 Dijkstra算法需要开辟…

spring-boot 接收form表单 多文件加多字段数据(postman在form-data格式下传数组和集合)

前言 该博客多用于记录自己的问题 在写项目的时候遇到这种业务情况: 需要保存整个页面的数据,数据包含多个字段信息和多个文件 结合网上的处理思路,我最终实现了这种业务需求并整理一下 前端单独提交字段和文件比较方便简单,本人…

带你读AI论文丨针对文字识别的多模态半监督方法

摘要:本文提出了一种针对文字识别的多模态半监督方法,具体来说,作者首先使用teacher-student网络进行半监督学习,然后在视觉、语义以及视觉和语义的融合特征上,都进行了一致性约束。本文分享自华为云社区《一种针对文字…

构建高性能内存队列:Disruptor

1、 背景 Java中有哪些队列 ArrayBlockingQueue 使用ReentrantLock LinkedBlockingQueue 使用ReentrantLock ConcurrentLinkedQueue 使用CAS 等等 我们清楚使用锁的性能比较低,尽量使用无锁设计。接下来就我们来认识下Disruptor。 2、Disruptor简单使用 github地…

Web3中文|可判115年监禁的FTX创始人SBF即将被引渡到美国

巴哈马总检察长办公室在宣布逮捕FTX前CEO Sam Bankman-Fried时,指出他很可能应美国要求被引渡。 一个多星期后,美国广播公司新闻报道称 ,SBF于12月20日签署了引渡文件。 另据彭博社12月20日的一份报告称,该交易所创始人SBF于12月…

Centos7安装配置Minio

Background 官方下载地址:https://github.com/minio/minio/releases 这里给出本次使用的一个版本:minio-2021-05-11T23:27:41Z,提取码:king 1、下载minio文件夹 其他的版本的相关命令可能发生变化,这里只是针对我提供…

基于GIS的生态安全格局构建之生态阻力面的建立

GIS前沿 一、数据来源介绍 (一)土地利用数据 土地利用数据来自国土资源三次调查数据(2018年),根据研究需要对其进行分析处理。 (二)生态安全等级数据 利用对从生态属性和生态干扰两方面选择的…

Junit5 + YAML 轻松实现参数化和数据驱动,让 App 自动化测试更高效(一)

登录:不同的用户名,不同的密码,不同的组合都需要做登录场景的测试,正常的排列组合下可能会产生多个用例 搜索:不同的搜索条件产生不同的搜索结果,搜索也是常见的测试项,单个搜索参数或者多种搜…

Java---正则表达式

目录 一、正则表达式的介绍 二、正则表达式的基本语法 (1)字符类 (2)预定义符 (3)数量词 三、正则表达式的具体实例 (1)判断电话号码是否符合规则 (2)…

git push踩坑记录【看注意事项】

记录一次git push的踩坑过程(详细在注意事项里,列出了具体的解决办法)。 push远程仓库命令 使用命令 git init git add . git commit -m "提交说明写在这里" git remote add origin gitgithub.com:xxx/surgical-robot.git git p…

4、常用类和对象

文章目录4、常用类和对象4.1 Object4.2 数组4.3 二维数组4.4 二维数组 九层妖塔4.5 冒泡排序4.6 选择排序4.7 二分法查找4.8 字符串4.9 字符串拼接4.10 字符串比较4.11 字符串截断4.12 字符串替换4.13 字符串大小写转换4.14 字符串查询4.15 StringBuilder4.16 包装类4.17 日期类…

windows环境下python和gdal绑定方法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 编译和安装gdal 此篇介绍的方法并不需要用到pip工具,可依据自己编译的gdal库来灵活绑定。 安装gdal主要是设置两个环境变量:一是gdal的动态库路径加入到path环境变量下,如下图: 二是…

vim的常规操作

Linux系统内置vi文本编辑器,vim是vi的增强版 vi和vim的三种模式 正常模式:默认模式,可以使用“上下左右”键来移动光标,也可以用删除、复制、粘体等功能插入模式:按i,I,o,O,a,A,r,R等任何一个字母进入命令行模式&…

django logging的StreamHandler的一个小用法

首先先了解下,logging的大致结构,它有一个内置处理器,还有一个django提供的内置记录器。基本上,日志模块就是由这俩组成的,他俩的关系,有点水渠理论的意思。就是说,处理器,和记录器&…

MCU-51:独立按键控制LED灯的动作

目录一、独立按键二、独立按键控制LED亮灭二、消除按键抖动2.1 按键的抖动2.2 控制LED灯状态-消除按键抖动三、独立按键控制LED显示二进制四、独立按键控制LED灯移位一、独立按键 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断…

微服务技术--认识微服务

技术栈: 认识微服务 服务架构演变 单体架构 将业务的功能集中在一个项目中开发,打成一个包部署优点: 架构简单部署成本低 缺点: 耦合度高 分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发&…

黑盒测试用例设计 - 场景法

原理 现在的软件几乎都是用时间触发来控制流程的。测试时,可以以生动的描述出触发时的情景,有利于设计测试用例,同时使测试用例更容易理解和执行。基本流:软件功能按照正确的事件流实现的一条正确流程。通常一个业务仅存在一个基…

[洛谷]P2234 [HNOI2002]营业额统计

[洛谷]P2234 [HNOI2002]营业额统计一、问题描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、问题分析1、算法标签2、思路分析三、代码实现一、问题描述 [洛谷]P2234 [HNOI2002]营业额统计 题目描述 Tiger 最近被公司升任为营业部经理,他上任后…

微服务系列 - Zookeeper下篇:源码解析

前言 关于zookeeper的入门到精通请阅读:微服务系列 - Zookeeper上篇 注:本内容仅用于个人学习笔记,如有侵扰,联系删除 参考文档:https://blog.csdn.net/mjb740074431/article/details/120173792 一、算法基础 Zook…