用python写一个CNN文本分类模型
时间: 2024-05-06 14:15:50 浏览: 11
好的,下面是一个用Python编写的基本的CNN文本分类模型的代码示例:
```python
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Input, Embedding, Conv1D, GlobalMaxPooling1D, Dense
from tensorflow.keras.models import Model
# 加载数据集
df_train = pd.read_csv('train.csv')
df_test = pd.read_csv('test.csv')
# 对文本进行预处理
tokenizer = Tokenizer(num_words=5000)
tokenizer.fit_on_texts(df_train['text'])
X_train = tokenizer.texts_to_sequences(df_train['text'])
X_test = tokenizer.texts_to_sequences(df_test['text'])
vocab_size = len(tokenizer.word_index) + 1
maxlen = 100
X_train = pad_sequences(X_train, padding='post', maxlen=maxlen)
X_test = pad_sequences(X_test, padding='post', maxlen=maxlen)
y_train = df_train['label']
y_test = df_test['label']
# 构建模型
input_layer = Input(shape=(maxlen,))
embedding_layer = Embedding(vocab_size, 128)(input_layer)
conv_layer = Conv1D(128, 5, activation='relu')(embedding_layer)
pooling_layer = GlobalMaxPooling1D()(conv_layer)
output_layer = Dense(1, activation='sigmoid')(pooling_layer)
model = Model(inputs=input_layer, outputs=output_layer)
# 编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
```
解释一下代码:
1. 首先我们加载了训练集和测试集,并进行了一些预处理,使用了Keras的Tokenizer将文本转换为数字序列,并使用pad_sequences函数将序列填充到相同的长度。
2. 然后我们构建了一个简单的CNN模型:输入层 -> 嵌入层 -> 一维卷积层 -> 全局最大池化层 -> 输出层。
3. 我们使用二元交叉熵作为损失函数,并使用Adam优化器进行优化。
4. 最后我们训练模型并输出训练和测试的准确率。
这是一个基本的CNN文本分类模型,你可以根据自己的需求进行修改和扩展。