Tensorflow中问题总结

2023-11-03

1)ValueError: Variable bar/v does not exist, or was not created with tf.get_variab
le(). Did you mean to set reuse=None in VarScope?

import tensorflow as tf


with tf.variable_scope("foo"):
    v=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))

with tf.variable_scope("bar", reuse=True):
    v1=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))

注意第二个变量在创建的时候,由于tf.variable_scope设置的为reuse=True,即指定为共享变量,所以会找以前创建的这个变量,然而该变量并没有存在,因此报错!!!
注意reuse=True的变量作用域或者变量,必须在之前已经存在过!!!

PS:
tf.get_variable()和tf.Variable()的区别:
tf.Variable()每次都在创建新的变量,所有的reuse=True与它并没有什么关系;
tf.get_variable()则

2)ValueError: Variable bar/v already exists, disallowed. Did you mean to set reuse
=True in VarScope? Originally defined at:

import tensorflow as tf

with tf.variable_scope("foo"):
    v=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))

with tf.variable_scope("bar"):
    v1=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))
    v2=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))

这是因为tf.get_variable()并不会处理命名冲突,

完整的代码实现:

import tensorflow as tf
def conv_relu(input, kernel_shape, bias_shape):
    # Create variable named "weights".
    with tf.variable_scope("h1") as scope:
        weights = tf.get_variable("weights", kernel_shape,
            initializer=tf.random_normal_initializer())
        # Create variable named "biases".
        biases = tf.get_variable("biases", bias_shape,
            initializer=tf.constant_initializer(0.0))
        conv = tf.nn.conv2d(input, weights,
            strides=[1, 1, 1, 1], padding='SAME')
        print(weights.name)
        return tf.nn.relu(conv + biases)

input1 = tf.random_normal([1,10,10,32])
input2 = tf.random_normal([1,20,20,32])
with tf.variable_scope("hello") as scope:
    x = conv_relu(input1, kernel_shape=[5, 5, 32, 32], bias_shape=[32])
    #scope.reuse_variables()
    tf.get_variable_scope().reuse_variables()
    x = conv_relu(x, kernel_shape=[5, 5, 32, 32], bias_shape = [32])

PS:
tf.get_variable的策略如下:当变量作用域没有指定reuse时候,尝试创建变量,然鹅并不会处理命名冲突;当指定reuse=True的时候,尝试重用变量(不会再创建对应的变量),如果在reuse=True的作用域内,该变量还没有被创建则会报变量不存在的问题!

Tensorflow的主要讲解:
1)Graph管理Tensor,Tensor是在Graph中保存的,不用显式创建;Variable需要显式创建,由Session进行管理,sess.run(tf.global_variables_initializer())时创建成功,sess.close()时释放;
2)Graph是Tensor和Operation的集合,所以Import_graph_def()中没有任何变量相关的信息;
MetaGraph中包括CollectionDef,SaverDef和GraphDef以及MetaInfoDef,其中GraphDef上面结果,SaverDef用于保存图的节点信息,CollectionDef中存放了key:value的dict对,而key中有tf.GraphKeys.Trainable_VARIABLES等等,方便import_meta_graph后取回。所以这样我们就可以获取到Tensor,Operation和Variable等信息,但是注意对应的权值并没有恢复,是随机的;
saver.save则同时保留了图的信息和权值,Index,ckpt,meta等等,但是saver.restore的时候只restore了权值信息,不会restore对应的图的相关信息!
3)Graph或者Operation或者Variable等都会转变为protocol buffer组成的nodeDef或者GraphDef(多个NodeDef组成)!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow中问题总结 的相关文章

