入门人工智能 ——使用 tensorflow 训练一个新闻分类模型(6)

news2024/11/24 16:03:02

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型(6)

  • 入门人工智能 ——使用 tensorflow 训练一个新闻分类模型
    • 使用 tensorflow 训练一个新闻分类模型
      • 1. 安装TensorFlow和所需的依赖项。
      • 2. 打开收集的新闻数据集
      • 构建模型
      • 模型训练
      • 模型评估
      • 保存模型
      • 完整构建训练模型的代码
    • 使用模型输出结果

入门人工智能 ——使用 tensorflow 训练一个新闻分类模型

人工智能(AI)和机器学习(ML)是密切相关但又有着明显区别的概念。人工智能旨在使机器或计算机表现出智能行为的能力,通常通过模拟人类的思维和行为方式来实现。与此不同,机器学习是使用算法和技术来训练机器或计算机,使其能够自动从数据中学习和改进自身的行为。

在构建一个新闻分类模型时,TensorFlow是一个常用的工具,用于开发和训练机器学习模型。TensorFlow是一个广泛使用的开源机器学习框架,可用于构建各种类型的模型,包括神经网络、决策树和深度学习模型等。通过使用TensorFlow,我们可以将收集到的新闻数据转化为一个预测模型,以协助自动识别新闻类别。

在构建新闻分类模型时,使用TensorFlow来开发和训练神经网络模型是非常常见的方法。神经网络模型类似于人类大脑的神经元,因此在进行新闻分类时,我们可以将新闻数据输入神经网络中,然后通过计算得到分类预测结果。

本文将介绍如何使用TensorFlow来训练一个新闻分类模型。我们将从数据准备开始,逐步构建模型,最后进行模型的训练和评估。

使用 tensorflow 训练一个新闻分类模型

由于新闻分类太多了,我这里用证券和非证券两种形式来训练

在这里插入图片描述

1. 安装TensorFlow和所需的依赖项。

pip install tensorflow

2. 打开收集的新闻数据集

收集数据也要注意法律问题,不建议去使用爬虫爬取一些非法的数据。


# 第一部分:准备数据和环境
print("打开收集的新闻数据集")
# 打开一个存有数据的文件,里面是尽可能的去收集多一些的新闻数据
file = open("news.txt", "r", encoding="utf-8")  # "r" 表示只读模式
# 读取整个文件内容
content = file.read()
  1. 数据预处理

数据预处理(Data preprocessing)的目的是为了使原始数据经过一系列的转换和处理后,能够更加方便地被存储、分析和应用。在机器学习和深度学习领域,数据预处理是非常重要的一环。

通常包括以下几个方面:

  1. 文本清洗:对原始数据中的文本进行去除无关信息、去除停用词、去除标点符号、去除数字和特殊字符等操作,以提高后续处理的效果。
  2. 标记化:将原始数据中的类别信息转换为二进制编码,例如使用 one-hot 编码,使得类别信息能够被存储为数值型数据。
  3. 分词:将文本数据按照一定规则进行划分,将文本切分成一个个单独的词汇,以便后续的文本分析和处理。
  4. 词嵌入:将词汇转换为数值型数据,使得不同词汇之间能够进行加权比较。常用的词嵌入方法有 Word2Vec、GloVe 等。
  5. 数据增强:通过对原始数据进行一定程度的变换,使得模型在训练过程中能够从不同角度和形式的数据中学习到知识,提高模型的泛化能力。
  6. 数据合并:将多个数据集合并为一个数据集,使得模型在训练过程中能够从不同数据集的联合训练中学习到知识。
  7. 数据规范化:将数据缩放、归一化等操作,使得不同特征之间具有相似的尺度和范围,提高模型训练效果。
  8. 数据融合:将不同类型的数据进行融合,例如文本数据、图像数据、音频数据等,使得模型能够从不同领域和角度学习到知识。

本次重在基础学习,就没有做那么多,就是做一个数据的分割


print("数据预处理")

labels = []
texts =[]
datas = content.split("\n")

for data in datas:
    data = data.split("[fenge内容fenge]")
    labels.append(data[0])
    texts.append(data[1])


tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
word_index = tokenizer.word_index

X = pad_sequences(sequences)
y = tf.keras.utils.to_categorical(labels)

构建模型

  1. 选择适当的神经网络架构。

