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

时间:2020-06-25 08:19:34

标签: python pandas numpy tensorflow machine-learning

我正在使用其他4列按行自定义定义的函数来创建新的Pandas Dataframe列。

下面是列的结构,正在应用该函数。

enter image description here

创建的新列如下所示。

enter image description here

我写的函数如下:

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])

但是当尝试训练模型时,出现以下错误。

enter image description here

尽管StackOverflow中有几个类似的问题,但解决方案表明这些方法对我不起作用。

如果有人能弄清楚我要去哪里,那将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我可以弄清楚代码中出了什么问题。在这里发贴给将来可能会受益的人。

在上面的代码中,我提供了Pandas Series对象作为X_train_credit_balanceX_test_credit_balance的数据类型,其中model.fit()函数需要一个数组。如果我们按以下方式检查X_train_credit_balance的单个元素,

print(X_train_credit_balance[0])

它将给出以下不是必需的输出:

array([30., 30.], dtype=float32)

更正代码

可以通过如下修改convert_credit_rows(row)函数来纠正上述行为:

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_credit_rows函数将应用于创建(m,n)维数组列表的每一行-在这种情况下为credit_list。然后,下一步,我们可以通过credit_listnp.array(credit_list)转换为ndarray。如果我们在操作结束时打印出credit_list,我们将看到正确格式化的数组,如下所示:

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

现在,如果我们打印出X_train_credit_balance的类型,它将是<class 'numpy.ndarray'>而不是Pandas Series对象。