一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如:

def repeat_value():

  weight=tf.variable(tf.random_normal([5,5,6]),name='weight')

  return weight

如果多次调用函数如:

result1=repeat_value()

result2=repeat_value() # 重复调用

将会重复创建一份变量,却保存相同模型参数。若使用字典可以解决此类问题,却破坏模型封装性(有关字典解决此问题,可留言回复)。

二 . tf.get_variable()与tf.variable_scope()方法可以解决上面问题,其中前者负责创建或获取指定名称的变量,后者负责传入tf.get_variable()方法的变量名称的名字空间。

def a(input,kernel_shape):
w=tf.get_variable('w',kernel_shape,initializer=tf.random_normal()) #创建获取名叫w的变量
conv=tf.nn.conv2d(input,w,strides=[1,1,1,1],padding='SAME')
return conv def b(img):
with tf.variable_scope("conv1"): #创建conv1/w变量
r1=a(img,[5,5,32,32])
with tf.variable_scope("conv2"): #创建conv2/w变量
r2=a(r1,[5,5,32,32])
return r2
# with上下文中定义的变量都会加上tf.variable_scope方法中定义的前缀,这样能够通过不同的变量作用域区分同类网络的不同参数。
# 但第二次调用函数b(),tf.get_variable()就会抛出变量已存在,无法解决复用问题。因此,需要加上reuse=True,如下: def b(img):
with tf.variable_scope("conv1",reuse=True): #创建conv1/w变量
r1=a(img,[5,5,32,32])
with tf.variable_scope("conv2",reuse=True): #创建conv2/w变量
r2=a(r1,[5,5,32,32])
return r2
# 更改后可以反复调用了。 三.共享作用域下的初始化(类似c++类中的继承):
with tf.variable_scope("conv1",initializer=tf.constant_initializer(0.8)): #创建conv1/w变量
w=tf.get_variable('w',[1]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化
w1 = tf.get_variable('w1', [1,2], initializer=tf.random_normal()) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
# 使用本身initializer=tf.random_normal()初始化。 with tf.variable_scope("conv2"): #嵌套conv1下的作用域
w2 = tf.get_variable('w2', [1,2]) #此处使用外围的initializer=tf.constant_initializer(0.8)初始化(类似继承)
w1 = tf.get_variable('w1', [1,2], tf.constant_initializer(0.4)) # 此处覆盖initializer=tf.constant_initializer(0.8)初始化,
# 使用本身tf.constant_initializer(0.4)初始化。

tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法的更多相关文章

  1. TensorFlow中的变量和常量

    1.TensorFlow中的变量和常量介绍 TensorFlow中的变量: import tensorflow as tf state = tf.Variable(0,name='counter') ...

  2. 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量

    1.tf.Variable([[1, 2]])  # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...

  3. Tensorflow中的变量

    从初识tf开始,变量这个名词就一直都很重要,因为深度模型往往所要获得的就是通过参数和函数对某一或某些具体事物的抽象表达.而那些未知的数据需要通过学习而获得,在学习的过程中它们不断变化着,最终收敛达到较 ...

  4. 2、Tensorflow中的变量

    2.Tensorflow中的变量注意:tf中使用 变量必须先初始化下面是一个使用变量的TF代码(含注释): # __author__ = "WSX" import tensorfl ...

  5. 83、Tensorflow中的变量管理

    ''' Created on Apr 21, 2017 @author: P0079482 ''' #如何通过tf.variable_scope函数来控制tf.ger_variable函数获取已经创建 ...

  6. TensorFlow中的变量命名以及命名空间.

    What: 在Tensorflow中, 为了区别不同的变量(例如TensorBoard显示中), 会需要命名空间对不同的变量进行命名. 其中常用的两个函数为: tf.variable_scope, t ...

  7. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  8. php学习笔记4--php中的变量作用域

    变量作用域:可以简单地理解为变量的可见区域,变量能被访问的范围.如同其他语言,php中也有全局作用域和局部作用域之分,但是不同的是:php中的全局作用域指的是:只能在函数外部使用,而局部作用域指的是: ...

  9. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

随机推荐

  1. 通过async实现协程的延迟执行及结果获取

    在上一次https://www.cnblogs.com/webor2006/p/12022065.html对于协程的async和wait进行了初步的学习,其可以加速执行的性能,其实对于async它是提 ...

  2. 异步HttpClient大量请求

    由于项目中有用到HttpClient异步发送大量http请求,所以做已记录 思路:使用HttpClient连接池,多线程 public class HttpAsyncClient { private ...

  3. 05-C#笔记-基本变量

    1. 不支持括号初始化: 2. 支持强制类型转化: 3.运算规则同C++ 参考: http://www.runoob.com/csharp/csharp-variables.html

  4. volatile 关键字 和 i++ 原子性

    package com.mozq.multithread; /** * 深入理解Java虚拟机 volatile 关键字 和 i++ 原子性. */ public class VolatileTest ...

  5. 排序算法-桶排序(Java)

    package com.rao.sort; import java.util.*; /** * @author Srao * @className BucketSort * @date 2019/12 ...

  6. three.js 设置透明度

    原文:https://www.cnblogs.com/amy2011/p/6148736.html 材质: 材质就像物体的皮肤,决定了几何体的外表,例如是否像草地/金属,是否透明,是否显示线框等 Th ...

  7. 网络协议 18 - CDN

    到现在为止,我们基本上已经了解了网络协议中的大部分常用协议,对于整个 HTTP 请求流程也较为熟悉了.从无到有后,我们就要考虑如何优化“有”这个过程,也就是我们常见的请求优化.而现在的技术栈中,CDN ...

  8. Spring Boot 知识笔记(servlet、监听器、拦截器)

    一.通过注解自定义servlet package net.Eleven.demo.servlet; import javax.servlet.ServletException; import java ...

  9. vb.net 对字符串中的括号匹配进行判断,容许嵌套

    '   括号检查 '     括号共有四种:  1(英文圆括号),2(中文圆括号),3[方括号],4{花括号} '      要左右匹配(可以嵌套) Private Shared Function i ...

  10. redis实现mysql的数据缓存

    环境设定base2 172.25.78.12 nginx+phpbase3 172.25.78.13 redis端base4 172.25.78.14 mysql端# 1.在base2(nginx+p ...