python-3.x - imagenes - tensorflow redes neuronales
Los tutoriales de TensorFlow 0.12 producen una advertencia: "El rango del Tensor de entrada debe ser el mismo que el output_rank para la columna (2)
Tengo cierta experiencia con la escritura de programas de aprendizaje automático en Python, pero soy nuevo en TensorFlow y lo estoy comprobando. Mi entorno de desarrollo es una máquina virtual lubuntu 14.04 de 64 bits. Creé un entorno Python 3.5 conda de Miniconda e instalé TensorFlow 0.12 y sus dependencias. Comencé a tratar de ejecutar algún código de ejemplo de los tutoriales de TensorFlow y encontré esta advertencia cuando llamé a fit()
en el ejemplo de boston.py para las funciones de entrada: fuente .
ADVERTENCIA: tensorflow: rango de entrada Tensor (1) debe ser el mismo que output_rank (2) para la columna. Intentará expandir Dims. Es muy recomendable que cambie el tamaño de su entrada, ya que este comportamiento puede cambiar.
Después de buscar en Google, encontré que otras personas encontraron esta misma advertencia:
- https://github.com/tensorflow/tensorflow/issues/6184
- https://github.com/tensorflow/tensorflow/issues/5098
- Tensorflow - Boston Tutorial de datos de la vivienda de errores
Sin embargo, también experimentaron errores que impiden que se complete la ejecución del código. En mi caso, el código se ejecuta con la advertencia anterior. Lamentablemente, no pude encontrar una sola respuesta en esos enlaces sobre qué causó la advertencia y cómo solucionar la advertencia. Todos se enfocaron en el error. ¿Cómo se elimina la advertencia? ¿O es seguro ignorar la advertencia?
¡Aclamaciones!
Información adicional, también veo las siguientes advertencias cuando ejecuto el ejemplo de boston.py antes mencionado.
ADVERTENCIA: tensorflow: ********************************************** ********* ADVERTENCIA: tensorflow: el formato del punto de control V1 de TensorFlow ha quedado en desuso. ADVERTENCIA: tensorflow: considere cambiar al formato V2 más eficiente: ADVERTENCIA: tensorflow:
''tf.train.Saver (write_version = tf.train.SaverDef.V2)'' ADVERTENCIA: tensorflow: ahora activado por defecto. ADVERTENCIA: tensorflow: ********************************************** *********
y
ADVERTENCIA: tensorflow: de /home/kade/miniconda3/envs/tensorflow/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:1053 en predict .: llamando a BaseEstimator. predicción (de tensorflow.contrib.learn.python.learn.estimators.estimator) con x está en desuso y se eliminará después de 2016-12-01. Instrucciones para la actualización: Estimator está desacoplado de la interfaz Scikit Learn al pasar a la clase separada SKCompat. Los argumentos x, y y batch_size solo están disponibles en la clase SKCompat, el Estimador solo aceptará input_fn. Conversión de ejemplo: est = Estimator (...) -> est = SKCompat (Estimator (...))
ACTUALIZACIÓN (22-12-2016): he rastreado la advertencia a este archivo: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/layers/python/layers/feature_column_ops.py
y este bloque de código:
except NotImplementedError:
with variable_scope.variable_scope(
None,
default_name=column.name,
values=columns_to_tensors.values()):
tensor = column._to_dense_tensor(transformed_tensor)
tensor = fc._reshape_real_valued_tensor(tensor, 2, column.name)
variable = [
contrib_variables.model_variable(
name=''weight'',
shape=[tensor.get_shape()[1], num_outputs],
initializer=init_ops.zeros_initializer(),
trainable=trainable,
collections=weight_collections)
]
predictions = math_ops.matmul(tensor, variable[0], name=''matmul'')
Tenga en cuenta la línea: tensor = fc._reshape_real_valued_tensor(tensor, 2, column.name)
La firma del método es: _reshape_real_valued_tensor(input_tensor, output_rank, column_name=None)
El valor 2
está codificado como el valor de output_rank, pero el ejemplo de boston.py está pasando en un input_tensor
de rango 1. Continuaré investigando.
Si especifica la forma de su tensor explícitamente:
tf.constant(df[k].values, shape=[df[k].size, 1])
la advertencia debería desaparecer
Después de que especifique la forma del tensor explícitamente.
continuous_cols = {k: tf.constant(df[k].values, shape=[df[k].size, 1]) for k in CONTINUOUS_COLUMNS}
¡Funciona!