TypeError:无法使用非浮点dtype<构建"密集"层;dtype:'字符串&#



我正在尝试构建一个用于分类的神经网络。我对所有数据进行了预处理,结果如下:0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0 1.0 0.00.0 0.0 0.0 0.00.0 0.0 0.00.00.00.00.0 0.00.0.00.00.00.0.0.0.0.00.00.0.0.0.0.020.12436986167881312-0.4264054204191261

虽然一切看起来都很好,数据类型是int或float,但我仍然收到以下错误:

File "C:Userssparkanaconda3libsite-packagestensorflowpythonkeraslayerscore.py", line 1002, in build
'dtype %s' % (dtype,))
TypeError: Unable to build `Dense` layer with non-floating point dtype <dtype: 'string'>

大多数特征是虚设的或按标准缩放器缩放的——它们是浮动的。为了确保我检查了最后一列和最后四列的数据类型(它们是Bold中的整数(,它们也是整数。所以…

为什么我会出现这个错误?我该如何解决这个问题。

以下是我正在使用的代码:

X = dataset.iloc[:, 1:].values
y = dataset.iloc[:, 0].values
pred_set = prediction_set.values
temp_dataset = np.concatenate([X, pred_set], axis=0)
'''Encoding Features'''
index_list = [1,2,4,6,7]
reverse_index = []
for i in range(len(index_list)):
reverse_index.append(index_list[i]-temp_dataset.shape[1])
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
for i in range(len(reverse_index)):
index = reverse_index[i]
ct = ColumnTransformer(transformers = [('encoder', OneHotEncoder(), [index])], remainder = 'passthrough')
temp_dataset = ct.fit_transform(temp_dataset)
X = temp_dataset[:891]
pred_set = temp_dataset[891:]
'''Train - Test split'''
from sklearn.model_selection import train_test_split
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size = 0.2, random_state = 0)
'''Feature scaling'''
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
Xtrain[:, (-2,-3)] = sc.fit_transform(Xtrain[:, (-2,-3)])
Xtest[:, (-2,-3)] = sc.transform(Xtest[:, (-2,-3)])
pred_set[:, (-2,-3)] = sc.transform(pred_set[:, (-2,-3)])
Xtrain.astype(float)
Xtest.astype(float)
pred_set.astype(float)
import tensorflow as tf
classifier = tf.keras.models.Sequential()
classifier.add(tf.keras.layers.Dense(units= 20, activation='relu'))
classifier.add(tf.keras.layers.Dense(units= 20, activation='relu'))
classifier.add(tf.keras.layers.Dense(units= 1, activation='sigmoid'))
classifier.compile(optimizer='adam', loss = 'binary_crossentropy', metrics=['accuracy'])
classifier.fit(Xtrain, ytrain)

尝试将数据转换为float,既适用于pandas也适用于numpy:

df.astype(float)

根据评论,不要试图只转换一列,只转换整个数据集。

如果有一些字符不是数字,以下代码应该会有所帮助:

df[-1] = pd.to_numeric(df[-1], errors='coerce')

最新更新