webentwicklung-frage-antwort-db.com.de

Ausführen mehrerer Diagramme in einer Session - Tensorflow-API

Tensorflow API hat einige vorab trainierte Modelle zur Verfügung gestellt und es uns ermöglicht, sie mit jedem Datensatz zu trainieren. 

Ich würde gerne wissen, wie man mehrere Graphen in einer Tensorflow-Sitzung initialisiert und verwendet. Ich möchte zwei trainierte Modelle in zwei Graphen importieren und für die Objekterkennung verwenden. Ich versuche jedoch, mehrere Graphen in einer Sitzung auszuführen.

Gibt es eine bestimmte Methode, um mit mehreren Diagrammen in einer Sitzung zu arbeiten?.

Ein anderes Problem ist, auch wenn ich zwei verschiedene Sitzungen für zwei verschiedene Diagramme erstelle und versuche, mit ihnen zu arbeiten. Am Ende der ersten Sitzung bekomme ich ein ähnliches Ergebnis. 

6
saikishor

Jedes Session kann nur ein einzelnes Graph haben. Davon abgesehen, je nachdem, was Sie konkret tun, haben Sie mehrere Möglichkeiten.

Die erste Option besteht darin, zwei separate Sitzungen zu erstellen und in jede Sitzung ein Diagramm zu laden, wie in der Dokumentation hier erläutert. Sie haben erwähnt, dass Sie bei jeder Sitzung unerwartet ähnliche Ergebnisse mit diesem Ansatz erhalten haben, aber ohne weitere Details ist es schwierig, herauszufinden, was das Problem in Ihrem Fall ist. Ich würde vermuten, dass entweder derselbe Graph in jede Sitzung geladen wurde oder wenn Sie versuchen, jede Sitzung separat auszuführen, die gleiche Sitzung zweimal ausgeführt wird, aber ohne weitere Details ist es schwer zu sagen.

Die zweite Option besteht darin, beide Diagramme als Unterdiagramme des Hauptsitzungsdiagramms zu laden. Sie können zwei Bereiche innerhalb des Diagramms erstellen und das Diagramm für jedes Diagramm erstellen, das Sie innerhalb dieses Bereichs laden möchten. Dann können Sie sie einfach als unabhängige Grafiken behandeln, da keine Verbindungen zwischen ihnen bestehen. Wenn Sie normalerweise globale Funktionen für Diagramme ausführen, müssen Sie angeben, für welchen Bereich diese Funktionen gelten. Wenn Sie beispielsweise mit einem Optimierungsprogramm ein Update auf einem der Subgraphs durchführen, müssen Sie nur die trainierbaren Variablen für den Gültigkeitsbereich des Subgraphs abrufen. Verwenden Sie dabei etwa das, was in diese Antwort gezeigt wird.

Wenn Sie nicht explizit benötigen, dass die beiden Diagramme innerhalb des TensorFlow-Diagramms in irgendeiner Weise miteinander interagieren können, würde ich den ersten Ansatz empfehlen, damit Sie nicht durch die zusätzlichen Ränder springen müssen, die die Untergraphen benötigen (z Umfang Ihrer Arbeit zu einem bestimmten Zeitpunkt und die Möglichkeit, die globalen Dinge grafisch zwischen den beiden zu teilen).

11
golmschenk

Das Diagrammargument in einer Sitzung sollte Kein sein (das Standarddiagramm oder).

Hier ist der Quellcode

class BaseSession(SessionInterface):
  """A class for interacting with a TensorFlow computation.
  The BaseSession enables incremental graph building with inline
  execution of Operations and evaluation of Tensors.
  """

  def __init__(self, target='', graph=None, config=None):
    """Constructs a new TensorFlow session.
    Args:
      target: (Optional) The TensorFlow execution engine to connect to.
      graph: (Optional) The graph to be used. If this argument is None,
        the default graph will be used.
      config: (Optional) ConfigProto proto used to configure the session.
    Raises:
      tf.errors.OpError: Or one of its subclasses if an error occurs while
        creating the TensorFlow session.
      TypeError: If one of the arguments has the wrong type.
    """
    if graph is None:
      self._graph = ops.get_default_graph()
    else:
      if not isinstance(graph, ops.Graph):
        raise TypeError('graph must be a tf.Graph, but got %s' % type(graph))

Und Sie können aus dem folgenden Ausschnitt sehen, dass es keine Liste sein kann. 

if graph is None:
  self._graph = ops.get_default_graph()
else:
  if not isinstance(graph, ops.Graph):
    raise TypeError('graph must be a tf.Graph, but got %s' % type(graph))

Und vom Objekt ops.Graph (find by help (ops.Graph)) können nicht mehrere Graphen verwendet werden. 

Für mehr über das Sehen und die Grafik: 

If no `graph` argument is specified when constructing the session,
the default graph will be launched in the session. If you are
using more than one graph (created with `tf.Graph()` in the same
process, you will have to use different sessions for each graph,
but each graph can be used in multiple sessions. In this case, it
is often clearer to pass the graph to be launched explicitly to
the session constructor.
0
lerner