Tensorflow error : unsupported callable
Tensorflow error : unsupported callable
我遵循教程 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: (<tf.Tensor 'IteratorGetNext:0' shape=(?, 40, 40, ?) dtype=float32>, <tf.Tensor 'IteratorGetNext:1' shape=(?,) dtype=int32>) 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_Whosebug.py", line 139, in <module>
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_Whosebug.py", line 135, in main
hooks=[logging_hook])
...
raise TypeError('unsupported callable') from ex
TypeError: unsupported callable
我不明白这个错误,我只知道它来自 train_input_fn_custom。
tensorflow版本为1.6
如果有人有想法..谢谢!
classifier.train()
的 input_fn
参数必须是可调用对象(不带参数),例如函数或 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)
我遵循教程 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: (<tf.Tensor 'IteratorGetNext:0' shape=(?, 40, 40, ?) dtype=float32>, <tf.Tensor 'IteratorGetNext:1' shape=(?,) dtype=int32>) 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_Whosebug.py", line 139, in <module>
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_Whosebug.py", line 135, in main
hooks=[logging_hook])
...
raise TypeError('unsupported callable') from ex
TypeError: unsupported callable
我不明白这个错误,我只知道它来自 train_input_fn_custom。 tensorflow版本为1.6
如果有人有想法..谢谢!
classifier.train()
的 input_fn
参数必须是可调用对象(不带参数),例如函数或 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)