我對 Tensorflow 還很陌生,我嘗試按照標準的介紹性示例使用略有不同的資料集進行操作。但是,我收到一個錯誤,無法繼續:
ValueError:無法將 NumPy 陣列轉換為張量(不支持的物件型別 int)。
隨著:
TypeError: 無法為 3 01 04 02 0Name: Parch, dtype: 型別為 Series 的物件構建 TypeSpec
import tensorflow as tf
import tensorflow._api.v2.compat.v2.feature_column as fc
import pandas as pd
import numpy as np
#df = pd.read_csv("train.csv")
#df = df.drop(columns=['Cabin', 'Name','Ticket','PassengerId'])
df = {'Survived': [0, 1, 1, 1, 0], 'Pclass': [3, 1, 3, 1, 3], 'Sex': ['male', 'female', 'female', 'female', 'male'],
'Age': [22.0, 38.0, 26.0, 35.0, 35.0], 'SibSp': [1, 1, 0, 1, 0], 'Parch': [0, 0, 0, 0, 0], 'Fare': [7.2500,
71.2833, 7.9250, 53.1000, 8.0500], 'Embarked': ['S', 'C', 'S', 'S', 'S']}
df = pd.DataFrame(df)
df.dropna(inplace=True)
df['Pclass'] = df['Pclass'].astype('object')
df['SibSp'] = df['SibSp'].astype('object')
df['Parch'] = df['Parch'].astype('object')
train, test = np.split(df.sample(frac=1), [int(0.8*len(df))])
y_train_labels = train.pop('Survived')
y_test_labels = test.pop('Survived')
numerical_columns = ['Age','Fare']
categorical_columns = ['Sex','Embarked','Pclass','Parch','SibSp']
feature_column = []
for feature in categorical_columns:
vocabulary = df[feature].unique()
feature_column.append(tf.feature_column.categorical_column_with_vocabulary_list(feature,vocabulary))
for feature in numerical_columns:
feature_column.append(tf.feature_column.numeric_column(feature, 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(train, y_train_labels)
eval_input_fn = make_input_fn(test, y_test_labels, num_epochs=1, shuffle=False)
linear_est = tf.estimator.LinearClassifier(feature_columns=feature_column)
linear_est.train(train_input_fn)
result = linear_est.evaluate(eval_input_fn)
我已經從我的資料集中提供了一個最低限度的可重現示例,如果還有任何其他可能的錯誤,請告訴我。
uj5u.com熱心網友回復:
我認為這些特征Pclass, SibSp, and Parch應該歸類為數值特征。通常,您使用categorical_column_with_vocabulary_list將字串映射到數值,但是上面提到的三個特征已經是數值。如果您真的想使用,categorical_column_with_vocabulary_list那么首先將您的功能轉換為字串或將它們保留為整數。如此處所述:
當您的輸入為字串或整數格式,并且您有一個記憶體詞匯表將每個值映射到一個整數 ID 時,請使用此選項。
這是一個具有數字特征的示例:
import tensorflow as tf
import tensorflow._api.v2.compat.v2.feature_column as fc
import pandas as pd
import numpy as np
df = {'Survived': [0, 1, 1, 1, 0],
'Pclass': [3, 1, 3, 1, 3],
'Sex': ['male', 'female', 'female', 'female', 'male'],
'Age': [22.0, 38.0, 26.0, 35.0, 35.0],
'SibSp': [1, 1, 0, 1, 0],
'Parch': [0, 0, 0, 0, 0],
'Fare': [7.2500, 71.2833, 7.9250, 53.1000, 8.0500],
'Embarked': ['S', 'C', 'S', 'S', 'S']}
df = pd.DataFrame(df)
df.dropna(inplace=True)
df['Pclass'] = df['Pclass'].astype(np.float32)
df['SibSp'] = df['SibSp'].astype(np.float32)
df['Parch'] = df['Parch'].astype(np.float32)
train, test = np.split(df.sample(frac=1), [int(0.8*len(df))])
y_train_labels = train.pop('Survived')
y_test_labels = test.pop('Survived')
numerical_columns = ['Age','Fare', 'Pclass', 'SibSp', 'Parch']
categorical_columns = ['Sex', 'Embarked']
feature_column = []
for feature in categorical_columns:
vocabulary = df[feature].unique()
feature_column.append(tf.feature_column.categorical_column_with_vocabulary_list(feature,vocabulary))
for feature in numerical_columns:
feature_column.append(tf.feature_column.numeric_column(feature, 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(train, y_train_labels)
eval_input_fn = make_input_fn(test, y_test_labels, num_epochs=1, shuffle=False)
linear_est = tf.estimator.LinearClassifier(feature_columns=feature_column)
linear_est.train(train_input_fn)
result = linear_est.evaluate(eval_input_fn)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/375440.html
