from __future__ import print_function
import numpy as np
np.random.seed(1337)
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
batch_size = 128
nb_classes = 10
nb_epoch = 12
# 输入图像的维度,此处是mnist图像,因此是28*28
img_rows, img_cols = 28, 28
# 卷积层中使用的卷积核的个数
nb_filters = 32
# 池化层操作的范围
pool_size = (2,2)
# 卷积核的大小
kernel_size = (3,3)
# keras中的mnist数据集已经被划分成了60,000个训练集,10,000个测试集的形式,按以下格式调用即可
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 后端使用tensorflow时,即tf模式下,
# 会将100张RGB三通道的16*32彩色图表示为(100,16,32,3),
# 第一个维度是样本维,表示样本的数目,
# 第二和第三个维度是高和宽,
# 最后一个维度是通道维,表示颜色通道数
X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)
X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
# 将X_train, X_test的数据格式转为float32
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 归一化
X_train /= 255
X_test /= 255
# 打印出相关信息
print('X_train shape:', X_train.shape)
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')
# 将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵,
# 相当于将向量用one-hot重新编码
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
# 建立序贯模型
model = Sequential()
# 卷积层,对二维输入进行滑动窗卷积
# 当使用该层为第一层时,应提供input_shape参数,在tf模式中,通道维位于第三个位置
# border_mode:边界模式,为"valid","same"或"full",即图像外的边缘点是补0
# 还是补成相同像素,或者是补1
model.add(Convolution2D(nb_filters, kernel_size[0] ,kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
# 卷积层,激活函数是ReLu
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
# 池化层,选用Maxpooling,给定pool_size,dropout比例为0.25
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
# Flatten层,把多维输入进行一维化,常用在卷积层到全连接层的过渡
model.add(Flatten())
# 包含128个神经元的全连接层,激活函数为ReLu,dropout比例为0.5
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
# 包含10个神经元的输出层,激活函数为Softmax
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# 输出模型的参数信息
model.summary()
# 配置模型的学习过程
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
# 训练模型
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
# 按batch计算在某些输入数据上模型的误差
score = model.evaluate(X_test, Y_test, verbose=0)
# 输出训练好的模型在测试集上的表现
print('Test score:', score[0])
print('Test accuracy:', score[1])
没有合适的资源?快使用搜索试试~ 我知道了~
feature-extraction代码
共16个文件
py:8个
jpg:7个
png:1个
需积分: 2 0 下载量 166 浏览量
2024-02-13
09:35:36
上传
评论
收藏 1.5MB ZIP 举报
温馨提示
特征提取是卷积神经网络(CNN)中的一个重要环节,它主要通过**卷积层来实现**。以下是特征提取过程的详细介绍: 1. **卷积层的作用**:卷积层是CNN中负责提取特征的核心部分。它通过一系列可学习的滤波器(或称为卷积核)与输入数据进行卷积操作,从而检测和提取局部特征。 2. **参数共享**:在卷积层中,每个滤波器都会在整个输入数据上滑动,并且相同的滤波器权重会在不同的位置上重复使用。这种参数共享机制大大减少了网络中的参数数量,使得CNN相比全连接神经网络具有更少的参数和更快的训练速度。 3. **特征映射**:每个滤波器会产生一个特征映射(feature map),它是滤波器在输入数据上的所有位置的响应。这些特征映射可以看作是从原始数据中提取的不同特征的可视化表示。 4. **多层结构**:CNN通常包含多个卷积层,每个卷积层都可以提取不同层次的特征。随着网络深度的增加,后续层可以基于前一层提取的特征进一步抽象和组合,形成更高层次的特征表示。 5. **非线性激活**:在卷积层之后,通常会应用非线性激活函数,如ReLU(Rectified Linear Unit)。
资源推荐
资源详情
资源评论
收起资源包目录
feature_extraction.zip (16个子文件)
feature_extraction
subpixel5.png 43KB
sift_keypoints2.jpg 404KB
Shi_Tomasi.py 337B
test1.py 387B
surf2.py 784B
fly.jpg 349KB
sift_keypoints.jpg 399KB
feature.py 501B
cnn.py 4KB
home.jpg 330KB
text2.py 879B
simple.jpg 12KB
chessboard.jpg 32KB
corner2.jpg 8KB
feature2.py 807B
sift2.py 460B
共 16 条
- 1
资源评论
三月七꧁꧂
- 粉丝: 1296
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功