Sequential()是Keras中的一个API,它用于创建一个神经网络模型,它将一个或多多个神经元连接到一起,然后将这些神经元连接到一起形成一个神经网络。Sequential()的API提供了多种不同的神经网络架构,包括简单的线性神经网络、多层感知器、自定义层等。

model = Sequential()
  1. 构建文本分类模型的输入层和隐藏层。
model.add(Embedding(input_dim=len(word_index) + 1, output_dim=100, input_length=X.shape[1]))
model.add(LSTM(128))
  1. 添加输出层,选择适当的激活函数。
model.add(Dense(len(y[0]), activation='softmax'))
  1. 编译模型:选择损失函数、优化器和性能指标。
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

模型训练

  1. 划分数据集为训练集、验证集和测试集。

X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)
  1. 使用TensorFlow的数据管道来加载和预处理数据。


train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(64)
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val)).batch(64)

  1. 定义训练循环,包括批量训练和模型保存。

epochs = 10

for epoch in range(epochs):
    for batch_data, batch_labels in train_dataset:
        history = model.train_on_batch(batch_data, batch_labels)
    # 保存模型
    model.save('my_news_classification_model_tf.h5')

模型评估

  1. 使用验证集评估模型性能,包括准确度、精确度、召回率等指标。
val_loss, val_accuracy = model.evaluate(val_dataset)
print(f'Validation loss: {val_loss}, Validation accuracy: {val_accuracy}')

保存模型

  1. 将模型保存为可部署的格式。
model.save('my_news_classification_model_tf.h5')

完整构建训练模型的代码

# -*- coding: utf-8 -*-

import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense

from sklearn.model_selection import train_test_split

# 第一部分:准备数据和环境
print("打开收集的新闻数据集")
# 打开一个存有数据的文件,里面是尽可能的去收集多一些的新闻数据
file = open("news.txt", "r", encoding="utf-8")  # "r" 表示只读模式
# 读取整个文件内容
content = file.read()


print("数据预处理:文本清洗、标记化、分词等。")

labels = []
texts =[]
datas = content.split("\n")

for data in datas:
    data = data.split("[fenge内容fenge]")
    labels.append(data[0])
    texts.append(data[1])


tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
word_index = tokenizer.word_index

X = pad_sequences(sequences)
y = tf.keras.utils.to_categorical(labels)

print("构建模型")

model = Sequential()
model.add(Embedding(input_dim=len(word_index) + 1, output_dim=100, input_length=X.shape[1]))
model.add(LSTM(128))
model.add(Dense(len(y[0]), activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])


print("构建训练")

X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

train_dataset = tf.data.Dataset.from_tensor_slices((X_train, y_train)).batch(64)
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, y_val)).batch(64)

epochs = 10

for epoch in range(epochs):
    for batch_data, batch_labels in train_dataset:
        history = model.train_on_batch(batch_data, batch_labels)
    # 保存模型
    model.save('my_news_classification_model_tf.h5')
 
print("模型评估")

val_loss, val_accuracy = model.evaluate(val_dataset)
print(f'Validation loss: {val_loss}, Validation accuracy: {val_accuracy}')

print("保存模型")

# 保存模型
model.save('news_classification_model_tf.h5')

在这里插入图片描述

如果遇到需要安装的包就安装就行了。

训练结束后我们使用一下

使用模型输出结果

  1. 导入必要的库:

    • tensorflow:用于创建和训练深度学习模型。
    • load_model:从磁盘加载已保存的Keras模型。
    • Tokenizer:用于将文本数据转化为序列化的工具。
    • pad_sequences:用于将不同长度的文本序列填充到相同的长度。
  2. 加载预训练模型:使用load_model函数加载事先训练好的文本分类模型(假设已保存为’news_classification_model_tf.h5’文件)。

  3. 创建 Tokenizer 对象:创建一个Tokenizer对象,用于将文本数据转化为序列化的格式,以便输入模型。

  4. 准备新闻文本数据:定义了一个新的文本数据 new_text,这是您希望进行分类的文本。

  5. 对新文本进行预处理:首先,使用Tokenizer对象将新闻文本转化为整数序列(tokenization)。然后,使用pad_sequences函数将序列填充为模型所需的固定长度。

  6. 进行分类预测:使用加载的模型对新文本数据进行分类预测。model.predict 返回一个概率分布,其中每个类别对应一个概率。

  7. 处理预测结果:在多类别分类问题中,通常会选择具有最高概率的类别作为预测类别。在这里,使用np.argmax找到具有最高概率的类别的索引。

  8. 输出预测结果:打印出预测的类别编号。

