我正在尝试在张量流中训练模型,并且数据不平衡,因此我使用类权重来尝试平衡损失函数。 y_train中的输出要么是0,要么是1。我的代码如下:
class_weight = {0: 1.0, 1: 10.0}
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(
loss=tf.keras.losses.binary_crossentropy,
optimizer=tf.keras.optimizers.Adam(),
metrics=[
tf.keras.metrics.BinaryAccuracy(name='accuracy'),
tf.keras.metrics.Precision(name='precision'),
tf.keras.metrics.Recall(name='recall')
]
)
history = model.fit(x_train, y_train, epochs=100, class_weight=class_weight)
当我运行它时,出现以下错误:
ValueError:对象类型 DataFrame 没有名为 -1 的轴
如果我取出班级权重代码,它运行良好
出现 -1 轴错误是因为 TensorFlow 希望使用 Numpy 数组来训练模型,但您的训练数据 (
x_train and y_train
) 可能位于 pandas DataFrame 中。要解决此问题,请使用 df.to_numpy()
将 DataFrame 转换为 NumPy 数组,然后再将其输入模型。
请查找附件gist文件供您参考。