人工智能-实验四( 二 )


池化
? 池化的目的是降低特征维度 , 方式是对不同位置的特征进行聚合统计 。聚合的方法有多种 , 包括平均池化和最大池化等 。
全连接层
? 卷积神经网络上下层之间采用局部连接的方式构建网络 , 模拟了神经细胞只对局部区域有响应的现象 。但在卷积和池化后 , 通常通过全连接层得到最终的结果 。全连接神经网络是指对于n层和n-1层 , n-1层的任意一个节点 , 都和第n层所有节点连接 。

人工智能-实验四

文章插图
卷积神经网络
? 将卷积层、池化层、全连接网络进行组合 , 就能得到完整的卷积神经网络 。通常卷积和池化会有许多层 , 进行特征的低层次到高层次的提取 , 最后通过一个全连接神经网络来进行分类 。
3.循环神经网络RNN
? 循环神经网络通常用于自然语言处理 。语言处理的特点是存在上下文的关联 , 因此神经网络必须要建立时序上的关系 。RNN神经网络中 , 每个神经元既有当前得到输入 , 也接收之前的输出 , 通过共同作用来计算输出结果 。通常使用循环神经网络来提取特征 , 最后通过全连接层实现目标输出 。
三.实验内容
? Keras是一个深度学习框架 , 封装了许多高层的神经网络模块 , 包括全连接层、卷积层等 。本实验中的内容都是基于Keras实现的 。
1.Keras构建CNN/RNN
构建CNN
? Keras提供了一些简易的接口 , 能够快速构建卷积神经网络 。步骤如下:
? 创建一个模型的示例如下:
model = keras.Sequential()model.add(Conv2D(32, kernel_size=3, activation='relu', input_shape=[IMAGE_HEIGHT, IMAGE_WIDTH, 3]))model.add(MaxPooling2D(pool_size=2))model.add(Conv2D(32, kernel_size=3, activation='relu'))model.add(MaxPooling2D(pool_size=2))model.add(Flatten())model.add(Dense(96, activation='relu'))model.add(Dense(2, activation='softmax'))
? 该模型包含两个卷积层 , 每个卷积层后有一个池化层 , 然后连接了一个扁平层 , 扁平层的作用是将多维的输入一维化 , 用在从卷积层到全连接层的过渡 , 最后连接了两个全连接层 , 输出结果 。
? 该模型的结果是一个两位的向量 。这个模型是用于分类问题的 , 由于图像共有两类 , 因此最后有两个值 , 这两个值就是图像属于其中一类的概率 , 选择概率大的作为分类的结果 。在训练时的目标输出也要转换为这种形式 , 称为编码 , 将分类值映射到整数值 , 将整数值表示为二进制向量 , 然后进行训练 。
构建RNN
? 类似于构建CNN , Keras构建RNN的过程也很简单:
model = Sequential()# 对输入的影评进行word embedding , 一般对于自然语言处理问题需要进行word embeddingmodel.add(Embedding(1000, 64))# 构建一层有40个神经元的RNN层model.add(SimpleRNN(40))# 将RNN层的输出接到只有一个神经元全连接层model.add(Dense(1, activation='sigmoid'))
? 其中有一层层 , 这个层实现语义空间到向量空间的映射 , 把每个词语都转换为固定维数的向量 , 并且使语义接近的两个词转化为向量后 , 这两个向量的相似度也高 。
2.基于Keras的人脸识别
? 实验使用的数据集由多张灰度图像组成 , 分辨率为284*286 , 标记为.pgm , 平台以转换为JPG格式 , xxxx为索引 。共有16类人物 , 用字母A-V来表示 。每个人物有20-50个样本 。