热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

tensolrflow中get_variable和tf.Variable区别

先来看下二者的定义:Variable:必须给定的参数只有一个initial_value,如果名字没指定会自己生成一个Variable:0类似于此def__init__

  先来看下二者的定义:
  
Variable:必须给定的参数只有一个initial_value,如果名字没指定会自己生成一个Variable:0类似于此

  def __init__(self, initial_value=None, trainable=True, collectiOns=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None):

get_variable:必须给定的参数只有name

def get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collectiOns=None, caching_device=None, partitiOner=None, validate_shape=True, use_resource=None, custom_getter=None):

  tf.Variable是用于生成一个新的变量,tf.get_variable是获取一个已经存在的变量,如果不存在再重建,在tensorflow中每个变量都有一个scope也就是命名空间,一个变量要的全名由scope和name唯一确定,因为tf.Variable不涉极变量复用问题,命名空间意义不是太明显,只有在用tf.get_variable时才会体会用命名空间的作用。
  

tf.Variable看使用详解:

import tensorflow as tf;
import numpy as np;
import matplotlib.pyplot as plt;

a1 = tf.Variable(initial_value=[[1.0,2.0,3.0],[1.0,2.0,3.0]],name="a1")
a2 = tf.Variable(initial_value=[[1.0,2.0,3.0],[1.0,2.0,3.0]],name="a2")
a3 = tf.Variable(initial_value=[[1.0,2.0,3.0],[1.0,2.0,3.0]],name="a1")
with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        print(sess.run(a1))
        print(sess.run(a2))
        print(sess.run(a3))
        print(a1)
        print(a2)
        print(a3)

输出如下所示:
这里写图片描述
 此处没有调用with tf.variable_scope(“scope_1”):,可以认为所有变量的scope为空,a3定义时name=”a1”,在这种情况下tensorflow会把a3重命名。也就是tf.Variable无论何时都能创建成功,无论是否有同名变量
 
  

tf.get_variable使用详解:

# a1 = tf.get_variable(name='a1', shape=[2, 3], initializer=tf.random_normal_initializer(mean=0, stddev=1))
with tf.Session() as sess:
    with tf.variable_scope("scope_1", reuse=False):
        a1 = tf.get_variable(name='a1', shape=[2, 3], initializer=tf.random_normal_initializer(mean=0, stddev=1))
        # a1 = tf.get_variable(name='a1')
        sess.run(tf.global_variables_initializer())
        print(sess.run(a1))

输出如下所示:
这里写图片描述

 把with tf.variable_scope(“scope_1”, reuse=False):中的resue设为True则上面的代码运行报错,这说明只有当 reuse=False时才可以创建变量, reuse=True时只能获取已有的变量或者通过tf.Variable创建新的变量,使用tf.get_variable一般都是和with tf.variable_scope(“scope_1”, reuse=True)配合使用的,共享已有变量,如果需要新变量则通过tf.Variable来创建


推荐阅读
author-avatar
手机用户2602923801
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有