首页 > 其他分享 >[Deep Learning] 使用多分类的Sequential神经网络模型实现新闻分类

[Deep Learning] 使用多分类的Sequential神经网络模型实现新闻分类

时间:2025-01-20 18:09:39浏览次数:1  
标签:keras train 模型 分类 Deep Sequential result test

一、内容实现概述

本文主要讲述使用keras库内置的Sequential(序列)模型,实现新闻分类。 具体实现过程如下:

    1. 导入所需库:预先导入keras库
    1. 导入数据:调用keras库内置的房价数据库(imdb, 即互联网电影资料库)方法load_data(),导入并分割好数据
    1. 数据预处理:对由整数表示的电影评论数据进行向量化
    1. 构建模型:调用keras库的Sequential模型类,构建模型
    1. 添加网络层,使用常见的Relu类型激活函数以及最后一层激活函数为Sigmoid
    1. 编译模型:调用keras库的compile()方法对模型进行编译,设置常损失函数模板(二进制交叉熵误差)和评估模板(准确率)
    1. 训练模型:调用keras库的fit()方法对训练集数据进行拟合,设置好迭代轮次和批次参数值
    1. 评估模型:调用keras库的evaluate()方法对测试集数据进行预测
    1. 预测模型:调用keras库的predict()方法对测试集数据进行预测

注:

  • 在Python中使用(导入)keras库时,需要先安装,本实现使用的是pip命令安装 pip install --upgrade keras
  • Keras官方教程

二、代码实现

注:源代码地址

# 该实现为新闻分类模型的优化,并利用训练好的模型对新数据进行预测

## 总结:
# 1. 如果要对N个类别的数据点进行分类,那么模型的最后一层应该是大小为N的Dense层
# 2. 对于单标签、多分类问题,模型的最后一层应该使用softmax激活函数,这样可以输出一个在N个输出类别上的概率分布
# 3. 对于这种问题,损失函数几乎总是应该使用分类交叉熵。它将模型输出的概率分布与目标的真实分布之间的距离最小化。
# 4. 处理多分类问题的标签有两种方法:
#   a. 通过分类编码(也叫one-hot编码)对标签进行编码,然后使用categorical_crossentropy损失函数;
#   b. 将标签编码为整数,然后使用sparse_categorical_crossentropy损失函数。
# 5. 如果你需要将数据划分到多个类别中,那么应避免使用太小的中间层,以免在模型中造成信息瓶颈

import os
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'

from keras.src.datasets import reuters
import numpy as np
from keras.src import Sequential
from keras.src.layers import Dense

# 1. 导入Reuters新闻数据集
(X_train, y_train), (X_test, y_test) = reuters.load_data(num_words=10000)


# 2. 数据预处理
def vectorize_sequences(sequences, dimension=10000):
    result = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        for j in sequence:
            result[i, j] = 1
    return result

# def to_one_hot(labes, dimension=46):
#     result = np.zeros((len(labes), dimension))
#     for i, label in enumerate(labes):
#         result[i, label] = 1
#     return result

X_train = vectorize_sequences(X_train)
X_test = vectorize_sequences(X_test)

# 处理多分类问题的标签有两种方法:
# 1. 通过分类编码(也叫one-hot编码)对标签进行编码,然后使用categorical_crossentropy损失函数
# 2. 将标签编码为整数,然后使用sparse_categorical_crossentropy(稀疏分类交叉熵)损失函数
# y_train = to_one_hot(y_train)
# y_test = to_one_hot(y_test)
y_train = np.array(y_train)
y_test = np.array(y_test)


# 3. 模型处理
# 第一步:导入模型
model = Sequential()

# 第二步:添加网络层
model.add(Dense(64, activation='relu'))
# 如果需要将数据划分到多个类别中,那么应避免使用太小的中间层,以免在模型中造成信息瓶颈。本例有46个分类
model.add(Dense(64, activation='relu'))
model.add(Dense(46, activation='softmax')) 
# 如果要对N个类别的数据点进行分类,那么模型的最后一层应该是大小为N的Dense层
# 对于单标签、多分类问题,模型的最后一层应该使用softmax激活函数,这样可以输出一个在N个输出类别上的概率分布

# 第三步:编译模型
# 对于这种单标签、多分类问题,损失函数几乎总是应该使用分类交叉熵(categorical_crossentropy)。
# 它将模型输出的概率分布与目标的真实分布之间的距离最小化
model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 第四步:训练模型
history = model.fit(X_train, y_train, epochs=9, batch_size=512)

