tensorflow api 2.0张量对象只有在启用了eager执行时才可迭代。要迭代此张量,请使用tf.map_fn

问题描述 投票:3回答:1

我试图使用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.
python-3.x tensorflow tensorflow-estimator tensorflow2.0
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.