Sie könnten tf.get_variable()
statt ‚tf.Variable` verwenden möchten.
with tf.variable_scope('var_scope', reuse=False) as var_scope:
var = tf.get_variable('var', [1])
var2 = tf.Variable([1], name='var2')
print var.name # var_scope/var:0
print var2.name # var_scope/var2:0
with tf.variable_scope('var_scope', reuse=True) as var_scope:
var = tf.get_variable('var', [1])
var2 = tf.Variable([1], name='var2')
print var.name # var_scope/var:0
print var2.name # var_scope_1/var2:0
Der Grund dahinter ist, ich denke, dass in Ihrem Beispiel, obwohl Sie erfolgreich „erneut eingegeben“ die variable_scope Sie haben, was wirklich Ihre Variablennamen beeinflusst, ist ein weiterer Anwendungsbereich name_scope
intead von variable_scope
wie Sie genannt Macht vermuten. Aus dem offiziellen Dokument here Sie können sehen, dass:
, wenn wir mit tf.variable_scope tun ("name"), dies eröffnet implizit eine tf.name_scope ("name").
name_scope
ist ursprünglich für die Verwaltung von Operationsnamen (wie add
, matmul
) verwendet, da tf.Variable
tatsächlich eine Operation ist und dessen Betrieb Name durch, so der Name des name_scope
eher erstellt von Variablen „geerbt“ wird als variable_scope
wird als Präfix verwendet.
Aber wenn Sie tf.Variable verwenden möchten, können Sie auch direkt name_scope
in with
Anweisung:
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
with tf.name_scope(n_scope) as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
Eine Sache, darauf zu achten ist, dass man den Umfang varible als Argument zuvor aus erbeuteten passieren sollte eine with
Anweisung, wenn Sie einen Namen Umfang, anstatt str
Bereichsname zu „re-enter“ wollen:
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope/var_1:0
with tf.name_scope('n_scope') as n_scope:
var = tf.Variable([1], name='var')
print var.name #n_scope_1/var_1:0
Achten Sie auf das Argumentgeben.Dieses Verhalten wird wieder in doc Reihe von name_scope
beschrieben:
Der Namen Argument wird wie folgt interpretiert werden:
Eine Zeichenfolge (nicht mit '/' endet) wird neuen einen Bereichsnamen, in dem Name an das Präfix aller Vorgänge im Kontext angefügt wird. Wenn der Name zuvor verwendet wurde, wird er durch , der self.unique_name (name) aufruft, eindeutig gemacht.
Ein Bereich zuvor von einem mit g.name_scope (...) als Umfang erfaßt: Aussage als „absoluten“ namen Umfang behandelt werden, die es ermöglicht, erneut eingeben bestehende Bereiche machen.
Ein Wert von None oder die leere Zeichenfolge setzt den aktuellen Namen Bereich auf den Namenbereich der obersten Ebene (leer) zurück.
Thx, super nützlich! – Mathew