搜狗实验室新闻数据文本分类深度学习案例 ———Tensorflow+CNN深度学习全流程(下)

五、模型的训练与预测

  • 进行2000轮训练
  • 观察损失函数loss和预测准确率accuracy
1、创建模型保存路径
# 创建保存对象
saver = tf.train.Saver()
# 最优结果
best_acc = 0
# 创建保存训练模型的路径
model_path = 'save_models/'
if not os.path.exists(model_path):
    os.makedirs(model_path)
save_path = os.path.join(path,'best')
2、会话初始化
# 添加节点用于初始化全部变量
init = tf.global_variables_initializer()
# 创建会话
sess = tf.Session()
sess.run(init)
3、创建数据流图可视化实例
  • 利用tensorboard进行数据流图可视化
  • 查看命令:(进入主程序文件所在路径地址执行)tensorboard --logdir ./ --host localhost
  • 在浏览器中输入:localhost:6006
# 创建FileWriter实例,并传入当前会话加载的数据流图
writer = tf.summary.FileWriter('./summary/linear-regression-1', sess.graph)

在这里插入图片描述

4、训练代码执行
for i in range(2000):
    # 随机选取64个样本的索引
    sel_index = random.sample(
        list(range(len(train_y))), k=batch_size)
    # 批量选择训练样本
    batch_X = train_X[sel_index]
    batch_Y = train_Y[sel_index]
    # 运行训练模型
    sess.run(train, feed_dict={
        X_holder:batch_X, Y_holder:batch_Y})
    # 抽取样本观察训练效果
    i += 1
    if i % 100 == 0:
        # 随机选择200个样本进行训练
        sel_index = random.sample(
            list(range(len(train_y))), k=200)
        batch_X = train_X[sel_index]
        batch_Y = train_Y[sel_index]
        # 获取损失值loss_val和准确度accuracy_val
        loss_val,accuracy_val = sess.run(
            [loss,accuracy], feed_dict={
                X_holder:batch_X, Y_holder:batch_Y})
        # 将最优的模型保存下来
        if accuracy_val > best_acc:
            best_acc = accuracy_val
            saver.save(sess=sess, save_path=save_path)
        # 打印损失值和准确度
        print('第{}轮训练,loss值:{:.4f},accuracy值:{:.4f}'.format(
            i,loss_val,accuracy_val))

在这里插入图片描述

六、混淆矩阵

  • 通过混淆矩阵评估模型的参数
1、导入工具包
# 导入相关工具包
import numpy as np 
import pandas as pd 
from sklearn.metrics import confusion_matrix 
2、数据格式化
# 定义批量预测函数,将结果转化为ndarray类型
def predictAll(test_X, batch_size=100):
    pred_val_list = []
    for i in range(0,len(test_X),batch_size):
        select_X = test_X[i:i+batch_size]
        pred_val = sess.run(pred_Y, {X_holder:select_X})
        pred_val_list.extend(pred_val)
    return np.array(pred_val_list)
3、获取混淆矩阵
# 运行模型进行预测
Y = predictAll(test_X)
# 获取局部最大可能预测值的位置矩阵
y = np.argmax(Y, axis=1)
# 格式化预测标签列表
pred_label_list = labelEncoder.inverse_transform(y)
# 获取混淆矩阵
content_matrix = confusion_matrix(test_label_list,pred_label_list)
pd.DataFrame(content_matrix,columns=labelEncoder.classes_,
            index=labelEncoder.classes_)

在这里插入图片描述

4、预测分析小结
  • 绝大多数样本预测都比较准确。
  • 奥运和体育出现交叉,说明二者有较大的关联性,这与事实相符。

七、报告分析

1、定义并执行评估数据
from sklearn.metrics import precision_recall_fscore_support as prf

# 定义模型评估函数
def eval_model(true_y,pred_y,labels):
    # 计算每个类别的测准率,召回率,f1得分
    pred,recall,f1,s = prf(true_y, pred_y)
    # 计算上面各参数的总体值
    tt_pred = np.average(pred, weights=s)
    tt_recall = np.average(recall, weights=s)
    tt_f1 = np.average(f1, weights=s)
    tt_s = np.sum(s)
    res1 = pd.DataFrame({
        'Label':labels,
        'Prediction':pred,
        'Recall':recall,
        'F1':f1,
        'Support':s
    })
    res2 = pd.DataFrame({
        'Label':['总体'],
        'Prediction':tt_pred,
        'Recall':tt_recall,
        'F1':tt_f1,
        'Support':tt_s        
    })
    res2.index = [999]
    res = pd.concat([res1, res2])[['Label','Prediction','Recall','F1','Support']]
    return res,res1,res2
res,res1,res2 = eval_model(test_label_list, pred_label_list, labelEncoder.classes_)
2、可视化评估数据
print(res)

在这里插入图片描述

八、项目总结

  • 本项目以“搜狗实验室数据”的真实新闻数据为数据来源,预测结果具有客观性。
  • 本项目全流程展示了数据预处理、数据清洗、模型的建立及评估的基本思路和实现代码。
  • 本项目利用CNN算法建立模型,经过2000轮训练获得的准确率高达99%,可以投入实际应用。

github源码地址:https://github.com/Willsgao
参考网址:https://blog.csdn.net/sadfassd/article/details/80568321
https://blog.csdn.net/q383700092/article/details/79159776
https://blog.csdn.net/u011439796/article/details/77692621
https://blog.csdn.net/heyc861221/article/details/80128748

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值