字符级CNN分类模型的实现

简介: 字符级CNN分类模型的实现

上次发了一条字符级分类模型的推文,读 Character-level Convolutional Networks for Text Classification


这两天在家里就是对字符级CNN分类论文进行了代码实现:1509.01626 Character-level Convolutional Networks for Text Classification


项目代码见:https://github.com/howie6879/charcnntext_classification


项目环境:


  • Python3.6

  • Anaconda+Pipenv管理

使用

# 下载代码
git clone https://github.com/howie6879/char_cnn_text_classification.git
# 利用anaconda建立Python3.6环境 
conda create -n python36 python=3.6
# 进入项目 
cd char_cnn_text_classification
# --python 后面的路径是上面conda创建的路径地址
pipenv install --python  ~/anaconda3/envs/python36/bin/python3.6
# 如果出错 否则跳过这段
pipenv run pip install pip==18.0
# 安装依赖 具体以来可查看Pipenv文件
pipenv install
# 进入代码目录
cd char_cnn_text_classification

模型


模型结构和论文中介绍的一样:

1.jpg

论文中设计了 largesmall两种卷积网络,分别对应不同大小的数据集,且都由6个卷积层和3个全连接层共9层神经网络组成


对于英文数据,如果数据集不大,可以考虑使用包含大小写的字母表


数据集


agnewscsv:新闻数据


对于英文数据,包含在[ag_news_csv]文件夹里面,信息如下:


  • 训练集:120000

  • 测试集:7600

  • 类别:4

数据集处理类[DataUtils],这里以训练集 shape为例:


  • Input实例:(120000, 1014)

  • Label:(120000, 4)

配置


关于配置,请参考[Config]类:

# 字母表
alphabet = "abcdefghijklmnopqrstuvwxyz0123456789-,;.!?:'\"/\\|_@#$%^&*~`+-=<>()[]{}"
alphabet_size = len(alphabet)
# 输入大小,即论文中的l0
input_size = 1014
# 训练集类别
num_of_classes = 4
batch_size = 128
epochs = 1000
checkpoint_every = 100
evaluate_every = 100
# 激活函数的 threshold 值
threshold = 1e-6
# 防止过拟合 dropout保留比例
dropout_p = 0.5
# 损失函数
loss = 'categorical_crossentropy'
# 优化器 rmsprop adam
optimizer = 'adam'

训练


配置好环境之后,可以直接进行训练:

python run_model.py

可以在测试集分出20000条作为验证集进行训练

Data loaded from datasets/ag_news_csv/train.csv
CharCNN model built success:
......
Training Started ===>
Train on 100000 samples, validate on 20000 samples
Epoch 1/10
......
100000/100000 [==============================] - 4338s 43ms/step - loss: 0.9999 - acc: 0.5329 - val_loss: 0.6755 - val_acc: 0.7290
Epoch 2/10
......
100000/100000 [==============================] - 4265s 43ms/step - loss: 0.5044 - acc: 0.8204 - val_loss: 0.4582 - val_acc: 0.8405
Epoch 3/10
......
100000/100000 [==============================] - 4268s 43ms/step - loss: 0.3593 - acc: 0.8799 - val_loss: 0.4177 - val_acc: 0.8522
......

迭代了三轮,就达到了论文中所说的效果 0.8522


准确率和误差图示:

2.jpg3.jpg

可以看到,迭代6、7轮后的结果挺不错,也可以利用 Tensorboard进行可视化:

tensorboard --logdir=char_cnn_text_classification/logs

测试

char_cnn_model.model.evaluate(test_inputs, test_labels, batch_size=Config.batch_size, verbose=1)

可以得到结果输出:

128/7600  [..............................] - ETA: 1:51
......
7600/7600 [==============================] - 110s 15ms/step
[0.41680785787732977, 0.8789473684210526]

其中:


  • loss: 0.41


  • acc: 0.8789

说明


感谢论文作者 XiangZhang,JunboZhao,YannLeCun,以及下面这些开源项目:


  • GitHub - mhjabreel/CharCNN

  • GitHub - mhjabreel/CharCnn_Keras: The implementation of text classification using

  • character level convoultion neural networks using Keras
相关文章
|
4月前
|
机器学习/深度学习
大模型开发:解释卷积神经网络(CNN)是如何在图像识别任务中工作的。
**CNN图像识别摘要:** CNN通过卷积层提取图像局部特征,池化层减小尺寸并保持关键信息,全连接层整合特征,最后用Softmax等分类器进行识别。自动学习与空间处理能力使其在图像识别中表现出色。
78 2
|
5天前
|
机器学习/深度学习
ACM MM24:复旦提出首个基于扩散模型的视频非限制性对抗攻击框架,主流CNN和ViT架构都防不住它
【9月更文挑战第23天】复旦大学研究团队提出了ReToMe-VA,一种基于扩散模型的视频非限制性对抗攻击框架,通过时间步长对抗性潜在优化(TALO)与递归令牌合并(ReToMe)策略,实现了高转移性且难以察觉的对抗性视频生成。TALO优化去噪步骤扰动,提升空间难以察觉性及计算效率;ReToMe则确保时间一致性,增强帧间交互。实验表明,ReToMe-VA在攻击转移性上超越现有方法,但面临计算成本高、实时应用受限及隐私安全等挑战。[论文链接](http://arxiv.org/abs/2408.05479)
17 3
|
1月前
|
机器学习/深度学习
CNN模型验证和CNN模型保存
【8月更文挑战第10天】CNN模型验证和CNN模型保存。
59 27
|
1月前
|
机器学习/深度学习
加载CNN保存模型
【8月更文挑战第10天】加载CNN保存模型。
39 12
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介
**RNN**,1986年提出,用于序列数据,如语言模型和语音识别,但原始模型有梯度消失问题。**LSTM**和**GRU**通过门控解决了此问题。 **CNN**,1989年引入,擅长图像处理,卷积层和池化层提取特征,经典应用包括图像分类和物体检测,如LeNet-5。 **Transformer**,2017年由Google推出,自注意力机制实现并行计算,优化了NLP效率,如机器翻译。 **BERT**,2018年Google的双向预训练模型,通过掩码语言模型改进上下文理解,适用于问答和文本分类。
122 9
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
图神经网络是一类用于处理图结构数据的神经网络。与传统的深度学习模型(如卷积神经网络CNN和循环神经网络RNN)不同,
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。
【7月更文挑战第2天】计算机视觉借助深度学习实现了革命性进步,从图像分类到复杂场景理解,深度学习模型如CNN、RNN重塑了领域边界。AlexNet开启新时代,后续模型不断优化,推动对象检测、语义分割、图像生成等领域发展。尽管面临数据隐私、模型解释性等挑战,深度学习已广泛应用于安防、医疗、零售和农业,预示着更智能、高效的未来,同时也强调了技术创新、伦理考量的重要性。
50 1
|
2月前
|
机器学习/深度学习 数据采集 算法
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
|
3月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
121 0
|
3月前
|
机器学习/深度学习 自然语言处理 PyTorch
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
【自然语言处理NLP】Bert预训练模型、Bert上搭建CNN、LSTM模型的输入、输出详解
86 0

热门文章

最新文章