用jupyter编译器的python语言写文本分类CNN模型
时间: 2023-11-25 21:05:57 浏览: 32
好的,以下是一个简单的文本分类CNN模型的实现示例。
首先,我们需要导入所需的库和数据集。这里我们将使用Keras库和IMDb数据集。
```python
import numpy as np
from keras.datasets import imdb
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Embedding, Conv1D, MaxPooling1D
from keras.callbacks import ModelCheckpoint
# Load the data
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=5000)
```
接下来,我们将对数据进行预处理。我们将使用Keras提供的`pad_sequences`函数将每个评论的长度标准化为相同的长度,然后将每个评论转换为一个固定长度的向量。我们还将使用`to_categorical`函数将标签转换为独热编码。
```python
# Pad the sequences
max_length = 500
X_train = pad_sequences(X_train, maxlen=max_length)
X_test = pad_sequences(X_test, maxlen=max_length)
# Convert labels to categorical
num_classes = 2
y_train = np.eye(num_classes)[y_train]
y_test = np.eye(num_classes)[y_test]
```
接下来,我们将定义CNN模型的架构。我们将使用一个嵌入层将每个单词转换为一个低维向量,然后使用一层卷积层和一层池化层来提取特征。最后,我们将使用一些全连接层来进行分类。
```python
# Define the model architecture
model = Sequential()
model.add(Embedding(5000, 100, input_length=max_length))
model.add(Conv1D(filters=64, kernel_size=3, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(250, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
```
现在,我们可以训练模型并评估其性能。
```python
# Train the model
batch_size = 64
epochs = 10
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test), callbacks=[ModelCheckpoint('model.h5', save_best_only=True)])
# Evaluate the model
scores = model.evaluate(X_test, y_test, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
```
这就是一个简单的文本分类CNN模型的实现示例。