首页 > 解决方案 > 修改 Keras 模型中的参数时,精度变化很小

问题描述

我见过其他类似的问题并遵循他们的解决方案,但几乎没有改善。我正在制作一个模型来识别名字的性别。作为训练数据,我使用的是在这里找到的婴儿名字列表:https ://www.ssa.gov/oact/babynames/limits.html 。我将这些数据提取到一个新的数据框中,只保留这些名称中的一个实例多次出现,并随机排序。

a 中的每个名称字符串都column被转换为长度的数值数组max_len并由函数规范化:

def text_to_numeric(column, max_len):
    word_characters = []
    for word in column:
        word_characters.append([c for c in word])

    letters_kept = 25
    tokenizer = tf.keras.preprocessing.text.Tokenizer(num_words=letters_kept, oov_token='<UNK>')
    tokenizer.fit_on_texts(word_characters)

    word_sequence = tokenizer.texts_to_sequences(word_characters)
    words_pre = tf.keras.preprocessing.sequence.pad_sequences(word_sequence, maxlen=max_len,padding="pre")
    words_pre = tf.keras.utils.normalize(input_data)

    return list(words_pre)

预期的输出是一个包含 2 个元素列表的数组,其中 [1,0] 表示“男性”,[0,1] 表示“女性”。该模型data_file包含已处理的名称和标签,如下所示:

input_length, input_data, output_data = data_reader(data_file)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(100, input_dim=input_length, activation='relu'))
model.add(tf.keras.layers.Dense(100, activation='relu'))
model.add(tf.keras.layers.Dense(2, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer="adam", metrics=['accuracy'])

model.fit(input_data, output_data, epochs=30, verbose=1, validation_split=0.1)

无论如何,我的准确率总是在 75% 左右。我不知道如何选择模型参数,但是我尝试了很多组合,并且精度变化很小。到目前为止,我已经尝试过:标准化输入、平衡输入数据集以使男性和女性的数量相同、更改优化器、定义优化器并更改学习率、更改层数、每层节点和激活函数、增加纪元数。

所有这一切都没有显着改变模型的准确性。我错过了什么或做错了什么吗?这种准确度是否达到了它的水平?

标签: tensorflowkerasdeep-learning

解决方案


推荐阅读