FailedPreconditionError: Forsøk på å bruke initialisert i tensorflow

stemmer
42

Jeg jobber gjennom tensorflow opplæringen , som bruker en rare format for å laste opp dataene. Jeg ønsker å bruke NumPy eller pandaer format for dataene, slik at jeg kan sammenligne det med scikit lære resultater.

Jeg får sifret anerkjennelse data fra Kaggle: https://www.kaggle.com/c/digit-recognizer/data .

Her koden fra tensorflow opplæringen (som fungerer fint):

# Stuff from tensorflow tutorial 
import tensorflow as tf

sess = tf.InteractiveSession()

x = tf.placeholder(float, shape=[None, 784])
y_ = tf.placeholder(float, shape=[None, 10])

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

y = tf.nn.softmax(tf.matmul(x, W) + b)

cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

Her leser jeg dataene, strippe ut målvariable og dele data i testing og opplæring datasett (alt dette fungerer fint):

# Read dataframe from training data
csvfile='train.csv'
from pandas import DataFrame, read_csv
df = read_csv(csvfile)

# Strip off the target data and make it a separate dataframe.
Target = df.label
del df[label]

# Split data into training and testing sets
msk = np.random.rand(len(df)) < 0.8
dfTest = df[~msk]
TargetTest = Target[~msk]
df = df[msk]
Target = Target[msk]

# One hot encode the target
OHTarget=pd.get_dummies(Target)
OHTargetTest=pd.get_dummies(TargetTest)

Nå, når jeg prøver å kjøre trening trinnet, får jeg en FailedPreconditionError:

for i in range(100):
    batch = np.array(df[i*50:i*50+50].values)
    batch = np.multiply(batch, 1.0 / 255.0)
    Target_batch = np.array(OHTarget[i*50:i*50+50].values)
    Target_batch = np.multiply(Target_batch, 1.0 / 255.0)
    train_step.run(feed_dict={x: batch, y_: Target_batch})

Her er hele feilen:

---------------------------------------------------------------------------
FailedPreconditionError                   Traceback (most recent call last)
<ipython-input-82-967faab7d494> in <module>()
      4     Target_batch = np.array(OHTarget[i*50:i*50+50].values)
      5     Target_batch = np.multiply(Target_batch, 1.0 / 255.0)
----> 6     train_step.run(feed_dict={x: batch, y_: Target_batch})

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in run(self, feed_dict, session)
   1265         none, the default session will be used.
   1266     
-> 1267     _run_using_default_session(self, feed_dict, self.graph, session)
   1268
   1269

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.pyc in _run_using_default_session(operation, feed_dict, graph, session)
   2761                        the operation's graph is different from the session's 
   2762                        graph.)
-> 2763   session.run(operation, feed_dict)
   2764
   2765

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in run(self, fetches, feed_dict)
    343
    344     # Run request and get response.
--> 345     results = self._do_run(target_list, unique_fetch_targets, feed_dict_string)
    346
    347     # User may have fetched the same tensor multiple times, but we

/Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/client/session.pyc in _do_run(self, target_list, fetch_list, feed_dict)
    417         # pylint: disable=protected-access
    418         raise errors._make_specific_exception(node_def, op, e.error_message,
--> 419                                               e.code)
    420         # pylint: enable=protected-access
    421       raise e_type, e_value, e_traceback

FailedPreconditionError: Attempting to use uninitialized value Variable_1
     [[Node: gradients/add_grad/Shape_1 = Shape[T=DT_FLOAT, _device=/job:localhost/replica:0/task:0/cpu:0](Variable_1)]]
Caused by op u'gradients/add_grad/Shape_1', defined at:
  File /Users/user32/anaconda/lib/python2.7/runpy.py, line 162, in _run_module_as_main
    ...........

...which was originally created as op u'add', defined at:
  File /Users/user32/anaconda/lib/python2.7/runpy.py, line 162, in _run_module_as_main
    __main__, fname, loader, pkg_name)
[elided 17 identical lines from previous traceback]
  File /Users/user32/anaconda/lib/python2.7/site-packages/IPython/core/interactiveshell.py, line 3066, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File <ipython-input-45-59183d86e462>, line 1, in <module>
    y = tf.nn.softmax(tf.matmul(x,W) + b)
  File /Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py, line 403, in binary_op_wrapper
    return func(x, y, name=name)
  File /Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py, line 44, in add
    return _op_def_lib.apply_op(Add, x=x, y=y, name=name)
  File /Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/ops/op_def_library.py, line 633, in apply_op
    op_def=op_def)
  File /Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py, line 1710, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File /Users/user32/anaconda/lib/python2.7/site-packages/tensorflow/python/framework/ops.py, line 988, in __init__
    self._traceback = _extract_stack()

Noen ideer om hvordan jeg kan fikse dette?

Publisert på 30/11/2015 klokken 14:41
kilden bruker
På andre språk...                            


9 svar

stemmer
57

Den FailedPreconditionErroroppstår fordi programmet forsøker å lese en variabel (heter "Variable_1") før den er initialisert. I tensorflow må alle variabler eksplisitt initialisert, ved å kjøre sine "initializer" operasjoner. For enkelhets skyld kan du kjøre alle de variable initializers i den gjeldende sesjonen ved å utføre følgende uttalelse før treningen sløyfe:

