Tensorflow RuntimeError:\uuuuIter\uuuuuu()仅在tf.function内部或启用了急切执行时受支持

Tensorflow RuntimeError:\uuuuIter\uuuuuu()仅在tf.function内部或启用了急切执行时受支持,tensorflow,tensorflow2.0,tensorflow-datasets,Tensorflow,Tensorflow2.0,Tensorflow Datasets,我是tensorflow的新手,正在努力学习它。尝试在Tensorflow 2.2.0中运行估算器线性分类器 导入所有模块并读入TFR记录 定义解析函数 定义要传入估计器的输入函数 初始化估计器 运行以下代码会出现错误: Traceback (most recent call last): File "linear_classification.py", line 42, in <module> input_fn = input_fn File &

我是tensorflow的新手,正在努力学习它。尝试在Tensorflow 2.2.0中运行估算器线性分类器

  • 导入所有模块并读入TFR记录
  • 定义解析函数
  • 定义要传入估计器的输入函数
  • 初始化估计器
  • 运行以下代码会出现错误:

    Traceback (most recent call last):
      File "linear_classification.py", line 42, in <module>
        input_fn = input_fn
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 349, in train
        loss = self._train_model(input_fn, hooks, saving_listeners)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1182, in _train_model
        return self._train_model_default(input_fn, hooks, saving_listeners)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1208, in _train_model_default
        self._get_features_and_labels_from_input_fn(input_fn, ModeKeys.TRAIN))
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1044, in _get_features_and_labels_from_input_fn
        self._call_input_fn(input_fn, mode))
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1137, in _call_input_fn
        return input_fn(**kwargs)
      File "linear_classification.py", line 31, in input_fn
        iterator = iter(dataset)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 406, in __iter__
        raise RuntimeError("__iter__() is only supported inside of tf.function "
    RuntimeError: __iter__() is only supported inside of tf.function or when eager execution is enabled.
    

    这是我的第一个StackOverflow问题,如果我没有遵循任何指导原则或规则,请原谅。非常感谢您的帮助。谢谢。

    所以我发现问题是。错误状态为
    RuntimeError:\uuuu iter\uuuu()仅在tf.function内部受支持,或者在启用了急切执行时受支持
    。我将
    @tf.function
    放在我的
    input\u fn()上方。因此,现在我的
    input\u fn()
    如下所示:

    @tf.function
    def input_fn():
        dataset = tf.data.TFRecordDataset(filenames = filenames)
        
        dataset = dataset.map(_parse_function)
        iterator = iter(dataset)
        next_element = iterator.get_next()
        return next_element
    
    通过阅读TensorFlow文档,我能够跟踪问题:

    def input_fn():
        dataset = tf.data.TFRecordDataset(filenames = filenames)
        
        dataset = dataset.map(_parse_function)
        iterator = iter(dataset)
        next_element = iterator.get_next()
        return next_element
    
    feature_columns = [
        tf.feature_column.numeric_column('Age'),
        tf.feature_column.numeric_column('EstimatedSalary')
    ]
    
    estimator = tf.estimator.LinearClassifier(feature_columns = feature_columns)
    estimator.train(
        input_fn = input_fn
    )
    
    Traceback (most recent call last):
      File "linear_classification.py", line 42, in <module>
        input_fn = input_fn
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 349, in train
        loss = self._train_model(input_fn, hooks, saving_listeners)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1182, in _train_model
        return self._train_model_default(input_fn, hooks, saving_listeners)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1208, in _train_model_default
        self._get_features_and_labels_from_input_fn(input_fn, ModeKeys.TRAIN))
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1044, in _get_features_and_labels_from_input_fn
        self._call_input_fn(input_fn, mode))
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow_estimator/python/estimator/estimator.py", line 1137, in _call_input_fn
        return input_fn(**kwargs)
      File "linear_classification.py", line 31, in input_fn
        iterator = iter(dataset)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py", line 406, in __iter__
        raise RuntimeError("__iter__() is only supported inside of tf.function "
    RuntimeError: __iter__() is only supported inside of tf.function or when eager execution is enabled.
    
    /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/tensorflow/python/data/ops/dataset_ops.py
    
    @tf.function
    def input_fn():
        dataset = tf.data.TFRecordDataset(filenames = filenames)
        
        dataset = dataset.map(_parse_function)
        iterator = iter(dataset)
        next_element = iterator.get_next()
        return next_element