Tensorflow : Graphe est finalisé et ne peut pas être modifié
Je suis en train d'enregistrer des variables via des points de contrôle pour introduire la tolérance de panne à mon programme. Je suis en train de réaliser cela en utilisant le MonitoredTrainingSession fonction. Voici ma configuration:-
import tensorflow as tf
global_step = tf.Variable(10, trainable=False, name='global_step')
x = tf.constant(2)
with tf.device("/job:local/task:0"):
y1 = tf.Variable(x + 300)
with tf.device("/job:local/task:1"):
y2 = tf.Variable(x**2)
with tf.device("/job:local/task:2"):
y3 = tf.Variable(5*x)
with tf.device("/job:local/task:3"):
y0 = tf.Variable(x - 66)
y = y0 + y1 + y2 + y3
model = tf.global_variables_initializer()
saver = tf.train.Saver(sharded=True)
chief = tf.train.ChiefSessionCreator(scaffold=None, master='grpc://localhost:2222', config=None, checkpoint_dir='/home/tensorflow/codes/checkpoints')
summary_hook = tf.train.SummarySaverHook(save_steps=None, save_secs=10, output_dir='/home/tensorflow/codes/savepoints', summary_writer=None, scaffold=None, summary_op=tf.summary.tensor_summary(name="y", tensor=y))
saver_hook = tf.train.CheckpointSaverHook(checkpoint_dir='/home/tensorflow/codes/checkpoints', save_secs=None, save_steps=True, saver=saver, checkpoint_basename='model.ckpt', scaffold=None)
# with tf.train.MonitoredSession(session_creator=ChiefSessionCreator,hooks=[saver_hook, summary_hook]) as sess:
with tf.train.MonitoredTrainingSession(master='grpc://localhost:2222', is_chief=True, checkpoint_dir='/home/tensorflow/codes/checkpoints',
scaffold=None, hooks=[saver_hook,summary_hook], chief_only_hooks=None, save_checkpoint_secs=None, save_summaries_steps=True, config=None) as sess:
while not sess.should_stop():
sess.run(tf.global_variables_initializer())
while not sess.should_stop():
result = sess.run(y)
print(result)
J'ai le RuntimeError qui je n'arrive pas à résoudre:-
Traceback (most recent call last):
File "add_1.py", line 39, in <module>
sess.run(tf.global_variables_initializer())
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.py", line 1187, in global_variables_initializer
return variables_initializer(global_variables())
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/variables.py", line 1169, in variables_initializer
return control_flow_ops.group(*[v.initializer for v in var_list], name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2773, in group
deps.append(_GroupControlDeps(dev, ops_on_device[dev]))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2721, in _GroupControlDeps
return no_op(name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_control_flow_ops.py", line 186, in no_op
result = _op_def_lib.apply_op("NoOp", name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2199, in create_op
self._check_not_finalized()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1925, in _check_not_finalized
raise RuntimeError("Graph is finalized and cannot be modified.")
RuntimeError: Graph is finalized and cannot be modified.
OriginalL'auteur itsamineral | 2017-01-23
Vous devez vous connecter pour publier un commentaire.
La cause de votre erreur semble être que MonitoredTrainingSession a finalisé (congelés), le graphique et votre
tf.global_variable_initializer()
n'est plus en mesure de le modifier.Cela dit, il y a plusieurs choses qui nécessitent l'attention de:
1) Pourquoi avez-vous essayer à plusieurs reprises de les initialiser toutes les variables ici?
2) Il semble que certains de vos code est déjà inclus dans
MonitoredTrainingSession
, par exempleChiefSessionCreator
. Pouvez vous s'il vous plaît prendre un autre regard sur le code (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/monitored_session.py#L243) ou recherche pour son exemple de l'utilisation et de voir commentMonitoredTrainingSession
est censé être utilisé?Lorsque vous avez exécuté une seconde fois, il tente de charger votre point de contrôle à partir d'une exécution précédente, qui est absent de la global_step. Découvrez ce fil (stackoverflow.com/questions/36113090/...) comment faire pour sauvegarder et restaurer global_step. Et ici (github.com/tensorflow/tensorflow/blob/...) comment initialiser un.
OriginalL'auteur guinny
Cela peut ne pas être recommandé pour votre cas d'utilisation, mais il est possible de unfinalize un Graphique:
OriginalL'auteur matwilso
Si vous souhaitez initialiser le graphique de la boucle, vous pouvez utiliser la fonction pour créer un nouveau graphique sur le dessus de la boucle.
OriginalL'auteur drimyus
Depuis votre but est d'utiliser
MonitoredTrainingSession
pour vous la vérification, l'utilisation est beaucoup plus simple que votre exemple:MonitoredTrainingSession
pour vous.save_checkpoint_secs
vous pouvez modifier la fréquence de vérification de l'10 minutes par défaut. J'ai trouver une fréquence plus élevée n'est pas la peine: l'enregistrement des points de contrôle n'est pas gratuit, donc très fréquentes checkpoint sera à la fin du ralentissement de la formation de down.ChiefSessionCreator
et gRPC config est uniquement nécessaire pour l'distribués en cours d'exécution (voir ici pour une description des concepts. De la même manière à l'attribution de la fpo à des appareils spécifiques - assurez-vous que vous avez vraiment besoin de faire cela avant de l'utiliser, car il peut ralentir les choses si vous ne faites pas attention.tf.Variable()
- ils déjà sont variables.save_summaries_steps
pour le suivi de la formation avec tensorboard, mais, par défaut, que se passera tous les 100 pas de toute façon.OriginalL'auteur drrngrvy