LSTM的loss和accuracy近乎不变问题

LSTM的loss和accuracy近乎不变问题

在这里插入图片描述

在这里插入图片描述
原因(如果我的理解不对请纠正,万分感谢)
lstm不是线性准确度,这点与cnn不同,之前做cnn认为输出都是显性的,而lstm需要不定的多次迭代才会开始提高准确度
解决方法
更换模型结构,损失函数,标签样式,迭代次数,或者重新生成数据集,重新进行训练等
参考代码
train.py

import h5py
import numpy as np
from tensorflow.keras import layers, models

f1 = h5py.File('train_lstm.h5', 'r')
train_x = np.array(f1['train_content'])  # 训练集数据  将数据转化为np.array
train_y = np.array(f1['train_label'])  # 训练集标签

f2 = h5py.File('test_lstm.h5', 'r')
test_x = np.array(f2['test_content'])  # 测试集数据  将数据转化为np.array
test_y = np.array(f2['test_label'])  # 测试集标签

# train_x = train_x[:100]
# train_y = train_y[:100]
print(train_x)
print(train_y)
print(train_x.shape)
print(train_y.shape)
# train_x = np.array([[[0.1]], [[0.2]], [[0.3]], [[0.4]]])
# train_y = np.array([0.2, 0.3, 0.4, 0.5])
# LSTM
model = models.Sequential()
model.add(layers.LSTM(50, input_shape=(200, 100)))
model.add(layers.Dense(2, activation='softmax'))
# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_x, train_y, epochs=10, batch_size=1, verbose=2)
# 保存模型p
model.save('model_lstm1.h5')
# 测试
result = model.evaluate(test_x, test_y)
print('测试结果:', result)

test.py

import random
import tensorflow as tf
import numpy as np
import re
import jieba
from gensim.models import word2vec

label_list = ['虚假评论', '真实评论']
model = tf.keras.models.load_model(r'model_lstm1.h5')
contents = ['好吃,非常不错,口感挺软的,不会觉得噎,不会干是属于比较新鲜的口感。', '口味不错,热量也不高。吃着非常好,非常愉快的一次购物体验。', '做工蛮精细的,木材表面磨得很平滑。']
# random.shuffle(contents)
# 预处理
word = word2vec.Word2Vec.load('word2vec.model')
r = r"[a-zA-Z0-9\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、:;;《》“”~@#¥%……&*()]+"
l = []
for content in contents:
    data = re.sub(r, '', content)
    fc = list(jieba.cut(data))
    print(fc)
    data_list = np.zeros((200, 100))
    num = 0
    for j in fc:
        if j in word.wv:
            data_list[num] = list(word.wv[j])
        else:
            data_list[num] = [0]
        num += 1
    print(data_list)
    l.append(data_list)

# 和数据集训练方式一样,是数据列表,且需要np.array(l)转格式,不然会报错
content = np.array(l)
# 检查其架构
model.summary()
# print(l)

predictions = model.predict(content, verbose=0)
print(predictions)
# for i, j in enumerate(predictions):
#     print(contents[i])
#     if j > 0.5:
#         print('真实评论')
#     else:
#         print('虚假评论')
#     print()

现在又不行了,哎,LSTM这玩意是真的玄学
部分成功样例
双输出二分类损失函数

model = models.Sequential()
model.add(layers.LSTM(50, input_shape=(200, 100)))
model.add(layers.Dense(2, activation='softmax'))
# compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_x, train_y, epochs=50, batch_size=1, verbose=2)

在这里插入图片描述
在这里插入图片描述
单输出(不符合二分类标准)

model = models.Sequential()
model.add(layers.LSTM(50, input_shape=(200, 100)))
model.add(layers.Dense(1))
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
x_train, y_train = get_train()
x_test, y_test = get_test()
model.fit(x_train, y_train, epochs=50, batch_size=1, verbose=2)

在这里插入图片描述
在这里插入图片描述
纪念下卡了我两天的破LSTM模型,555~

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值