Comments (3)
From the sort demo, tf.global_variables_initializer
is only executed once right after creating the interactive session:
sess = tf.Session()
sess.run(tf.global_variables_initializer())
Once the session is created and the variables initialized once, you should be able to evaluate the network for any other values of the placeholders without any additional requirements to call the initializers again (Just like in any other TF model).
If you do not want to deal with variable initialization explicitly, you may be interested on using tf.train.MonitoredSession
or tf.train.SingularMonitoredSession
instead of tf.Session
, and they will do variable intialization automatically.
Hope this helps :)
from graph_nets.
Thank you for your answer, Alvaro.
I should clarify my issue a little better:
A typical method from the graph_net examples is to initialize a model with placeholders so that shapes are known for building the computation graph. Once this model has been initialized, the global variables are initialized and the previously initialized model is re-used during the training cycles for feeding.
However, when we initialize our model, e.g. (from the physics demo):
output_ops_tr = model(input_graph_tr, num_processing_steps_tr)
we assume the number of predictions/estimations are fixed (num_processing_steps_tr).
Now, what can one do if the number of model estimations varies during training? The only idea which comes to my mind is to set the num_processing_steps_tr to the highest number that occurs during training and computing the loss only over the required estimation length.
Is there a more elegant way to do this?
from graph_nets.
As you said, the easy solution is to have a fixed maximum number of num_processing_steps. This is actually the option with the fastest inference as well, however it is not only not very elegant, but if you make the number of thinking steps arbitrarily high, the time it takes to build the graph will grow linearly with that,
The alternative solution is to have a placeholder that contains the number of processing steps, so you can change the value dynamically. However, this would mean that now the exact number of processing steps is not known at graph definition time, so you cannot longer use a python for
loop to build the thinking steps in the graph. Instead you would have to use a tf.while_loop
that defines an in-graph loop with a number of iterations that can change dynamically as function of a tensor.
from graph_nets.
Related Issues (20)
- GraphTuple from batched tensors does not offset Senders/Receivers HOT 3
- Support Apple Silicon HOT 6
- Error while importing sonnet about gast HOT 1
- AttributeError: module 'sonnet' has no attribute 'AbstractModule' HOT 3
- issue with passing *_model_kwargs parameter HOT 2
- how to build an heterogeneous graph network? HOT 3
- Question about repeat implementation HOT 2
- Inference - shortest path demo HOT 1
- What's the difference between graph_nets and jraph? HOT 3
- Performance issue in /graph_nets/tests (by P3) HOT 2
- Error when calling trained model: "AttributeError: tuple object has no attribute "as_list" HOT 3
- Performance issue HOT 9
- Training on batches of GraphsTuples? HOT 5
- Is this project still live? HOT 2
- Error while using the placeholder function from utils_tf HOT 1
- ZeroDivsion error? HOT 2
- no output from processor HOT 6
- Issue with understanding HOT 2
- TensorFlow 1 is not supported in Google Colab HOT 1
- Problem with plot_compare_graphs function HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graph_nets.