随机推荐

  • Large Language Models and Knowledge Graphs: Opportunities and Challenges

    本文是LLM系列的文章 针对 Large Language Models and Knowledge Graphs Opportunities and Challenges 的翻译 大语言模型和知识图谱 机会与挑战 摘要 1 引言 2 社区
  • 40道Python经典面试题(附答案)

    1 什么是Python 使用Python有什么好处 Python是一种编程语言 包含对象 模块 线程 异常和自动内存管理 Python的好处在于它简单易用 可移植 可扩展 内置数据结构 并且它是一个开源的 2 什么是PEP 8 PEP 8是
  • uniapp踩坑-使用vue-cli框架对node版本有要求

    uniapp踩坑 使用vue cli框架对node版本有要求 前言 背景 最近在开发uniapp 官方文档提供的开发方式有两种 一种是通过HBulider可视化界面创建 一种是通过vue cli命令行创建 因为可视化更加方便 所以就使用了可
  • 设计算法来统计一个输入字符串中所包含的整数个数,并输出这些数

    设计算法来统计一个输入字符串中所包含的整数个数 并输出这些数 假设输入的字符既有数字又有非数字的字符 例如 ak123x456 17960 302gef4563 其中连续数字作为一个整体看成整数 例如123 456等 include
  • 二进制补码运算

    在计算机系统中 数值一律用补码来表示和存储 原因在于 使用补码 可以将符号位和数值域统一处理 同时 加法和减法也可以统一处理 此外 补码与原码相互转换 其运算过程是相同的 不需要额外的硬件电路 补码运算 正数补码是其原码 负数的补码为其数值
  • react使用dnd实现简单的拖拽排序

    在react项目中使用dnd实现一个简单的拖拽排序功能 首先简单的介绍一下dnd React DnD是一组React实用程序 可帮助您构建复杂的拖放界面 同时保持组件之间的耦合 1 DndProvider组件为您的应用程序提供React D
  • Vue 3 快速上手

    Vue 3 快速上手 官网 配置环境变量和nodejs node vue 开发环境搭建 第二天的时候 vue create xxx xxx xxx 项目名 失败 前端项目问题解决 第二天修改环境配置之后 纠正之后 概念 思想 创建项目 cm
  • 国产适配之MySQL替换为达梦8数据库

    1 背景 项目中要做国产化 MySQL要替换成达梦8数据库 项目中MySQL的建表语句和内置数据通过 sql文件维护 安装时会初始化表结构和表内置数据 项目架构为SpringBoot JPA Mybatis 适配工作内容包括数据库迁移 数据
  • Vue实现点击更改页面字体大小

    html 1 点击大中小 页面字体会切换到对应的css样式 2 big mid sml 代表预设定了三种字体大小 3 on 代表当前选中了哪一个的样式 big min sml 选中后字体加粗 4 v html 利用后端传来的页面数据 通过v
  • text段、data段和bss段知识介绍

    一 总体概述 1 bss 可读可写 bss是英文Block Started by Symbol的简称 通常是指用来存放程序中未初始化的全局变量的一块内存区域 在程序载入时由内核清0 BSS段属于静态内存分配 它的初始值也是由用户自己定义的连
  • go语言基础2——流程控制if、for、switch、goto、break、continue

    目录 if else 分支结构 if条件判断基本写法 if条件判断特殊写法 for 循环结构 无限循环 for range 键值循环 switch case goto 跳转到指定标签 break 跳出循环 continue 继续下次循环 练
  • html手风琴效果代码,一款漂亮的纯CSS手风琴效果代码

    本文分享了纯css实现的手风琴 喜欢的朋友可以看看 源码CSS部分 accordionMenu width 500px margin 0 auto padding 10px background size fff color 424242
  • 前端代码深浅拷贝四种方式

    今天公司的实习生有问我代码怎么深拷贝 下面我就给大家整理四种前端代码深拷贝的四种方式 前端数据分为基本数据类型和引用数据类型 当我们拷贝引用数据类型的时候 我们希望改变新数组 对象 不改变原本的数组 对象 我们往往会深拷贝数据 下面是四种深
  • Python paramiko文件传输显示上传下载进度条源码 - stdout

    本文Python Code基于chatGPT的推荐 并修改调试实际运行通过 供学习参考 通过使用python paramiko库 实现文件传输 包括上传和下载 并且同步显示上传和下载进度条信息 实时获取传输进度 避免print方式频繁刷屏困
  • Spring Boot 配置多数据源

    Spring Boot 配置多数据源 作者 Grey 原文地址 博客园 Spring Boot 配置多数据源 CSDN Spring Boot 配置多数据源 说明 本文主要介绍了 Spring Boot 下如何配置多数据源 环境和版本 Ja
  • 静态路由综合实验

    目录 实验要求 实验步骤 1 子网划分 2 配置IP和环回 3 配置静态路由 实现全网可达 4 配置缺省路由 使R1 R4可以访问5 5 5 5 24 5 配置空接口防环 6 ping测试 实验要求 1 除R5的环回地址固定以外 整个其他所
  • 10个最好的 jQuery 视频插件

    在这篇文章中已经收集了10个最佳的jQuery视频插件 帮助开发人员容易地实现网站播放影片功能 可以显示视频和视频播放列表 1 Bigvideo js BigVideo js 是一个jQuery插件能够 让你很方便将视频作为网站的背景 它可
  • FCM算法的matlab实现(Fuzzy C-means 算法)

    FCM算法 F C M FCM FCM算法简介 F C M FCM FCM算法原理 F C M FCM FCM算法实现 m a t l a b matlab matlab F C M FCM FCM算法简介 F C M FCM FCM算法属
  • `com.mysql.jdbc.Driver‘. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver‘的解决办法

    com mysql jdbc Driver This is deprecated The new driver class is com mysql cj jdbc Driver 的解决办法 说多了都是泪 搭建这个项目遇到的问题太多了 cs
  • Tensorflow中问题总结

    1 ValueError Variable bar v does not exist or was not created with tf get variab le Did you mean to set reuse None in Va