Python ValueError:无法在Tensorflow中将NumPy数组转换为Tensor(不支持的对象类型NumPy.ndarray)

Python ValueError:无法在Tensorflow中将NumPy数组转换为Tensor(不支持的对象类型NumPy.ndarray),python,pandas,numpy,tensorflow,machine-learning,Python,Pandas,Numpy,Tensorflow,Machine Learning,我正在创建一个新的Pandas Dataframe列,使用4个其他列应用自定义定义的函数行 下面是应用该函数的列的结构 创建的新列如下所示 我编写的函数如下: def convert_credit_rows(row): return np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32) X_train['credit_balance'] = X_train.apply(convert_credit_

我正在创建一个新的Pandas Dataframe列,使用4个其他列应用自定义定义的函数行

下面是应用该函数的列的结构

创建的新列如下所示

我编写的函数如下:

def convert_credit_rows(row):
  return np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32)

X_train['credit_balance'] = X_train.apply(convert_credit_rows, axis=1)
X_test['credit_balance'] = X_test.apply(convert_credit_rows, axis=1)
def CreditBalanceDetector():

  X_train_credit_balance = X_train['credit_balance']
  X_test_credit_balance = X_test['credit_balance']

  model = Sequential()
  model.add(Dense(20, activation='relu'))
  model.add(Dense(10, activation='relu'))
  model.add(Dense(6, activation='softmax'))

  model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.0005), 
  metrics=['accuracy'])
  early_stop = EarlyStopping(monitor='val_loss',patience=3)
  model.fit(X_train_credit_balance, y_train, epochs=50, validation_data=
  (X_test_credit_balance, y_test), callbacks=[early_stop])
credit_list = []

def convert_credit_rows(row):
  credit_list.append(np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32))

 X_train_credit_balance = np.array(credit_list)
我将此数据集提供给一个简单的神经网络,如下所示:

def convert_credit_rows(row):
  return np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32)

X_train['credit_balance'] = X_train.apply(convert_credit_rows, axis=1)
X_test['credit_balance'] = X_test.apply(convert_credit_rows, axis=1)
def CreditBalanceDetector():

  X_train_credit_balance = X_train['credit_balance']
  X_test_credit_balance = X_test['credit_balance']

  model = Sequential()
  model.add(Dense(20, activation='relu'))
  model.add(Dense(10, activation='relu'))
  model.add(Dense(6, activation='softmax'))

  model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.0005), 
  metrics=['accuracy'])
  early_stop = EarlyStopping(monitor='val_loss',patience=3)
  model.fit(X_train_credit_balance, y_train, epochs=50, validation_data=
  (X_test_credit_balance, y_test), callbacks=[early_stop])
credit_list = []

def convert_credit_rows(row):
  credit_list.append(np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32))

 X_train_credit_balance = np.array(credit_list)
但在尝试训练模型时,我得到了以下错误

虽然在StackOverflow中有两个类似的问题,但解决方案表明这些问题对我不起作用


如果有人能找出我哪里出了问题,我将不胜感激。谢谢。

我可以找出代码中的错误。为将来可能受益的人在此发布

在上面的代码中,我提供了一个Pandas Series对象作为
X\u train\u credit\u balance
X\u test\u credit\u balance
的数据类型,其中
model.fit()
函数需要一个数组。如果我们检查
X\u列车信贷余额的单个元素,如下所示:

print(X_train_credit_balance[0])
它将给出以下不需要的输出:

array([30., 30.], dtype=float32)
正确的代码

通过修改
convert\u credit\u rows(row)
函数,可以纠正上述行为,如下所示:

def convert_credit_rows(row):
  return np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32)

X_train['credit_balance'] = X_train.apply(convert_credit_rows, axis=1)
X_test['credit_balance'] = X_test.apply(convert_credit_rows, axis=1)
def CreditBalanceDetector():

  X_train_credit_balance = X_train['credit_balance']
  X_test_credit_balance = X_test['credit_balance']

  model = Sequential()
  model.add(Dense(20, activation='relu'))
  model.add(Dense(10, activation='relu'))
  model.add(Dense(6, activation='softmax'))

  model.compile(loss='categorical_crossentropy', optimizer=Adam(learning_rate=0.0005), 
  metrics=['accuracy'])
  early_stop = EarlyStopping(monitor='val_loss',patience=3)
  model.fit(X_train_credit_balance, y_train, epochs=50, validation_data=
  (X_test_credit_balance, y_test), callbacks=[early_stop])
credit_list = []

def convert_credit_rows(row):
  credit_list.append(np.asarray([row['A'], row['B'], row['C'], row['D']], dtype=np.float32))

 X_train_credit_balance = np.array(credit_list)
在本例中,
convert\u credit\u rows
函数将应用于每一行,创建(m,n)维数组-credit\u list的列表。然后,作为下一步,我们可以通过
np.array(credit\u list)
credit\u列表转换为一个ndarray。如果我们在操作结束时打印出
信用卡列表
,我们可以看到格式正确的数组,如下所示:

[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]

现在,如果我们打印出
X\u列\u贷方\u余额的类型
,它将是
,而不是熊猫系列对象。

@OverLordGoldDragon我遇到你在这里回答了类似的问题。你能看看上面的错误并给出一些见解吗。提前谢谢。