【问题标题】:Tensorflow DNNClassifier.fit error: TypeError: 'tuple' object is not callableTensorflow DNNClassifier.fit 错误:TypeError:“元组”对象不可调用
【发布时间】:2017-11-17 11:57:42
【问题描述】:

我正在尝试分析包含 60 列的数据集(FEATURES = 59 列(整数和浮点数的混合),LABEL = 名为 TARGET 且值为 0/1 的列)

尝试拟合模型时出现以下错误:

TypeError: 'tuple' object is not callable

以下是使用的代码:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import urllib

import itertools

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

tf.logging.set_verbosity(tf.logging.INFO)

COLUMNS = ["DEMAdmNo","target","PEV_30","PEV_365","lhlos","LTSD","LNOSD","comorbidity_index","AdmD_3","AdmD_7","AdmD_8","AdmD_9","AdmD_11","AdmD_13","AdmD_14","AdmD_15","AdmD_16","AdmD_18","AdmD_20","AdmD_21","AdmD_22","AdmD_23","AdmD_26","AdmD_27","AdmD_28","AdmD_30","AdmD_31","AdmD_32","AdmD_33","AdmD_36","DisP_1","DisP_2","DisP_4","DisP_5","DisP_6","DisP_7","DisP_11","DisP_12","DisP_13","DisP_14","DisP_16","Disc_8","Disc_10","Disc_11","Disc_12","Disc_14","Disc_15","Disc_17","Disc_21","Disc_22","Disc_23","Disc_24","Disc_25","Disc_26","Disc_27","Disc_28","Disc_29"]

FEATURES = ["DEMAdmNo","PEV_30","PEV_365","lhlos","LTSD","LNOSD","comorbidity_index","AdmD_3","AdmD_7","AdmD_8","AdmD_9","AdmD_11","AdmD_13","AdmD_14","AdmD_15","AdmD_16","AdmD_18","AdmD_20","AdmD_21","AdmD_22","AdmD_23","AdmD_26","AdmD_27","AdmD_28","AdmD_30","AdmD_31","AdmD_32","AdmD_33","AdmD_36","DisP_1","DisP_2","DisP_4","DisP_5","DisP_6","DisP_7","DisP_11","DisP_12","DisP_13","DisP_14","DisP_16","Disc_8","Disc_10","Disc_11","Disc_12","Disc_14","Disc_15","Disc_17","Disc_21","Disc_22","Disc_23","Disc_24","Disc_25","Disc_26","Disc_27","Disc_28","Disc_29"]

LABEL = "target"

# Load datasets
training_set = pd.read_csv("Performance_train_jun5.csv", skipinitialspace=True,skiprows=1, names=COLUMNS)
test_set = pd.read_csv("Performance_test_jun5.csv", skipinitialspace=True,skiprows=1, names=COLUMNS)

def my_input_fn(data_set):
  feature_cols = {k: tf.constant(data_set[k].values)
                  for k in FEATURES}
  labels = tf.constant(data_set[LABEL].values)
  return feature_cols, labels

classifier = 
    tf.contrib.learn.DNNClassifier(feature_columns=my_input_fn(training_set),
                                              hidden_units=[10, 20, 10],
                                              n_classes=2,
                                              model_dir="/tmp/h_model")

      INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_evaluation_master': '', '_task_type': None, '_num_ps_replicas': 0, '_keep_checkpoint_every_n_hours': 10000, '_master': '', '_num_worker_replicas': 0, '_save_checkpoints_steps': None, '_model_dir': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x000000000DA51908>, '_keep_checkpoint_max': 5, '_save_checkpoints_secs': 600, '_tf_config': gpu_options {
  per_process_gpu_memory_fraction: 1
}
, '_tf_random_seed': None, '_task_id': 0, '_environment': 'local', '_save_summary_steps': 100, '_is_chief': True}


classifier.fit(input_fn=my_input_fn(training_set), steps=2000)

TypeError: 'tuple' object is not callable

我对上述代码有以下疑问:

1) 由于我的 FEATURES 是 int 和 float 数据类型的混合。在将它们转换为张量时它们会导致问题吗?

2)我的理解是classifier.fit中的my_input_fn调用应该同时读取特征和目标数据。我在这里有什么遗漏吗?

【问题讨论】:

    标签: tensorflow classification


    【解决方案1】:

    根据 Tensorflow 的文档,参数 'input_fn' 必须接收一个函数对象(即 input_fn=my_input_fn),而不是函数调用的返回值。这就是您的 TypeError 带有“适合”的原因。查看以下链接,了解如何使用带有 input_fn 参数的函数。 https://www.tensorflow.org/get_started/input_fn

    【讨论】:

      【解决方案2】:

      首先,错误:TypeError: 'tuple' object is not callable 由于对元组的错误访问,这只是一个标准的 Python 错误。示例:

      创建一个元组:my_tuple = ('elem1','elem2')

      正确方式访问它:
      In[0]: my_tuple[0]
      Out[0]'elem1'

      错误方式访问它:
      In[1]: my_tuple(0)(注意括号)
      Out[1]:TypeError: 'tuple' object is not callable

      所以,这个错误只是告诉你,你试图访问到一个 tuple value 使用 parenthesis 而不是 方括号是要走的路。

      问题

      1) 是的,如果预处理不好会导致问题。您的问题有可能将 int 特征转换为浮动吗?也许你可以试试这种方法。

      2) 我没有检查函数是否正确,但是是的,它应该这样做。问题是函数返回一个元组,您必须以正确的方式访问这些值(如上所示)

      注意:如果您需要更多帮助,请将您的 csv 文件('Performance_train_jun5.csv')发布到某处会有很大帮助

      【讨论】:

      • 我曾尝试将 int 功能转换为浮动,它似乎可以工作。我将进一步进行预处理。感谢您的意见!
      猜你喜欢
      • 2021-09-30
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多