tensorflow api 2.0张量对象仅在启用急切执行时才可迭代。要遍历此张量,请使用tf.map_fn

时间:2019-03-08 11:32:26

标签: python-3.x tensorflow tensorflow-estimator tensorflow2.0

我正在尝试通过tensorflow api 2使用tensorflow估计器。

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame({'A': np.array([100, 105.4, 108.3, 111.1, 113, 114.7]),
                   'B': np.array([11, 11.8, 12.3, 12.8, 13.1,13.6]),
                   'C': np.array([55, 56.3, 57, 58, 59.5, 60.4]),
                   'Target': np.array([4000, 4200.34, 4700, 5300, 5800, 6400])})

featcols = [
    tf.feature_column.numeric_column("A"),
    tf.feature_column.numeric_column("B"),
    tf.feature_column.numeric_column("C")
]

model = tf.estimator.LinearRegressor(featcols)

features = tf.convert_to_tensor(["A", "B", "C"])

def train_input_fn():
    training_dataset = (
        tf.data.Dataset.from_tensor_slices(
            (
                tf.cast(df[[features]].values, tf.float32),
                tf.cast(df['Target'].values, tf.float32)
            )
        )
    )
    return training_dataset

model.train(train_input_fn)

最后一行让我失望:

TypeError: Tensor objects are only iterable when eager execution is enabled. To iterate over this tensor use tf.map_fn

此外,它还会警告我:

Variable.initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.

1 个答案:

答案 0 :(得分:1)

这完成而没有错误。但是我还没有测试。刚刚安装了tensorflow 2.0 alpha。

请检查docs以获得更多帮助。

import tensorflow as tf
import pandas as pd
import numpy as np



df = pd.DataFrame(data={'A': np.array([100, 105.4, 108.3, 111.1, 113, 114.7]),
                        'B': np.array([11, 11.8, 12.3, 12.8, 13.1,13.6]),
                        'C': np.array([55, 56.3, 57, 58, 59.5, 60.4]),
                        'Target': np.array([4000, 4200.34, 4700, 5300, 5800, 6400])})
print (df.describe())
featcols = [
    tf.feature_column.numeric_column("A"),
    tf.feature_column.numeric_column("B"),
    tf.feature_column.numeric_column("C")
]

model = tf.estimator.LinearRegressor(featcols)


def make_input_fn():
  def train_input_fn():
    label = df.pop('Target')
    print( label )
    print ( df )
    ds = tf.data.Dataset.from_tensor_slices((dict(df), label))
    ds = ds.batch(1).repeat(1)
    return ds

  return train_input_fn


model.train(make_input_fn())

我还在这里显示了为我打印的内容。

Limited tf.compat.v2.summary API due to missing TensorBoard installation
Limited tf.summary API due to missing TensorBoard installation
                A          B         C       Target
count    6.000000   6.000000   6.00000     6.000000
mean   108.750000  12.433333  57.70000  5066.723333
std      5.421716   0.939503   2.01792   937.309351
min    100.000000  11.000000  55.00000  4000.000000
25%    106.125000  11.925000  56.47500  4325.255000
50%    109.700000  12.550000  57.50000  5000.000000
75%    112.525000  13.025000  59.12500  5675.000000
max    114.700000  13.600000  60.40000  6400.000000
WARNING: Logging before flag parsing goes to stderr.
W0313 19:30:06.720984 10576 estimator.py:1799] Using temporary folder as model directory: C:\Users\476458\AppData\Local\Temp\tmpkk4q3ute
W0313 19:30:06.767783 10576 deprecation.py:323] From C:\tensorflow2\lib\site-packages\tensorflow\python\training\training_util.py:238: Variable.
initialized_value (from tensorflow.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Use Variable.read_value. Variables in 2.X are initialized automatically both in eager and graph (inside tf.defun) contexts.
0    4000.00
1    4200.34
2    4700.00
3    5300.00
4    5800.00
5    6400.00
Name: Target, dtype: float64
       A     B     C
0  100.0  11.0  55.0
1  105.4  11.8  56.3
2  108.3  12.3  57.0
3  111.1  12.8  58.0
4  113.0  13.1  59.5
5  114.7  13.6  60.4
W0313 19:30:06.861381 10576 deprecation.py:323] From C:\tensorflow2\lib\site-packages\tensorflow\python\feature_column\feature_column_v2.py:2758
: to_float (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.cast` instead.
W0313 19:30:07.220174 10576 deprecation.py:506] From C:\tensorflow2\lib\site-packages\tensorflow\python\training\slot_creator.py:187: calling Ze
ros.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.
Instructions for updating:
Call initializer instance with the dtype argument instead of passing it to the constructor
2019-03-13 19:30:07.672566: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was
not compiled to use: AVX2