使用CNN做文本分类

    from __future__ import division, print_function, absolute_import
import tensorflow as tf
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_1d, global_max_pool
from tflearn.layers.merge_ops import merge
from tflearn.layers.estimator import regression
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
import pickle
import numpy as np
"""
还是加载imdb.pkl数据
"""
train, test, _ = imdb.load_data(path='imdb.pkl', n_words=10000,
valid_portion=0.1)
trainX, trainY = train
testX, testY = test
"""
转化为固定长度的向量,这里固定长度为100
"""
trainX = pad_sequences(trainX, maxlen=100, value=0.)
testX = pad_sequences(testX, maxlen=100, value=0.)
"""
二值化向量
"""
trainY = to_categorical(trainY, nb_classes=2)
testY = to_categorical(testY, nb_classes=2)
"""
构建卷积神经网络,这里卷积神经网网络为1d卷积
"""
network = input_data(shape=[None, 100], name='input')
network = tflearn.embedding(network, input_dim=10000, output_dim=128)
branch1 = conv_1d(network, 128, 3, padding='valid', activation='relu', regularizer="L2")
branch2 = conv_1d(network, 128, 4, padding='valid', activation='relu', regularizer="L2")
branch3 = conv_1d(network, 128, 5, padding='valid', activation='relu', regularizer="L2")
network = merge([branch1, branch2, branch3], mode='concat', axis=1)
network = tf.expand_dims(network, 2)
network = global_max_pool(network)
network = dropout(network, 0.5)
network = fully_connected(network, 2, activation='softmax')
network = regression(network, optimizer='adam', learning_rate=0.001,
loss='categorical_crossentropy', name='target')
"""
训练开始
"""
model = tflearn.DNN(network, tensorboard_verbose=0)
model.fit(trainX, trainY, n_epoch = 1, shuffle=True, validation_set=(testX, testY), show_metric=True, batch_size=32)
"""
模型保存
"""
model.save("cnn.model")
"""
做测试使用
"""
test=np.linspace(1,101,100).reshape(1,100)
print("测试结果:",model.predict(test)) 模型训练结果以及模型保存情况: Training Step: 697 | total loss: 0.40838 | time: 79.960s
| Adam | epoch: 001 | loss: 0.40838 - acc: 0.8247 -- iter: 22304/22500
Training Step: 698 | total loss: 0.39128 | time: 80.112s
| Adam | epoch: 001 | loss: 0.39128 - acc: 0.8329 -- iter: 22336/22500
Training Step: 699 | total loss: 0.38896 | time: 80.298s
| Adam | epoch: 001 | loss: 0.38896 - acc: 0.8402 -- iter: 22368/22500
Training Step: 700 | total loss: 0.39468 | time: 80.456s
| Adam | epoch: 001 | loss: 0.39468 - acc: 0.8343 -- iter: 22400/22500
Training Step: 701 | total loss: 0.39380 | time: 80.640s
| Adam | epoch: 001 | loss: 0.39380 - acc: 0.8353 -- iter: 22432/22500
Training Step: 702 | total loss: 0.38980 | time: 80.787s
| Adam | epoch: 001 | loss: 0.38980 - acc: 0.8392 -- iter: 22464/22500
Training Step: 703 | total loss: 0.39020 | time: 80.970s
| Adam | epoch: 001 | loss: 0.39020 - acc: 0.8397 -- iter: 22496/22500
Training Step: 704 | total loss: 0.38543 | time: 82.891s
| Adam | epoch: 001 | loss: 0.38543 - acc: 0.8370 | val_loss: 0.44625 - val_acc: 0.7880 -- iter: 22500/22500
--
测试结果: [[ 0.77064246 0.2293576 ]] 加载模型并做预测: import tensorflow as tf
import numpy as np
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.conv import conv_1d, global_max_pool
from tflearn.layers.merge_ops import merge
from tflearn.layers.estimator import regression
"""
跟训练模型的网络结构一样
"""
network = input_data(shape=[None, 100], name='input')
network = tflearn.embedding(network, input_dim=10000, output_dim=128)
branch1 = conv_1d(network, 128, 3, padding='valid', activation='relu', regularizer="L2")
branch2 = conv_1d(network, 128, 4, padding='valid', activation='relu', regularizer="L2")
branch3 = conv_1d(network, 128, 5, padding='valid', activation='relu', regularizer="L2")
network = merge([branch1, branch2, branch3], mode='concat', axis=1)
network = tf.expand_dims(network, 2)
network = global_max_pool(network)
network = dropout(network, 0.5)
network = fully_connected(network, 2, activation='softmax')
network = regression(network, optimizer='adam', learning_rate=0.001,
loss='categorical_crossentropy', name='target')
"""
加载模型做预测
"""
model = tflearn.DNN(network)
model.load("cnn.model")
test=np.linspace(1,101,100).reshape(1,100)
# Predict [[ 0.7725634 0.22743654]]
prediction = model.predict(test)
print("模型预测结果",prediction) 结果: 2017-10-15 19:35:14.940689: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
模型预测结果 [[ 0.77064246 0.2293576 ]]
Process finished with exit code 0 基于tflearn高阶api怎么做文本分类基本上完成