import tensorflow as tf
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import numpy as np

# 加载已保存的模型
model = load_model('news_classification_model_tf.h5')

# 创建 Tokenizer 对象并进行文本序列化
tokenizer = Tokenizer()

# 准备需要进行分类的新闻文本数据
new_text = "近日,摩根大通提高了对减肥药的销售额预期,预计到2030年,在诺和诺德和礼来制药的“双寡头”控制下,GLP-1受体激动剂相关药物的年销售额将超过1000亿美元。同时,摩根大通还预测,中国减重药物市场规模有望于2030年达到149亿美元。肥胖问题越来越受到人们的关注。根据《中国肥胖患病率及相关并发症:1580万成年人的横断面真实世界研究》报告指出,按照我国超重和肥胖的BMI分类标准,1580万成年受试者中超重人群占比34.8%,肥胖人群占比14.1%。假设按照目前中国14.2亿人口估算,约有4.94亿人超重,2亿人属于肥胖。而肥胖会引发高血压、高血脂等一系列疾病。国联证券表示,肥胖问题已经成为世界范围内的健康挑战,根据弗若斯特沙利文的统计数据显示,中国乃至全球的肥胖人数呈现持续增长的趋势。近年来全球减肥药市场规模年复合增长率达到10.7%,随着肥胖人数的增多以及居民的体重管理的意识的增强,减肥药市场潜在发展空间广阔。"

# 对新文本进行预处理,以使其与模型输入格式匹配
new_sequences = tokenizer.texts_to_sequences([new_text])
new_padded = pad_sequences(new_sequences, maxlen=len(new_sequences))

# 进行分类预测
predicted_probabilities = model.predict(new_padded)

# 对于多类别分类,您可能需要进一步处理输出
# 例如,取概率最高的类别作为预测类别
predicted_class = np.argmax(predicted_probabilities)

# 根据需要处理预测结果
print(f"预测类别编号:{predicted_class}")

在这里插入图片描述

**如果结果预测不准确,就需要扩大数据,训练更强的模型**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1005753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hadoop启动报错:Attempting to operate on hdfs namenode as root

在hadoop安装路径的 /hadoop/sbin路径下: 将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数 #!/usr/bin/env bash HDFS_DATANODE_USERroot HADOOP_SECURE_DN_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot还有,star…

基于STM32+华为云IOT设计的智能窗帘控制系统

一、项目背景 随着智能家居技术的不断发展,人们对于家居生活的需求也越来越高。智能窗帘作为智能家居领域的重要组成部分,为用户提供了更便捷、舒适的生活体验。本项目基于STM32主控芯片和华为云物联网平台,设计一款智能窗帘控制系统&#x…

学习记忆——宫殿篇——记忆宫殿——记忆桩——知识讲解

类比 假设这些桩子好比不同的交通工具,每一种交通工具都可以助我们到达目的地,那举现在就根据你的时间以及现实情况,选择最合适自己的交通工具即可,重点在于你要熟悉每种交通工具的用途不区别。桩子也是如此,把所有的桩…

pat多项式求和

idea 权重记得也是浮点数&#xff0c;否则2&#xff0c;5测试点不过 solution #include <stdio.h> int main(){int n ;double x0, ans 0, power 1;scanf("%d%lf", &n, &x0);double a[n1];for(int i 0; i < n; i)scanf("%lf", a i)…

Docker+jenkinsPipeline运行实现python自动化测试(超详细)

一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Linu…

Java基础入门·多线程·线程池ThreadPool篇

前言 特点分析 线程池ThreadPool 销毁线程池 Executor类 ​​​​​​​ ​​​​​​​ ​​​​​​​ Callable接口 线程池使用 ​​​​​​​…

全面详解Maven的配置文件pom.xml(含常用plugin)

系列文章目录 手把手教你maven的安装与配置(windows) 全面详解Maven的配置文件pom.xml&#xff08;含常用plugin&#xff09; 系列文章目录一、什么是pom.xml二、pom.xml的结构三、项目的基本信息1.modules2.parent3.scm4.properties 四、项目的依赖列表1.dependency2.reposit…

【Cocos Creator 3.5实现赛车游戏】10.实现汽车节点的运动逻辑

