TypeError: invocable no compatible usando Dataset con estimador input_fn
Estoy tratando de convertir el tutorial de Iris (https://www.tensorflow.org/get_started/estimator) para leer datos de entrenamiento de archivos .png en lugar de .csv. Funciona usandonumpy_input_fn
pero no cuando lo hago desde unDataset
. Yo creo queinput_fn()
está devolviendo el tipo incorrecto, pero realmente no entiendo qué debería ser y cómo hacerlo. El error es:
File "iris_minimal.py", line 27, in <module>
model_fn().train(input_fn(), steps=1)
...
raise TypeError('unsupported callable') from ex
TypeError: unsupported callable
La versión de TensorFlow es la 1.3. Código completo:
import tensorflow as tf
from tensorflow.contrib.data import Dataset, Iterator
NUM_CLASSES = 3
def model_fn():
feature_columns = [tf.feature_column.numeric_column("x", shape=[4])]
return tf.estimator.DNNClassifier([10, 20, 10], feature_columns, "tmp/iris_model", NUM_CLASSES)
def input_parser(img_path, label):
one_hot = tf.one_hot(label, NUM_CLASSES)
file_contents = tf.read_file(img_path)
image_decoded = tf.image.decode_png(file_contents, channels=1)
image_decoded = tf.image.resize_images(image_decoded, [2, 2])
image_decoded = tf.reshape(image_decoded, [4])
return image_decoded, one_hot
def input_fn():
filenames = tf.constant(['images/image_1.png', 'images/image_2.png'])
labels = tf.constant([0,1])
data = Dataset.from_tensor_slices((filenames, labels))
data = data.map(input_parser)
iterator = data.make_one_shot_iterator()
features, labels = iterator.get_next()
return features, labels
model_fn().train(input_fn(), steps=1)