AttributeError:模块“tensorflow\u estimator.python.estimator.api.\u v1.estimator”没有属性“inpus”

2024-06-01 23:04:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用线性分类器进行预测,估计量的构造和训练如下所示:

model = tf.estimator.LinearClassifier(
  n_classes = 2,
  model_dir = "ongoing",
  feature_columns = categorical_features + continuous_features
(
FEATURES = ['Age', 'Gender', 'ICD9Code']
LABEL = 'Condition'

def get_input_fn(data_set, num_epochs, n_batch, shuffle):
    input = tf.compat.v1.estimator.inputs.pandas_input_fn(
       x = pd.DataFrame({k: data_set[k].values for k in FEATURES}),
       y = pd.Series(data_set[LABEL].values),
       batch_size = n_batch,
       num_epochs = num_epochs,
       shuffle = shuffle
     )
     return input
model.train(
  input_fn = get_input_fn(csv_data, num_epochs = None, n_batch = 10461, shuffle = False
  ),
  steps = 1000
)
predict_data = pd.read_csv('feature_condition.csv', usecols = ['PatientGuid', 'Age', 'Gender', 'ICD9Code'], nrows = 5)
predict_input_fn = tf.estimator.inpus.numpy_input_fn(
                      x = {"x": predict_data},
                      y = None,
                      batch_size = 5,
                      shuffle = False,
                  num_threads = 5
                   )
predict_results = model.predict(predict_input_fn)
print(predict_results)

获取错误信息:

AttributeError: module 'tensorflow_estimator.python.estimator.api._v1.estimator' has no attribute 'inpus'

我的tensorflow版本是2.4.1

你能帮我解决这个问题吗?谢谢

更新:我已经更正了输入错误,错误已经修复,但我得到了一个警告:

The name tf.estimator.inputs.numpy_input_fn is deprecated. Please use tf.compat.v1.estimator.inputs.numpy_input_fn instead.

使用建议的函数后,我得到了这里列出的相同的Warning:

The name tf.estimator.inputs.numpy_input_fn is deprecated. Please use tf.compat.v1.estimator.inputs.numpy_input_fn instead

我真的很困惑,你能帮我修一下吗?谢谢

我在google drive中上传了我的完整代码,这里是链接: https://drive.google.com/file/d/1R6bRcv8Afjx4cPLBZaBpuCcDg71fNN3Y/view?usp=sharing


Tags: numpyinputdatamodeltfbatchpredictnum
1条回答
网友
1楼 · 发布于 2024-06-01 23:04:05

如果您可以将tf.estimator.inpus.numpy_input_fn更改为tf.estimator.inputs.numpy_input_fn,您的问题可以得到解决。这是打字错误

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import json
import os
import numpy as np
import pandas as pd
from pandas.core.frame import DataFrame
from tensorflow.train import SequenceExample, FeatureLists
from tensorflow import feature_column
from tensorflow.keras import layers


csv_file = 'feature_condition.csv'
csv_data = pd.read_csv(csv_file, low_memory = False)
csv_df = pd.DataFrame(csv_data)

test_file = 'test.csv'
test_data = pd.read_csv(test_file, low_memory = False)
test_df = pd.DataFrame(test_data)



CONTI_FEATURES = ['Age']
CATE_FEATURES = ['Gender', 'ICD9Code']

# create the feature column:
continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES]

categorical_features = [tf.feature_column.categorical_column_with_hash_bucket(k, hash_bucket_size = 1000) for k in CATE_FEATURES]


model = tf.estimator.LinearClassifier(
  n_classes = 2,
  model_dir = "ongoing",
  feature_columns = categorical_features + continuous_features
)

FEATURES = ['Age', 'Gender', 'ICD9Code']
LABEL = 'Condition'

# input function:
def get_input_fn(data_set, num_epochs, n_batch, shuffle):
    input = tf.compat.v1.estimator.inputs.pandas_input_fn(
       x = pd.DataFrame({k: data_set[k].values for k in FEATURES}),
       y = pd.Series(data_set[LABEL].values),
       batch_size = n_batch,
       num_epochs = num_epochs,
       shuffle = shuffle
     )
    return input
# train the model
model.train(
  input_fn = get_input_fn(csv_data, num_epochs = None, n_batch = 10461, shuffle = False
  ),
  steps = 1000
)

# iterate every data in test dataset and make a prediction:
row_pre = 0
for i in test_data.loc[:,'PatientGuid']:
    dict = {'Age': test_data.loc[row_pre]['Age'],
            'Gender': test_data.loc[row_pre]['Gender'],
            'ICD9Code': test_data.loc[row_pre]['ICD9Code'],
    }
    df = pd.DataFrame(dict, index = [1,2,3])
    predict_input_fn = tf.compat.v1.estimator.inputs.numpy_input_fn(
    #predict_input_fn = tf.estimator.inputs.numpy_input_fn(

                          x = {k: df[k].values for k in FEATURES},
                          y = None,
                          batch_size = 1,
                          num_epochs = 1,
                          shuffle = False,
                          num_threads = 1
                       )
    predict_results = model.predict(predict_input_fn)
    row_pre += 1

您可以忽略不推荐使用的警告

相关问题 更多 >