转载知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff0c;知识变现的工具 项目地址&#xff1a;赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码&#xff0c;基于Cocos Creator 3.5版本实现 上一节的学习后&#xff0c;您已经完成了对汽车节点的控制逻…

数字IC设计之时序分析基础概念汇总

1 时钟Clock 理想的时钟模型是一个占空比为50%且周期固定的方波。时钟是FPGA中同步电路逻辑运行的一个基准。理想的时钟信号如下图: 2 时钟抖动Clock Jitter 理想的时钟信号是完美的方波&#xff0c;但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动&#…

(2)数据库mongodb 终端 和 vscode创建数据库 数据导入导出

可视化工具&#xff1a; Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo) mongodb安装官网&#xff1a;MongoDB: The Developer Data Platform | MongoDB 文档&#xff1a;安装 MongoDB - MongoDB-CN-Manual (mongoing.com) 配置环境变量&#xff1a; 是为了扩…

【图论】有向图的强连通分量

算法提高课笔记&#xff08;本篇未更新完 还有俩例题&#xff09; 文章目录 理论基础SCC板子 例题受欢迎的牛题意思路代码 学校网络题意思路代码 理论基础 什么是连通分量&#xff1f; 对于一个有向图&#xff0c;分量中任意两点u&#xff0c;v&#xff0c;必然可以从u走到v…

跑步运动耳机哪个牌子好、推荐几款专业跑步耳机

跑步是一项简单的运动&#xff0c;只要交替迈左右腿就能进行。然而&#xff0c;跑步也可能会变得单调乏味。即使是意志坚定、热爱跑步的人&#xff0c;在这漫长的过程中也会感到乏味&#xff0c;更不用说像你我这样的普通跑者了。音乐能够让跑步这项运动变得有趣起来&#xff0…

前端自适应瀑布流布局

JS案例自适应瀑布流 &#x1f31f;效果预览 &#x1f31f;什么是瀑布流 &#x1f31f;制作思路 &#x1f31f;具体实现 页面结构 js代码实现 &#x1f31f;写在最后 &#x1f31f;效果预览 前端自适应瀑布流效果预览 &#x1f31f;什么是瀑布流 瀑布流&#xff0c;又…

prize_p1

文章目录 解题过程代码审计思路问题解决数组绕过preg_match__destruct的触发修改phar文件以及签名phar://支持的后缀 题解方法一&#xff08;数组绕过&#xff09;方法二&#xff08;gzip绕过&#xff09; 解题过程 源代码 <META http-equiv"Content-Type" conte…

3D人体生成名人堂

一、马普所认知系统实验室。 Perceiving Systems - Max Planck Institute for Intelligent SystemsUsing computer vision, computer graphics, and machine learning, we teach computers to see people and understand their behavior in complex 3D scenes. We are located…

《Prometheus 监控实践:从零到英雄》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

【服务器 | 宝塔】宝塔面板卸载重装教程:清理删除宝塔面板并重新开始

宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角 宝塔面板卸载重装怎么操作?我们很多用户可能安装宝塔之后会经常看一下有没有新版本&#xff0c;如果有新版直接右上角”更新”升级一下版本就可以了&#…

1-4 AUTOSAR方法论

总目录——AUTOSAR入门详解AUTOSAR入门详解目录汇总&#xff1a;待续中。。。https://xianfan.blog.csdn.net/article/details/132818463 目录 一、前言 二、方法论 三、单个ECU开发流程 一、前言 汽车生产供应链上有以下角色&#xff1a;OEM、TIER1、TIER2&#xff0c;其主…

提示msvcr120.dll丢失怎样修复呢?全面分析msvcr120.dll解决方法

在计算机使用过程中&#xff0c;可能会遇到 msvcr120.dll 丢失的问题。msvcr120.dll 是 Microsoft Visual C Redistributable 的一部分&#xff0c;是一个动态链接库文件&#xff08;DLL&#xff09;&#xff0c;用于支持运行在 Windows 操作系统上使用了 Microsoft Visual C 2…

9.12|day 5|day 44 |完全背包| 518. 零钱兑换 II | 377. 组合总和 Ⅳ

● 完全背包 主要是看清01背包和完全背包的区别 //01背包 for(int i 0;i<weight.size();i){ for(int j bagWeight;j>weight[i];j--){dp[j] Math.max(dp[j],dp[j-weight[i]]value[i]); } } //完全背包 for(int i 0;i<weight.size();i){for(int j weight[i];j<…