keras 情绪分析模型为任何输入返回相同的输出

czfnxgou  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(163)

所以我做了这个情感分析模型,它在训练-测试脚本中运行良好。我用streamlit为我保存的模型构建了一个简单的界面,但它总是对任何输入文本返回相同的分数。另外,它不知何故返回了这么多分数,而它应该只对一个输入返回一个分数。
下面是我代码:

import streamlit as st
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np
import pickle

with open("tokenizer.pkl", "rb") as f:
    tokenizer = pickle.load(f)

@st.cache(allow_output_mutation=True)
def load_model():
    model = tf.keras.models.load_model('C:/Users/k/Downloads/test/model_final.h5')
    return model

if __name__ == '__main__':

    model =  load_model()
    st.title('Analisis Sentimen')

    txt = st.text_input('masukkan teks')

    if not txt:
        st.warning("masukkan teks sebelum lanjut")
        st.stop()
    else:
        text = txt
        text = tokenizer.texts_to_sequences(text)
        text = pad_sequences(text)
        prediction = model.predict(text)
        st.title('sentimen: ')
        if (prediction > 0.5).any():
            st.write(prediction)
            st.write('positif')
        else:
            st.write(prediction)
            st.write('negatif')

这里是一些快照,当我尝试与streamlit

gorkyyrv

gorkyyrv1#

ML几乎都是反复试验,我修改了模型,得到了很好的效果,请尝试改变模型。

model = Sequential()

embedding_size = 50

model.add(Embedding(input_dim=1500,output_dim=embedding_size,input_length=max_tokens,name='embedding_layer'))
model.add(LSTM(16,))
model.add(Dropout(0.8))
model.add(Dense(16,))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

optimizer = Adam()

model.compile(loss=tf.keras.losses.BinaryCrossentropy(),optimizer=optimizer,metrics=['accuracy'])

请在这里找到工作代码。谢谢!

相关问题