From 680e1754b49362858cda8fd6cea52e1cc4c41e6b Mon Sep 17 00:00:00 2001 From: Derek Murray Date: Wed, 5 Sep 2018 17:25:13 -0700 Subject: Deprecate `tf.train.input_producer()` and related APIs. These APIs are based on queue runners, which have been deprecated and will be removed in TensorFlow 2.0. They have been replaced with `tf.data.Dataset`, which provides a more efficient version of the same functionality. PiperOrigin-RevId: 211727844 --- tensorflow/python/training/input.py | 32 ++++++++++++++++++---- .../tools/api/golden/v2/tensorflow.train.pbtxt | 20 -------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/tensorflow/python/training/input.py b/tensorflow/python/training/input.py index 94c6b47027..9d9db70890 100644 --- a/tensorflow/python/training/input.py +++ b/tensorflow/python/training/input.py @@ -76,7 +76,10 @@ def match_filenames_once(pattern, name=None): collections=[ops.GraphKeys.LOCAL_VARIABLES]) -@tf_export("train.limit_epochs") +@tf_export(v1=["train.limit_epochs"]) +@deprecation.deprecated( + None, "Queue-based input pipelines have been replaced by `tf.data`. Use " + "`tf.data.Dataset.from_tensors(tensor).repeat(num_epochs)`.") def limit_epochs(tensor, num_epochs=None, name=None): """Returns tensor `num_epochs` times and then raises an `OutOfRange` error. @@ -109,7 +112,12 @@ def limit_epochs(tensor, num_epochs=None, name=None): return array_ops.identity(tensor, name=name) -@tf_export("train.input_producer") +@tf_export(v1=["train.input_producer"]) +@deprecation.deprecated( + None, "Queue-based input pipelines have been replaced by `tf.data`. Use " + "`tf.data.Dataset.from_tensor_slices(input_tensor).shuffle" + "(tf.shape(input_tensor, out_type=tf.int64)[0]).repeat(num_epochs)`. If " + "`shuffle=False`, omit the `.shuffle(...)`.") def input_producer(input_tensor, element_shape=None, num_epochs=None, @@ -192,7 +200,12 @@ def input_producer(input_tensor, return q -@tf_export("train.string_input_producer") +@tf_export(v1=["train.string_input_producer"]) +@deprecation.deprecated( + None, "Queue-based input pipelines have been replaced by `tf.data`. Use " + "`tf.data.Dataset.from_tensor_slices(string_tensor).shuffle" + "(tf.shape(input_tensor, out_type=tf.int64)[0]).repeat(num_epochs)`. If " + "`shuffle=False`, omit the `.shuffle(...)`.") def string_input_producer(string_tensor, num_epochs=None, shuffle=True, @@ -262,7 +275,11 @@ def string_input_producer(string_tensor, cancel_op=cancel_op) -@tf_export("train.range_input_producer") +@tf_export(v1=["train.range_input_producer"]) +@deprecation.deprecated( + None, "Queue-based input pipelines have been replaced by `tf.data`. Use " + "`tf.data.Dataset.range(limit).shuffle(limit).repeat(num_epochs)`. If " + "`shuffle=False`, omit the `.shuffle(...)`.") def range_input_producer(limit, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None): """Produces the integers from 0 to limit-1 in a queue. @@ -300,7 +317,12 @@ def range_input_producer(limit, num_epochs=None, shuffle=True, seed=None, shared_name, "fraction_of_%d_full" % capacity, name) -@tf_export("train.slice_input_producer") +@tf_export(v1=["train.slice_input_producer"]) +@deprecation.deprecated( + None, "Queue-based input pipelines have been replaced by `tf.data`. Use " + "`tf.data.Dataset.from_tensor_slices(tuple(tensor_list)).shuffle" + "(tf.shape(input_tensor, out_type=tf.int64)[0]).repeat(num_epochs)`. If " + "`shuffle=False`, omit the `.shuffle(...)`.") def slice_input_producer(tensor_list, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None): """Produces a slice of each `Tensor` in `tensor_list`. diff --git a/tensorflow/tools/api/golden/v2/tensorflow.train.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.train.pbtxt index e2b74e4d67..b21dabbde7 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.train.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.train.pbtxt @@ -308,10 +308,6 @@ tf_module { name: "init_from_checkpoint" argspec: "args=[\'ckpt_dir_or_file\', \'assignment_map\'], varargs=None, keywords=None, defaults=None" } - member_method { - name: "input_producer" - argspec: "args=[\'input_tensor\', \'element_shape\', \'num_epochs\', \'shuffle\', \'seed\', \'capacity\', \'shared_name\', \'summary_name\', \'name\', \'cancel_op\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'True\', \'None\', \'32\', \'None\', \'None\', \'None\', \'None\'], " - } member_method { name: "inverse_time_decay" argspec: "args=[\'learning_rate\', \'global_step\', \'decay_steps\', \'decay_rate\', \'staircase\', \'name\'], varargs=None, keywords=None, defaults=[\'False\', \'None\'], " @@ -320,10 +316,6 @@ tf_module { name: "latest_checkpoint" argspec: "args=[\'checkpoint_dir\', \'latest_filename\'], varargs=None, keywords=None, defaults=[\'None\'], " } - member_method { - name: "limit_epochs" - argspec: "args=[\'tensor\', \'num_epochs\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'None\'], " - } member_method { name: "linear_cosine_decay" argspec: "args=[\'learning_rate\', \'global_step\', \'decay_steps\', \'num_periods\', \'alpha\', \'beta\', \'name\'], varargs=None, keywords=None, defaults=[\'0.5\', \'0.0\', \'0.001\', \'None\'], " @@ -360,10 +352,6 @@ tf_module { name: "polynomial_decay" argspec: "args=[\'learning_rate\', \'global_step\', \'decay_steps\', \'end_learning_rate\', \'power\', \'cycle\', \'name\'], varargs=None, keywords=None, defaults=[\'0.0001\', \'1.0\', \'False\', \'None\'], " } - member_method { - name: "range_input_producer" - argspec: "args=[\'limit\', \'num_epochs\', \'shuffle\', \'seed\', \'capacity\', \'shared_name\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'True\', \'None\', \'32\', \'None\', \'None\'], " - } member_method { name: "remove_checkpoint" argspec: "args=[\'checkpoint_prefix\', \'checkpoint_format_version\', \'meta_graph_suffix\'], varargs=None, keywords=None, defaults=[\'2\', \'meta\'], " @@ -384,14 +372,6 @@ tf_module { name: "sdca_shrink_l1" argspec: "args=[\'weights\', \'l1\', \'l2\', \'name\'], varargs=None, keywords=None, defaults=[\'None\'], " } - member_method { - name: "slice_input_producer" - argspec: "args=[\'tensor_list\', \'num_epochs\', \'shuffle\', \'seed\', \'capacity\', \'shared_name\', \'name\'], varargs=None, keywords=None, defaults=[\'None\', \'True\', \'None\', \'32\', \'None\', \'None\'], " - } - member_method { - name: "string_input_producer" - argspec: "args=[\'string_tensor\', \'num_epochs\', \'shuffle\', \'seed\', \'capacity\', \'shared_name\', \'name\', \'cancel_op\'], varargs=None, keywords=None, defaults=[\'None\', \'True\', \'None\', \'32\', \'None\', \'None\', \'None\'], " - } member_method { name: "summary_iterator" argspec: "args=[\'path\'], varargs=None, keywords=None, defaults=None" -- cgit v1.2.3