world tutorial learning hello guide example python machine-learning linear-regression tensorflow

python - tutorial - TensorFlow: "Intentando usar un valor no inicializado" en la inicialización de la variable



tensorflow python (5)

Ejecuta esto:

init = tf.global_variables_initializer() sess.run(init)

O (dependiendo de la versión de TF que tenga):

init = tf.initialize_all_variables() sess.run(init)

Estoy tratando de implementar la regresión lineal multivariada en Python usando TensorFlow, pero me he encontrado con algunos problemas lógicos y de implementación. Mi código arroja el siguiente error:

Attempting to use uninitialized value Variable Caused by op u''Variable/read''

Idealmente, el resultado de los weights debería ser [2, 3]

def hypothesis_function(input_2d_matrix_trainingexamples, output_matrix_of_trainingexamples, initial_parameters_of_hypothesis_function, learning_rate, num_steps): # calculate num attributes and num examples number_of_attributes = len(input_2d_matrix_trainingexamples[0]) number_of_trainingexamples = len(input_2d_matrix_trainingexamples) #Graph inputs x = [] for i in range(0, number_of_attributes, 1): x.append(tf.placeholder("float")) y_input = tf.placeholder("float") # Create Model and Set Model weights parameters = [] for i in range(0, number_of_attributes, 1): parameters.append( tf.Variable(initial_parameters_of_hypothesis_function[i])) #Contruct linear model y = tf.Variable(parameters[0], "float") for i in range(1, number_of_attributes, 1): y = tf.add(y, tf.multiply(x[i], parameters[i])) # Minimize the mean squared errors loss = tf.reduce_mean(tf.square(y - y_input)) optimizer = tf.train.GradientDescentOptimizer(learning_rate) train = optimizer.minimize(loss) #Initialize the variables init = tf.initialize_all_variables() # launch the graph session = tf.Session() session.run(init) for step in range(1, num_steps + 1, 1): for i in range(0, number_of_trainingexamples, 1): feed = {} for j in range(0, number_of_attributes, 1): array = [input_2d_matrix_trainingexamples[i][j]] feed[j] = array array1 = [output_matrix_of_trainingexamples[i]] feed[number_of_attributes] = array1 session.run(train, feed_dict=feed) for i in range(0, number_of_attributes - 1, 1): print (session.run(parameters[i])) array = [[0.0, 1.0, 2.0], [0.0, 2.0, 3.0], [0.0, 4.0, 5.0]] hypothesis_function(array, [8.0, 13.0, 23.0], [1.0, 1.0, 1.0], 0.01, 200)


Hay otro error sucediendo relacionado con el orden al llamar a las variables globales de inicialización. He tenido que la muestra de código tiene un error similar FailedPreconditionError (vea arriba para traceback): Intentar usar un valor no inicializado W

def linear(X, n_input, n_output, activation = None): W = tf.Variable(tf.random_normal([n_input, n_output], stddev=0.1), name=''W'') b = tf.Variable(tf.constant(0, dtype=tf.float32, shape=[n_output]), name=''b'') if activation != None: h = tf.nn.tanh(tf.add(tf.matmul(X, W),b), name=''h'') else: h = tf.add(tf.matmul(X, W),b, name=''h'') return h from tensorflow.python.framework import ops ops.reset_default_graph() g = tf.get_default_graph() print([op.name for op in g.get_operations()]) with tf.Session() as sess: # RUN INIT sess.run(tf.global_variables_initializer()) # But W hasn''t in the graph yet so not know to initialize # EVAL then error print(linear(np.array([[1.0,2.0,3.0]]).astype(np.float32), 3, 3).eval())

Deberías cambiar a seguir

from tensorflow.python.framework import ops ops.reset_default_graph() g = tf.get_default_graph() print([op.name for op in g.get_operations()]) with tf.Session() as # NOT RUNNING BUT ASSIGN l = linear(np.array([[1.0,2.0,3.0]]).astype(np.float32), 3, 3) # RUN INIT sess.run(tf.global_variables_initializer()) print([op.name for op in g.get_operations()]) # ONLY EVAL AFTER INIT print(l.eval(session=sess))


No está 100% claro del ejemplo de código, pero si la lista initial_parameters_of_hypothesis_function es una lista de objetos tf.Variable , entonces la línea session.run(init) fallará porque TensorFlow no es (aún) lo suficientemente inteligente como para descubrir las dependencias en inicialización variable Para evitar esto, debe cambiar el ciclo que crea los parameters para usar initial_parameters_of_hypothesis_function[i].initialized_value() , que agrega la dependencia necesaria:

parameters = [] for i in range(0, number_of_attributes, 1): parameters.append(tf.Variable( initial_parameters_of_hypothesis_function[i].initialized_value()))


Normalmente hay dos formas de inicializar variables, 1) usando sess.run(tf.global_variables_initializer()) como se anotaron las respuestas anteriores; 2) carga el gráfico desde el punto de control.

Puedes hacer así:

sess = tf.Session(config=config) saver = tf.train.Saver(max_to_keep=3) try: saver.restore(sess, tf.train.latest_checkpoint(FLAGS.model_dir)) # start from the latest checkpoint, the sess will be initialized # by the variables in the latest checkpoint except ValueError: # train from scratch init = tf.global_variables_initializer() sess.run(init)

Y el tercer método es usar el tf.train.Supervisor . La sesión será

Cree una sesión en ''master'', recupere o inicialice el modelo según sea necesario o espere a que la sesión esté lista.

sv = tf.train.Supervisor([parameters]) sess = sv.prepare_or_wait_for_session()


Quiero dar mi resolución, funciona cuando reemplazo la línea [session = tf.Session()] con [sess = tf.InteractiveSession()] . Espero que esto sea útil para otros.