# 第五步:评估模型
result = model.evaluate(X_test, y_test)
print("evaluate result: ", result)

# 第六步:预测模型
y_pred = model.predict(X_test)
print("y_pred: ", y_pred)

三、运行结果

image

标签:keras,train,模型,分类,Deep,Sequential,result,test
From: https://www.cnblogs.com/xl1164191281/p/18682200

相关文章

  • [Deep Learning] 使用标量回归的Sequential神经网络模型实现房价预测
    一、内容实现概述本文主要讲述使用keras库内置的Sequential(序列)模型,实现房价预测。具体实现过程如下:1.导入所需库:预先导入keras以及scikit-learn库2.导入数据:调用keras库内置的房价数据库(boston_housing)方法load_data(),导入并分割好数据3.数据预处理:对房价数据进行特征缩......
  • NET8利用SemanticKernel对接DeepSeek
    1usingMarkdownSharp;2usingMicrosoft.Extensions.Hosting;3usingMicrosoft.SemanticKernel;4usingOpenAI;5usingOpenAI.Chat;6usingSystem.ClientModel;7usingSystem.Text;89varbuilder=Host.CreateApplicationBuilder(args);10//buil......
  • ML.NET 图像分类
    参考文档:https://www.cnblogs.com/mq0036/p/18302572 usingMLNET_Image;usingstaticMLNET_Image.MLModel1;namespaceMLNET.Image{publicpartialclassMainForm:Form{publicMainForm(){InitializeComponent();......
  • AI应用实战课学习总结(6)分类算法分析实战
    大家好,我是Edison。最近入坑黄佳老师的《AI应用实战课》,记录下我的学习之旅,也算是总结回顾。今天是我们的第6站,一起了解下分类算法基本概念 以及通过分类算法辅助疾病诊断的案例。分类问题介绍分类算法是用来预测离散标签的算法,它可以预测输入的数据标签属于哪一个类别。举......
  • TensorFlow卷积神经网络识别CiFar10物品分类
     In [1]:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimporttensorflowastffromsklearn.preprocessingimportStandardScaler In [2]:(x_train_all,y_train_all),(x_test,y_test)=tf.keras.datasets.ci......
  • 远铂DIY官网系统AI助手新增支持DeepSeek-V3 AI模型接口
            近日,量化巨头幻方量化的子公司深度求索(DeepSeek)发布了全新系列模型DeepSeek-V3,并同步开源。这一事件迅速引爆AI圈,DeepSeek-V3不仅霸榜开源模型,更在性能上与全球顶尖闭源模型GPT-4o和Claude-3.5-Sonnet不相上下。    更令人瞩目的是,该模型的训练成本仅......
  • 扬帆数据结构算法之雅舟航程,漫步C++幽谷——链表分类探析与双链表之定义与构筑
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、链表的分类二、双链表的实现1.双链表结构的定义2.双链表的初始化和销毁初始化函数1初始化函数2销毁函数3.双链表的打印以及节点的申请打印函数节点的申请4.双链表的头插和尾插头插函数尾插函数5.双链表的查找和......
  • XGBoost分类算法原理与实验分析
    XGBoost分类算法原理与实验分析1.引言XGBoost(eXtremeGradientBoosting,极限梯度提升)是一种高效的梯度提升树算法。它通过优化正则化目标函数,集成多个CART树(分类与回归树)来构建强大的分类器或回归模型。XGBoost在传统梯度提升树(GBDT)的基础上进行了改进,加入了正则化项以防......
  • 李哥深度学习代码复盘--分类实战(上)
    分类实战:对图片进行分类其中带标签的训练数据共有11类,每类280个,不带标签的训练数据共6786个,不带标签的数据需要用到半监督学习的方法。上半是对带标签的数据进行训练验证,下半则主要介绍半监督学习及代码复盘1.数据处理(1)数据增广,通过对现有的数据样本进行变换,生成更多数据样......
  • 手把手教你使用PySide6搭建AI聊天界面,使用DeepSeek大模型接口
    目录前言一、DeepSeek注册与使用二、安装环境三、界面设计四、后端实现1.QTextEdit输入控件实现2.API请求与响应处理3.消息显示与时间显示4.实现头像绘制和文本的绘制5.更换头像五、完整源码下载和使用方法总结前言随着深度学习和自然语言处理技术的不断进步,问答......