将NumPy数组转换为张量时出错



我有以下格式的数据。我使用神经网络来预测三个参数停机时间,延迟和准确性使用神经网络回归。

Node No Model    Technique   Downtime  Latency  Accuracy    
1      Net     Repartition     0.90    31368.5  0.99   
2      Net     Pause           0.10    21368.5  0.89   
3      Mobile  Repartition     0.49    41368.5  0.79   
4      Net     Pause           0.80    51368.5  0.98

代码

pre_norms = (predictors-predictors.mean()/predictors.std())
pre_norms.head()
predictors=data.drop(['Downtime','Latency','Accuracy'], axis = 1)
target=data[['Downtime', 'Latency', 'Accuracy']]
n_cols= pre_norms.shape[1]

def regression():
model=Sequential()
model.add(Dense(50, activation= 'relu',input_shape=(n_cols,)))
model.add(Dense(50, activation='relu'))#hidden layer
model.add(Dense(3))#output
model.compile(optimizer='adam',loss='mean_squared_error')
return model
model=regression()
model.fit(pre_norms, target,validation_split=.3,epochs=100,verbose=1)

错误

ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type float).

我认为您错过了一个重要步骤,即处理文本/类别属性。您的ModelTechnique需要转换为数字。其中一种方法是

predictors_cat_converted=pd.get_dummies(predictors, prefix=['Model', 'Technique'])

现在所有的文本都已转换为数字,您可以使用转换后的数据运行模型。

n_cols=predictors_cat_converted.shape[1]
model=regression()
model.fit(predictors_cat_converted, target,validation_split=.3,epochs=100,verbose=1)

我无法运行您的代码,所以我创建了类似的东西,当pre_norms的值为NaN时,我会收到这个错误。

我用NaN得到pre_norms,因为predictors有列No_ModelTechnique,它们有字符串,predictors-predictors.mean()/predictors.std())将它们转换为NaN

解决方案可能是删除列No_Model,Technique,但这会创建空数据,因此毫无用处。

我不知道你的完整代码,但你应该检查变量中的内容,如果你有NaN,那么你就有错误的计算。

最新更新