使用CNN做文本分类——将图像2维卷积换成1维的更多相关文章

  1. 《机器学习系统设计》之应用scikit-learn做文本分类(上)

    前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理.到特征project,再到模型选择,把机器学习解决这个 ...

  2. 深度学习原理与框架-CNN在文本分类的应用 1.tf.nn.embedding_lookup(根据索引数据从数据中取出数据) 2.saver.restore(加载sess参数)

    1. tf.nn.embedding_lookup(W, X) W的维度为[len(vocabulary_list), 128], X的维度为[?, 8],组合后的维度为[?, 8, 128] 代码说 ...

  3. 用keras的cnn做人脸分类

    keras介绍 Keras是一个简约,高度模块化的神经网络库.采用Python / Theano开发. 使用Keras如果你需要一个深度学习库: 可以很容易和快速实现原型(通过总模块化,极简主义,和可 ...

  4. 应用scikit-learn做文本分类

    文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...

  5. 应用scikit-learn做文本分类(转)

    文本挖掘的paper没找到统一的benchmark,只好自己跑程序,走过路过的前辈如果知道20newsgroups或者其它好用的公共数据集的分类(最好要所有类分类结果,全部或取部分特征无所谓)麻烦留言 ...

  6. Tensorflor实现文本分类

    Tensorflor实现文本分类 下面我们使用CNN做文本分类 cnn实现文本分类的原理 下图展示了如何使用cnn进行句子分类.输入是一个句子,为了使其可以进行卷积,首先需要将其转化为向量表示,通常使 ...

  7. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...

  8. [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...

  9. CNN文本分类

    CNN用于文本分类本就是一个不完美的解决方案,因为CNN要求输入都是一定长度的,而对于文本分类问题,文本序列是不定长的,RNN可以完美解决序列不定长问题, 因为RNN不要求输入是一定长度的.那么对于C ...

随机推荐

  1. php 微信支付 回调通知不停的坑

    微信支付已完工,最后有点小问题就是微信的回调会重复9次 第一步: $return = "success"; echo $return; 不管用 第二步: $return = &qu ...

  2. SqlServer显示“正在还原...”

    还原数据库时,提示还原成功,但是数据库一直显示“正在还原...”的状态. 可以通过执行以下命令即可 RESTORE DATABASE DB_NAME WITH RECOVERY 原因: 关于recov ...

  3. (转)Java进阶java int与Integer的区别

    Java进阶java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象,用一个引 ...

  4. javascript中异常处理案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. android黑科技系列——Apk的加固(加壳)原理解析和实现

    一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...

  6. 易观OLAP算法大赛结果揭晓,开源组黑马放大招!

    100+天激烈赛程,40+国内顶级技术豪门对决,历经研发内部测试.正式环境测试和易观数据正式环境跑benchmark三大阶段.10月28日,易观OLAP算法大赛优胜名单出炉! 40+技术门派比武 易观 ...

  7. xshell登录centos7很慢解决办法

    使用xshell登录到centos系统虚拟机,可以登录上去,但是认证速度特别慢. 因为在登录时,需要反向解析dns,因此,修改linux配置文件,vi /etc/ssh/sshd_config,将其注 ...

  8. MySQL-字符类型与约束条件

    创建表完整的语法: create table 表名(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名3 类型[(宽度) 约束条件]); 注意事项: 1. 在同一张表中 ...

  9. 安装Mysql的一些问题,比如Net Connect 卸载不掉,注册表相关操作

    我安装mysql用了一段时间后卸载了,在安装就发现安装不了了,原因就是卸载的时候Net Connetc无法卸载,我试了一个月也没有解决后来百度各种还是没有办法解决.于是就尝试自己手动卸载注册表.在“开 ...

  10. node中exports和module.exports的关系及使用

    在node中,需要记住,在使用exports和module.exports的时候,实际输出的是module.exports. exports指向module.exports,是module.expor ...