tf.initialize_all_variables().run()

Legg merke til at dette svaret forutsetter at, som i spørsmålet, bruker du tf.InteractiveSession, som lar deg kjøre operasjoner uten å spesifisere en økt. For ikke-interaktive bruksområder, er det mer vanlig å bruke tf.Session, og initial som følger:

init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run(init_op)
Svarte 01/12/2015 kl. 05:15
kilden bruker

stemmer
32

tf.initialize_all_variables()er foreldet. I stedet initial tensorflow variabler med:

tf.global_variables_initializer()

Et vanlig eksempel bruk er:

with tf.Session() as sess:
     sess.run(tf.global_variables_initializer())
Svarte 12/01/2017 kl. 07:16
kilden bruker

stemmer
10

Fra offisiell dokumentasjon, FailedPreconditionError

Dette unntaket er oftest heves når du kjører en operasjon som leser en tf.Variable før den er initialisert.

I ditt tilfelle selv forklarer feilen hva variabelen ikke ble initialisert: Attempting to use uninitialized value Variable_1. En av TF tutorials forklarer mye om variabler, deres etablering / initialisering / lagring / lasting

Utgangspunktet for å initialisere variabelen du har 3 alternativer:

Jeg nesten alltid bruke den første tilnærmingen. Husk at du bør sette den i en sesjon løp. Så du vil få noe som dette:

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

Hvis du er nysgjerrig på mer informasjon om variabler, kan du lese denne dokumentasjonen for å vite hvordan du report_uninitialized_variablesog sjekke is_variable_initialized.

Svarte 24/04/2017 kl. 09:08
kilden bruker

stemmer
1

Den FailedPreconditionError kommer fordi økten prøver å lese en variabel som hasn "t initialisert.

Per tensorflow versjon 1.11.0, må du ta dette:

init_op = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init_op)
Svarte 19/12/2018 kl. 13:04
kilden bruker

stemmer
1

Ulik bruk tilfellet, men satt økten som standard sesjon gjorde utslaget for meg:

with sess.as_default():
    result = compute_fn([seed_input,1])

Dette er en av disse feilene som er så innlysende, når du har løst det.

Min bruk-saken er følgende:
1) store Keras VGG16 som tensorflow graf
2) last kers VGG16 som en graf
3) løp tf funksjon på grafen og får:

FailedPreconditionError: Attempting to use uninitialized value block1_conv2/bias
     [[Node: block1_conv2/bias/read = Identity[T=DT_FLOAT, _class=["loc:@block1_conv2/bias"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](block1_conv2/bias)]]
     [[Node: predictions/Softmax/_7 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_168_predictions/Softmax", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
Svarte 30/05/2018 kl. 10:10
kilden bruker

stemmer
1

Jeg fikk denne feilmeldingen fra en helt annen sak. Det virket som unntaket handler i tensorflow hevet den. Du kan sjekke hver rad i tilbakesporings. I mitt tilfelle, det skjedde i tensorflow/python/lib/io/file_io.py, fordi denne filen inneholdt en annen bug, der self.__modeog self.__nameikke ble initialisert, og det trengte å ringe self._FileIO__mode, og self_FileIO__namei stedet.

Svarte 27/07/2017 kl. 10:06
kilden bruker

stemmer
0

Muligens noe har endret seg i nyere tensorflow bygger, fordi for meg, kjører

sess = tf.Session()
sess.run(tf.local_variables_initializer())

før montering noen modeller ser ut til å gjøre triks. De fleste eldre eksempler og kommentarer synes å foreslå tf.global_variables_initializer().

Svarte 21/02/2019 kl. 22:38
kilden bruker

stemmer
0

Du må initialisere variabler før du bruker dem.

Hvis du prøver å evaluere variablene før initialisering dem du vil kjøre inn i: FailedPreconditionError: Attempting to use uninitialized value tensor.

Den enkleste måten er initialisert alle variabler samtidig ved hjelp av: tf.global_variables_initializer()

init = tf.global_variables_initializer()
with tf.Session() as sess:
    tf.run(init)

Du bruker tf.run(init)å kjøre initializer, uten å hente noen verdi.

For å initialisere bare en undergruppe av variabler, bruker du tf.variables_initializer()en liste over variabler:

var_ab = tf.variables_initializer([a, b], name="a_and_b")
with tf.Session() as sess:
    tf.run(var_ab)

Du kan også initial hver variabel for seg å bruke tf.Variable.initializer

# create variable W as 784 x 10 tensor, filled with zeros
W = tf.Variable(tf.zeros([784,10])) with tf.Session() as sess:
    tf.run(W.initializer)
Svarte 28/01/2019 kl. 12:18
kilden bruker

stemmer
0

Da jeg hadde dette problemet med tf.train.string_input_producer()og tf.train.batch()initialisering av lokale variabler før jeg begynte koordinator løst problemet. Jeg hadde fått det feil når jeg initialisert de lokale variabler etter start koordinator.

Svarte 06/06/2018 kl. 11:46
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more