机器学习 | CNN-softmax学习及实现

CNN基本结构

如下图所示,卷积神经网络CNN的基本结构主要有三个层,分别是卷积层池化层全连接层

第一层为卷积层,第二层为池化层(又称降采样层或下采样层),第三四层和一二层一样,最后把池化结果拉平成一条长向量,传入到底层的全连接层中,最后输出结果。

卷积层

增强信号,提取图像的底层特征(像是一个提纯的过程,可以有多个卷积核进行卷积,将输入层的特征映射到卷积层上);

特征图:卷积操作后的图像,卷积核(就像是一个固定大小的窗户,它每次会圈住输入层矩阵的一部分数据,它也是一个矩阵,每个位置的数值表示权重)在输入层上边滑动(大小不变,只是卷积核位置有变化,导致圈住的数据不同)边进行矩阵乘法运算得到。【通过矩阵乘法理解,每次将一行一列数据相乘,变成一个数据,按位置顺序排列得到相乘结果】

感受野:被卷积核光顾到的位置,即卷积核此时圈住的那一块矩阵区域

池化层

【计算图像一个区域上某一个特定特征的平均值或最大值】

减小数据维度,预防过拟合的产生;

1.均值池化:对池化区域内的像素点取均值,得到的特征数据对背景信息更敏感

2.最大池化:对池化区域内的像素点取最大值,的道德特征对纹理特征信息更加敏感

全连接层

汇总之前卷积层和池化层得到的底层图像的特征和信息

输出可以是多分类输出(softmax),也可以是二分类输出(sigmoid)

softmax相当于一个归一化,输出的是每个类别在原图中的概率,最大的就是图片所属的类

激活层——softmax

激励层:将卷积层输出结果做非线性映射

提供非线性建模能力

处理多分类问题,只有一个正确答案,互斥输出。

Softmax(x)=\frac{e^{x_{i}}}{\sum_{j=1}^{n}e^{x_{j}}}

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

# 构建CNN模型
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(image_height, image_width, num_channels)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(2, activation='softmax'))

# 编译模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型
model.fit(X_train, y_train, epochs=10, validation_data=(X_val, y_val))

# 提取特征
feature_extractor = tf.keras.Model(inputs=model.inputs, outputs=model.layers[-2].output)
features = feature_extractor.predict(X_train)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值