# EagerSession

public final class **EagerSession** An environment for executing TensorFlow operations eagerly.

Eager execution is an imperative programming environment that evaluates operations
immediately, without building graphs. Operations return concrete values instead of constructing a
computational graph to run later, as with `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/Graph`s and `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/Session`s.

This makes it easy to develop with TensorFlow and debug models, as it behaves more like a
standard programming library.

Instances of a `EagerSession` are thread-safe.

<br />

<br />

<br />

### Nested Classes

|---|---|---|---|
| enum | [EagerSession.DevicePlacementPolicy](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.DevicePlacementPolicy) || Controls how to act when we try to run an operation on a given device but some input tensors are not on that device. |
| class | [EagerSession.Options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options) ||   |
| enum | [EagerSession.ResourceCleanupStrategy](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.ResourceCleanupStrategy) || Controls how TensorFlow resources are cleaned up when they are no longer needed. |

### Public Methods

|---|---|
| synchronized void | [close](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#close())() |
| static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession) | [create](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#create())() Returns an `EagerSession` configured with default options. |
| static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession) | [getDefault](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#getDefault())() Returns the default eager session Once initialized, the default eager session remains active for the whole life of the application, as opposed to sessions obtained from `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#create()` or `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options#build()` which should be closed after their usage. |
| static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession) | [initDefault](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#initDefault(org.tensorflow.EagerSession.Options))([EagerSession.Options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options) options) Initializes the default eager session, which remains active for the lifetime of the application. |
| [OperationBuilder](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder) | [opBuilder](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#opBuilder(java.lang.String,%20java.lang.String))(String type, String name) Returns a builder to create a new `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/Operation`. |
| static [EagerSession.Options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options) | [options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#options())() Returns an object that configures and builds a `EagerSession` with custom options. |

### Inherited Methods

From class java.lang.Object

|---|---|
| boolean | equals(Object arg0) |
| final Class\<?\> | getClass() |
| int | hashCode() |
| final void | notify() |
| final void | notifyAll() |
| String | toString() |
| final void | wait(long arg0, int arg1) |
| final void | wait(long arg0) |
| final void | wait() |

From interface [org.tensorflow.ExecutionEnvironment](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/ExecutionEnvironment)

|---|---|
| abstract [OperationBuilder](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder) | [opBuilder](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/ExecutionEnvironment#opBuilder(java.lang.String,%20java.lang.String))(String type, String name) Returns a builder to create a new `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/Operation`. |

From interface java.lang.AutoCloseable

|---|---|
| abstract void | close() |

## Public Methods

#### public synchronized void
**close**
()

<br />

#### public static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession)
**create**
()

Returns an `EagerSession` configured with default options.

**WARNING:** Instances of `EagerSession` returned by this method must be explicitly
freed by invoking `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#close()` when they are no longer needed. This could be achieve using
the \`try-with-resources\` technique.

Example usage:

    try (EagerSession session = EagerSession.create()) {
       Ops tf = Ops.create(session);
       // build execute operations eagerly...
     }
     
<br />

<br />

<br />

#### public static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession)
**getDefault**
()

Returns the default eager session

Once initialized, the default eager session remains active for the whole life of the
application, as opposed to sessions obtained from `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#create()` or `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options#build()`
which should be closed after their usage.

The default set of `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options` is used to initialize the session on the first call. To
override this behavior, it is possible to invoke `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#initDefault(org.tensorflow.EagerSession.Options)` with a different
set of options prior to this first call.

Example usage:

    // Starting to build eager operations using default session, by calling
     // EagerSession.getDefault() implicitly
     Ops tf = Ops.create();

     // Starting to build eager operations using default session, by calling
     // EagerSession.getDefault() explicitly
     Ops tf = Ops.create(EagerSession.getDefault());
     
<br />

<br />

<br />

<br />

##### Returns

- default eager session

##### See Also

- `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#initDefault(org.tensorflow.EagerSession.Options)`

#### public static [EagerSession](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession)
**initDefault**
([EagerSession.Options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options) options)

Initializes the default eager session, which remains active for the lifetime of the
application.

This method is implicitly invoked on the first call to `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#getDefault()`, but can also
be invoked explicitly to override default options.

Note that calling this method more than once will throw an `IllegalArgumentException`
as the default session cannot be modified once it has been created. Therefore, it is important
to explicitly initialize it before `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#getDefault()` is invoked for the first time from any
thread.

Example usage:

    // Initializing default session to override default options is valid but
     // is optional
     EagerSession.initDefault(EagerSession.options().async(true));

     // Starting to build eager operations using default session, by calling
     // EagerSession.getDefault() implicitly
     Ops tf = Ops.create();

     // Initializing default session more than once or after using it is not
     // permitted and throws an exception
     EagerSession.initDefault(EagerSession.options().async(true));  // throws
     
<br />

<br />

<br />

<br />

##### Parameters

| options | options to use to build default session |
|---|---|

##### Returns

- default eager session

##### Throws

| IllegalStateException | if the default session is already initialized |
|---|---|

##### See Also

- `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#getDefault()`

#### public [OperationBuilder](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder)
**opBuilder**
(String type, String name)

Returns a builder to create a new `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/Operation`.

##### Parameters

| type | of the Operation (i.e., identifies the computation to be performed) |
| name | to refer to the created Operation in this environment scope. |
|---|---|

##### Returns

- an `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder` to create an Operation when `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder#build()` is invoked. If `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/OperationBuilder#build()` is not invoked, then some resources may leak.

#### public static [EagerSession.Options](https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession.Options)
**options**
()

Returns an object that configures and builds a `EagerSession` with custom options.

**WARNING:** Instances of `EagerSession` returned by this method must be explicitly
freed by invoking `https://www.tensorflow.org/versions/r2.13/api_docs/java/org/tensorflow/EagerSession#close()` when they are no longer needed. This could be achieve using
the \`try-with-resources\` technique.

Example usage:

    try (EagerSession session = EagerSession.options().async(true).build()) {
       Ops tf = Ops.create(session);
       // build execute operations eagerly and asynchronously...
     }
     
<br />

<br />

<br />