TensorFlow 中 name_scope/ variable_scope 的使用
阿新 • • 發佈:2018-12-12
為了說明TensorFlow 中 name_scope/ variable_scope 的使用,直接上程式碼,方便檢視,怎麼使用的
""" """ import multiprocessing import threading import tensorflow as tf import numpy as np import gym import os import shutil import matplotlib.pyplot as plt class ACNet(object): def __init__(self, scope, globalAC=None): return null with tf.name_scope('name_scope_2') as scope: # tf.get_variable_scope().reuse_variables() var1 = tf.get_variable(name='var1', shape=[1], initializer=None, dtype=tf.float32) # var11 = tf.get_variable(name='var1') var2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32) var21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32) #在 tf.name_scope() 環境下 #1: tf.get_variable() 建立的變數名不受 name_scope 的影響; #2: tf.Variable() 建立變數時,name 屬性值允許重複(底層實現時,會自動引入別名機制) #在 tf.variable_scope(name) 環境下 #1: tf.get_variable() 建立的變數名受 variable_scope 的影響; #2: tf.Variable() 建立變數時,建立的變數名受 variable_scope 的影響,並且如果先前有name,後續的name會變為name1 #3: tf.Variable() 建立變數時,name 屬性值允許重複(底層實現時,會自動引入別名機制) with tf.variable_scope("one"): a = tf.get_variable("v", [1]) #a.name == "one/v:0" # with tf.variable_scope("one"): # b = tf.get_variable("v", [1]) #建立兩個名字一樣的變數會報錯 ValueError: Variable one/v already exists with tf.variable_scope("one", reuse = True): #注意reuse的作用。 c = tf.get_variable("v", [1]) #c.name == "one/v:0" 成功共享,因為設定了reuse v2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32) v21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32) if __name__ == "__main__": with tf.Session() as sess: print("================name_scope==") print(var1.name) #tf.get_variable()函式生成的變數,可以實現變數共享,不帶name_scope的名字 # print(var11.name) print(var2.name) #tf.Variable()函式生成的變數,不可以實現變數共享,帶name_scope的名字 print(var21.name) print("===============variable_scope==") print(a.name) # print(b.name) print(c.name) print(v2.name) print(v21.name)
執行結果如下所示: