我按照教程https://www.tensorflow.org/tutorials/layers进行操作,我想用它来使用自己的数据集。
def train_input_fn_custom(filenames_array, labels_array, batch_size): # Reads an image from a file, decodes it into a dense tensor, and resizes it to a fixed shape. def _parse_function(filename, label): image_string = tf.read_file(filename) image_decoded = tf.image.decode_png(image_string, channels=1) image_resized = tf.image.resize_images(image_decoded, [40, 40]) return image_resized, label filenames = tf.constant(filenames_array) labels = tf.constant(labels_array) dataset = tf.data.Dataset.from_tensor_slices((filenames, labels)) dataset = dataset.map(_parse_function) dataset = dataset.shuffle(1000).repeat().batch(batch_size) return dataset.make_one_shot_iterator().get_next() def main(self): tf.logging.set_verbosity(tf.logging.INFO) # Get data filenames_train = ['blackcorner-data/1.png', 'blackcorner-data/2.png'] labels_train = [0, 1] # Create the Estimator classifier = tf.estimator.Estimator(model_fn=cnn_model_fn, model_dir="/tmp/test_convnet_model") # Set up logging for predictions tensors_to_log = {"probabilities": "softmax_tensor"} logging_hook = tf.train.LoggingTensorHook(tensors=tensors_to_log, every_n_iter=50) # Train the model cust_train_input_fn = train_input_fn_custom( filenames_array=filenames_train, labels_array=labels_train, batch_size=3) classifier.train( input_fn=cust_train_input_fn, steps=2000, hooks=[logging_hook]) if __name__ == "__main__": tf.app.run()
但是我有这个错误:
Traceback (most recent call last): File "/usr/lib/python3.6/inspect.py", line 1119, in getfullargspec sigcls=Signature) File "/usr/lib/python3.6/inspect.py", line 2186, in _signature_from_callable raise TypeError('{!r} is not a callable object'.format(obj)) TypeError: (, ) is not a callable object The above exception was the direct cause of the following exception: Traceback (most recent call last): File "cnn_mnist_for_stackoverflow.py", line 139, in tf.app.run() File "/home/geo/Projet/ML/cnn_mnist/venv/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 126, in run _sys.exit(main(argv)) File "cnn_mnist_for_stackoverflow.py", line 135, in main hooks=[logging_hook]) ... raise TypeError('unsupported callable') from ex TypeError: unsupported callable
我不理解此错误,我只知道它来自train_input_fn_custom。张量流版本为1.6
如果有人有主意..谢谢!
的input_fn
参数classifier.train()
必须是可调用的对象(不带参数),例如函数或lambda
。在代码中,要传递的结果调用的train_input_fn_custom()
,而不是一个可调用的对象,所调用 train_input_fn_custom()
。要解决此问题,请替换cust_train_input_fn
如下的定义:
# The `lambda:` creates a callable object with no arguments. cust_train_input_fn = lambda: train_input_fn_custom( filenames_array=filenames_train, labels_array=labels_train, batch_size=3)