Python Tensorflow:不支持的可调用

Python Tensorflow:不支持的可调用,python,tensorflow,linear-regression,Python,Tensorflow,Linear Regression,我试着按照tensorflow网站上的教程进行操作 这是一个使用线性回归的代码,但我不能这样做,因为我无法理解指定的错误 但我得到了一个不受支持的可调用错误 这是密码 import os import sys import numpy as np import pandas as pd import matplotlib.pyplot as plt from IPython.display import clear_output from six.moves import urllib im

我试着按照tensorflow网站上的教程进行操作

这是一个使用线性回归的代码,但我不能这样做,因为我无法理解指定的错误

但我得到了一个不受支持的可调用错误

这是密码

import os
import sys

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import clear_output
from six.moves import urllib

import tensorflow.compat.v2.feature_column as fc

import tensorflow as tf

dftrain = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/train.csv')
dfeval = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/eval.csv')
y_train = dftrain.pop('survived')
y_eval = dfeval.pop('survived')

CATEGORICAL_COLUMNS = ['sex', 'n_siblings_spouses', 'parch', 'class', 'deck', 'embark_town', 'alone']
NUMERIC_COLUMNS = ['age', 'fare']

feature_columns = []
for feature_name in CATEGORICAL_COLUMNS:
    vocabulary = dftrain[feature_name].unique()
    feature_columns.append(tf.feature_column.categorical_column_with_vocabulary_list(feature_name, vocabulary))

for feature_name in NUMERIC_COLUMNS:
    feature_columns.append(tf.feature_column.numeric_column(feature_name, dtype=tf.float32))


def make_input_fn(data_df, label_df, num_epochs=20, shuffle=True, batch_size=32):
    def input_function():
        ds = tf.data.Dataset.from_tensor_slices((dict(data_df), label_df))
        if shuffle:
            ds = ds.shuffle(1000)
        ds = ds.batch(batch_size).repeat(num_epochs)
        return ds

   return input_function()


train_input_fn = make_input_fn(dftrain, y_train)
eval_input_fn = make_input_fn(dfeval, y_eval, num_epochs=1, shuffle=False)

linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns)
linear_est.train(train_input_fn)
result = linear_est.evaluate(eval_input_fn)

clear_output()
print(result)
这就是我得到的错误

Traceback (most recent call last):
  File "C:/Users/gotru/PycharmProjects/tensor/Linear_Regression.py", line 46, in <module>
    linear_est.train(train_input_fn)
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 374, in train
    loss = self._train_model(input_fn, hooks, saving_listeners)
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1164, in _train_model
    return self._train_model_default(input_fn, hooks, saving_listeners)
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1191, in _train_model_default
    input_fn, ModeKeys.TRAIN))
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1028, in _get_features_and_labels_from_input_fn
    self._call_input_fn(input_fn, mode))
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_estimator\python\estimator\estimator.py", line 1106, in _call_input_fn
    input_fn_args = function_utils.fn_args(input_fn)
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\util\function_utils.py", line 57, in fn_args
    args = tf_inspect.getfullargspec(fn).args
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\site-packages\tensorflow_core\python\util\tf_inspect.py", line 257, in getfullargspec
    return _getfullargspec(target)
  File "C:\Users\gotru\anaconda3\envs\tensorflow\lib\inspect.py", line 1132, in getfullargspec
    raise TypeError('unsupported callable') from ex
TypeError: unsupported callable
回溯(最近一次呼叫最后一次):
文件“C:/Users/gotru/PycharmProjects/tensor/Linear_Regression.py”,第46行,in
线性测试序列(序列输入)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u estimator\python\estimator\estimator.py”,第374行,in train
损失=自我训练模型(输入、挂钩、保存侦听器)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u estimator\python\estimator\estimator.py”,第1164行,列车模型
返回self.\u train\u model\u default(输入\u fn、挂钩、保存\u侦听器)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u estimator\python\estimator\estimator.py”,第1191行,默认为列车模型
输入_fn,ModeKeys.TRAIN)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u estimator\python\estimator\estimator.py”,第1028行,从输入获取特征和标签
自。\调用\输入\ fn(输入\ fn,模式))
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u estimator\python\estimator\estimator.py”,第1106行,在调用输入fn中
input\u fn\u args=函数utils.fn\u args(input\u fn)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\util\function\u utils.py”,第57行,在fn\u args中
args=tf_inspect.getfullargspec(fn).args
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\site packages\tensorflow\u core\python\util\tf\u inspect.py”,第257行,位于getfullargspec中
返回\u getfullargspec(目标)
文件“C:\Users\gotru\anaconda3\envs\tensorflow\lib\inspect.py”,第1132行,在getfullargspec中
从ex引发TypeError(“不支持的可调用”)
TypeError:不支持的可调用

提前感谢

下面的代码工作正常,没有任何错误

import os
import sys

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.display import clear_output
from six.moves import urllib

import tensorflow.compat.v2.feature_column as fc

import tensorflow as tf

# Load dataset.
dftrain = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/train.csv')
dfeval = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/eval.csv')
y_train = dftrain.pop('survived')
y_eval = dfeval.pop('survived')

CATEGORICAL_COLUMNS = ['sex', 'n_siblings_spouses', 'parch', 'class', 'deck',
                       'embark_town', 'alone']
NUMERIC_COLUMNS = ['age', 'fare']

feature_columns = []
for feature_name in CATEGORICAL_COLUMNS:
  vocabulary = dftrain[feature_name].unique()
  feature_columns.append(tf.feature_column.categorical_column_with_vocabulary_list(feature_name, vocabulary))

for feature_name in NUMERIC_COLUMNS:
  feature_columns.append(tf.feature_column.numeric_column(feature_name, dtype=tf.float32))

def make_input_fn(data_df, label_df, num_epochs=10, shuffle=True, batch_size=32):
  def input_function():
    ds = tf.data.Dataset.from_tensor_slices((dict(data_df), label_df))
    if shuffle:
      ds = ds.shuffle(1000)
    ds = ds.batch(batch_size).repeat(num_epochs)
    return ds
  return input_function

train_input_fn = make_input_fn(dftrain, y_train)
eval_input_fn = make_input_fn(dfeval, y_eval, num_epochs=1, shuffle=False)

#ds = make_input_fn(dftrain, y_train, batch_size=10)()
#for feature_batch, label_batch in ds.take(1):
#  print('Some feature keys:', list(feature_batch.keys()))
#  print()
#  print('A batch of class:', feature_batch['class'].numpy())
#  print()
#  print('A batch of Labels:', label_batch.numpy())

linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns)
linear_est.train(train_input_fn)
result = linear_est.evaluate(eval_input_fn)

clear_output()
print(result)
输出

{'accuracy': 0.75, 'accuracy_baseline': 0.625, 'auc': 0.83060914, 'auc_precision_recall': 0.78848886, 'average_loss': 0.5077252, 'label/mean': 0.375, 'loss': 0.5028537, 'precision': 0.6386555, 'prediction/mean': 0.46588355, 'recall': 0.7676768, 'global_step': 200}

等等,为什么它会给我一个错误?可能是代码的执行顺序。错误
TypeError:unsupported callable
表示无法执行函数。