赞
踩
神经网络(Neual Networks)是人工智能研究领域的一部分,当前最流行的神经网络是卷积神经网络。卷积神经网络目前在很多很多研究领域取得了巨大的成功,例如语音识别,图像识别,图像分割,自然语言处理等。
在半个世纪以前,图像识别就已经是一个火热的研究课题。1950年中到1960年初,感知机吸引了机器学习学者的广泛关注。这是因为当时数学证明表明,如果输入数据线性可分,感知机可以在有限迭代次数内收敛。感知机的解是超平面参数集,这个超平面可以用作数据分类。然而,感知机却在实际应用中遇到了很大困难,这主要有如下两个问题造成的:
上述问题随着后向传播(back propagation,BP)算法和非线性激活函数的提出得到解决。1989年,BP算法被首次用于CNN中处理2-D信号(图像)。
在2012年的ImageNet挑战赛中,CNN证明了它的实力,从此在图像识别和其他应用中被广泛采纳。
通过机器进行模式识别 ,通常被认为有以下四个阶段:
CNN是目前图像领域特征提取最好的方式,也因此大幅度提升了数据分类精度。
卷积神经网络(CNN)的核心思想是通过卷积层、池化层和全连接层来提取和学习图像中的特征。下面是 CNN 的主要组成部分:
CNN 的训练过程通常包括前向传播和反向传播。在前向传播中,输入数据通过卷积层、激活函数和池化层逐层传递,最终通过全连接层生成预测结果。然后,通过比较预测结果与真实标签,计算损失函数的值。在反向传播中,根据损失函数的值和网络参数的梯度,使用优化算法更新网络参数,以最小化损失函数。
通过多层卷积层的堆叠,CNN 能够自动学习到输入数据中的层次化特征表示,从而在图像分类等任务中取得优秀的性能。它的结构设计使得它能够有效处理高维数据,并具有一定的平移不变性和位置信息感知能力。
卷积神经网络(CNN)通常用于图像处理,但它们也可以应用于文本数据的特征提取和分类。在文本数据上使用CNN可以有效地捕获局部特征和模式,从而改进文本分类任务的性能。例如下面是一个实用而有趣的自然语言处理(NLP)例子,演示了使用卷积神经网络(CNN)进行文本情感分析的过程。在这个例子中,将使用CNN模型来对电影评论进行情感分析,将评论分类为正面、负面或中性情感。
实例4-4:使用CNN模型对电影评论进行情感分析(源码路径:daima\4\cnn.py)
实例文件cnn.py的具体实现代码如下所示。
- import numpy as np
- from tensorflow import keras
- from tensorflow.keras.layers import Embedding, Conv1D, MaxPooling1D, Flatten, Dense
- from tensorflow.keras.preprocessing.text import Tokenizer
- from tensorflow.keras.preprocessing.sequence import pad_sequences
- from sklearn.model_selection import train_test_split
- from sklearn.metrics import accuracy_score
- from sklearn.datasets import load_files
- from sklearn.utils import shuffle
-
- # 加载电影评论数据集
- movie_reviews_data = load_files('IMDb_data', shuffle=True)
- data, labels = shuffle(movie_reviews_data.data, movie_reviews_data.target)
-
- # 划分数据为训练集和测试集
- X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)
-
- # 使用Tokenizer和pad_sequences将文本数据转化为序列
- max_words = 10000 # 设置词汇表的最大词汇量
- tokenizer = Tokenizer(num_words=max_words)
- tokenizer.fit_on_texts(X_train)
- X_train_seq = tokenizer.texts_to_sequences(X_train)
- X_test_seq = tokenizer.texts_to_sequences(X_test)
-
- # 使用pad_sequences将序列填充到相同的长度
- max_sequence_length = 200 # 设置序列的最大长度
- X_train_seq = pad_sequences(X_train_seq, maxlen=max_sequence_length)
- X_test_seq = pad_sequences(X_test_seq, maxlen=max_sequence_length)
-
- # 创建CNN模型
- model = keras.Sequential()
- model.add(Embedding(input_dim=max_words, output_dim=100, input_length=max_sequence_length))
- model.add(Conv1D(64, 3, activation='relu'))
- model.add(MaxPooling1D(2))
- model.add(Flatten())
- model.add(Dense(64, activation='relu'))
- model.add(Dense(3, activation='softmax')) # 3个类别:正面、负面、中性情感
-
- # 编译模型
- model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
-
- # 将标签进行独热编码
- from tensorflow.keras.utils import to_categorical
- y_train_onehot = to_categorical(y_train, num_classes=3)
- y_test_onehot = to_categorical(y_test, num_classes=3)
-
- # 训练模型
- model.fit(X_train_seq, y_train_onehot, epochs=5, batch_size=64, validation_split=0.1)
-
- # 评估模型性能
- y_pred = model.predict(X_test_seq)
- y_pred_labels = np.argmax(y_pred, axis=1)
- accuracy = accuracy_score(y_test, y_pred_labels)
- print("CNN Model Accuracy: {:.2f}%".format(accuracy * 100))
在上述代码中,使用CNN模型来进行文本情感分析,将电影评论分类为正面、负面或中性情感。我们使用了一个示例的电影评论数据集,首先对文本进行了预处理,然后构建了一个CNN模型来进行情感分类。最后,我们训练模型并评估性能。执行后会输出:
CNN Model Accuracy: 75.40%
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。