gpt4 book ai didi

tensorflow - 文本分类问题

转载 作者:行者123 更新时间:2023-11-30 09:43:22 24 4
gpt4 key购买 nike

我是机器学习新手,尝试将文本分为两类。我的数据集是用医学文本的 Tokenizer 制作的,它不平衡,有 572 条记录用于训练,471 条记录用于测试。

对我来说,制作具有不同预测输出的模型真的很困难,几乎所有值都是相同的。我已经厌倦了使用 this 等示例中的模型并自己调整参数,但输出总是毫无意义

这里是标记化和准备的data

这是脚本:Gist

我使用的示例模型

    sequential_model = keras.Sequential([
layers.Dense(15, activation='tanh',input_dim=vocab_size),
layers.BatchNormalization(),
layers.Dense(8, activation='relu'),
layers.BatchNormalization(),
layers.Dense(1, activation='sigmoid')
])

sequential_model.summary()
sequential_model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['acc'])

train_history = sequential_model.fit(train_data,
train_labels,
epochs=15,
batch_size=16,
validation_data=(test_data, test_labels),
class_weight={1: 1, 0: 0.2},
verbose=1)

不幸的是,我无法共享数据集。我也厌倦了将 keras.utils.to_categorical 与类标签一起使用,但这没有帮助

最佳答案

您的损失曲线是有意义的,因为我们看到网络过度拟合训练集,而我们看到通常的碗形验证曲线。

为了使您的网络表现更好,您可以随时加深它(更多层)、加宽它(每个隐藏层更多单元)和/或为您的层添加更多非线性激活函数,以便能够映射到更广泛的网络值。

此外,我相信您最初获得如此多重复值的原因是由于您的网络规模。显然,每个数据点大约有 20,000 个特征(相当大的特征空间);您的网络规模太小,因此可以映射的输出值的可能空间也更小。我对一些较大的隐藏单元层进行了一些测试(并增加了层数),并且能够看到预测值确实有所不同:[0.519]、[0.41]、[0.37]...

您的网络性能有所不同也是可以理解的,因为您拥有的特征数量约为训练规模的 50 倍(通常您希望比例较小)。请记住,对于如此小的训练和测试数据集进行太多时期(例如超过 10 个)的训练来查看损失的改善并不是很好的做法,因为您可能会严重过度拟合,并且可能表明您的网络需要更宽/更深.

所有这些因素,例如层大小、隐藏单元大小甚至纪元数都可以视为超参数。换句话说,保留一定比例的训练数据作为验证分割的一部分,逐一检查每一类因素并进行优化以获得最高的验证准确性。公平地说,你的训练集并不太高,但我相信你应该保留大约 10-20% 的训练作为一种验证集来调整这些超参数,因为每个数据点都有如此大量的特征。在此过程结束时,您应该能够确定真正的测试准确性。这就是我优化以获得该网络最佳性能的方法。希望这可以帮助。

More about training, test, val split

关于tensorflow - 文本分类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com