为什么我在使用类权重时会收到 ValueError

问题描述 投票:0回答:1

我正在尝试在张量流中训练模型,并且数据不平衡,因此我使用类权重来尝试平衡损失函数。 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 的轴

如果我取出班级权重代码,它运行良好

python tensorflow keras tf.keras
1个回答
0
投票

出现 -1 轴错误是因为 TensorFlow 希望使用 Numpy 数组来训练模型,但您的训练数据 (

x_train and y_train
) 可能位于 pandas DataFrame 中。要解决此问题,请使用
df.to_numpy()
将 DataFrame 转换为 NumPy 数组,然后再将其输入模型。

请查找附件gist文件供您参考。

© www.soinside.com 2019 - 2024. All rights reserved.