tag 标签: 模式识别

相关帖子
相关博文
  • 热度 2
    2020-1-15 10:05
    2833 次阅读|
    2 个评论
    深度残差收缩网络的Keras图像识别
    从本质上讲,深度残差收缩网络属于卷积神经网络,是深度残差网络(deep residual network, ResNet)的一个变种。它的核心思想在于,在深度学习进行特征学习的过程中,剔除冗余信息是非常重要的;软阈值化是一种非常灵活的、删除冗余信息的方式。 1.深度残差网络 首先,在介绍深度残差收缩网络的时候,经常需要从深度残差网络开始讲起。下图展示了深度残差网络的基本模块,包括一些非线性层(残差路径)和一个跨层的恒等连接。恒等连接是深度残差网络的核心,是其优异性能的一个保障。 2.深度残差收缩网络 深度残差收缩网络,就是对深度残差网络的残差路径进行收缩的一种网络。这里的“收缩”指的就是软阈值化。 软阈值化是许多信号降噪方法的核心步骤,它是将接近于零(或者说绝对值低于某一阈值τ)的特征置为0,也就是将 区间内的特征置为0,让其他的、距0较远的特征也朝着0进行收缩。 如果和前一个卷积层的偏置b放在一起看的话,这个置为零的区间就变成了 。因为τ和b都是可以自动学习得到的参数,这个角度看的话,软阈值化其实是可以将任意区间的特征置为零,是一种更灵活的、删除某个取值范围特征的方式,也可以理解成一种更灵活的非线性映射。 从另一个方面来看,前面的两个卷积层、两个批标准化和两个激活函数,将冗余信息的特征,变换成接近于零的值;将有用的特征,变换成远离零的值。之后,通过自动学习得到一组阈值,利用软阈值化将冗余特征剔除掉,将有用特征保留下来。 通过堆叠一定数量的基本模块,可以构成完整的深度残差收缩网络,如下图所示: 3.图像识别及Keras编程 虽然深度残差收缩网络原先是应用于基于振动信号的故障诊断,但是深度残差收缩网络事实上是一种通用的特征学习方法,相信在很多任务(计算机视觉、语音、文本)中都可能有一定的用处。 下面是基于深度残差收缩网络的MNIST手写数字识别程序(程序很简单,仅供参考): #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Dec 28 23:24:05 2019 Implemented using TensorFlow 1.0.1 and Keras 2.2.1 M. Zhao, S. Zhong, X. Fu, et al., Deep Residual Shrinkage Networks for Fault Diagnosis, IEEE Transactions on Industrial Informatics, 2019, DOI: 10.1109/TII.2019.2943898 @author: me """ from __future__ import print_function import keras import numpy as np from keras.datasets import mnist from keras.layers import Dense, Conv2D, BatchNormalization, Activation from keras.layers import AveragePooling2D, Input, GlobalAveragePooling2D from keras.optimizers import Adam from keras.regularizers import l2 from keras import backend as K from keras.models import Model from keras.layers.core import Lambda K.set_learning_phase(1) # Input image dimensions img_rows, img_cols = 28, 28 # The data, split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data() if K.image_data_format() == 'channels_first': x_train = x_train.reshape(x_train.shape , 1, img_rows, img_cols) x_test = x_test.reshape(x_test.shape , 1, img_rows, img_cols) input_shape = (1, img_rows, img_cols) else: x_train = x_train.reshape(x_train.shape , img_rows, img_cols, 1) x_test = x_test.reshape(x_test.shape , img_rows, img_cols, 1) input_shape = (img_rows, img_cols, 1) # Noised data x_train = x_train.astype('float32') / 255. + 0.5*np.random.random( , img_rows, img_cols, 1]) x_test = x_test.astype('float32') / 255. + 0.5*np.random.random( , img_rows, img_cols, 1]) print('x_train shape:', x_train.shape) print(x_train.shape , 'train samples') print(x_test.shape , 'test samples') # convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) def abs_backend(inputs): return K.abs(inputs) def expand_dim_backend(inputs): return K.expand_dims(K.expand_dims(inputs,1),1) def sign_backend(inputs): return K.sign(inputs) def pad_backend(inputs, in_channels, out_channels): pad_dim = (out_channels - in_channels)//2 return K.spatial_3d_padding(inputs, padding = ((0,0),(0,0),(pad_dim,pad_dim))) # Residual Shrinakge Block def residual_shrinkage_block(incoming, nb_blocks, out_channels, downsample=False, downsample_strides=2): residual = incoming in_channels = incoming.get_shape().as_list() for i in range(nb_blocks): identity = residual if not downsample: downsample_strides = 1 residual = BatchNormalization()(residual) residual = Activation('relu')(residual) residual = Conv2D(out_channels, 3, strides=(downsample_strides, downsample_strides), padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(residual) residual = BatchNormalization()(residual) residual = Activation('relu')(residual) residual = Conv2D(out_channels, 3, padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(residual) # Calculate global means residual_abs = Lambda(abs_backend)(residual) abs_mean = GlobalAveragePooling2D()(residual_abs) # Calculate scaling coefficients scales = Dense(out_channels, activation=None, kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(abs_mean) scales = BatchNormalization()(scales) scales = Activation('relu')(scales) scales = Dense(out_channels, activation='sigmoid', kernel_regularizer=l2(1e-4))(scales) scales = Lambda(expand_dim_backend)(scales) # Calculate thresholds thres = keras.layers.multiply( ) # Soft thresholding sub = keras.layers.subtract( ) zeros = keras.layers.subtract( ) n_sub = keras.layers.maximum( ) residual = keras.layers.multiply( ) # Downsampling (it is important to use the pooL-size of (1, 1)) 1: identity = AveragePooling2D(pool_size=(1,1), strides=(2,2))(identity) # Zero_padding to match channels (it is important to use zero padding rather than 1by1 convolution) if in_channels != out_channels: identity = Lambda(pad_backend)(identity, in_channels, out_channels) residual = keras.layers.add( ) return residual # define and train a model inputs = Input(shape=input_shape) net = Conv2D(8, 3, padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(inputs) net = residual_shrinkage_block(net, 1, 8, downsample=True) net = BatchNormalization()(net) net = Activation('relu')(net) net = GlobalAveragePooling2D()(net) outputs = Dense(10, activation='softmax', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(net) model = Model(inputs=inputs, outputs=outputs) model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics= ) model.fit(x_train, y_train, batch_size=100, epochs=5, verbose=1, validation_data=(x_test, y_test)) # get results K.set_learning_phase(0) DRSN_train_score = model.evaluate(x_train, y_train, batch_size=100, verbose=0) print('Train loss:', DRSN_train_score ) print('Train accuracy:', DRSN_train_score ) DRSN_test_score = model.evaluate(x_test, y_test, batch_size=100, verbose=0) print('Test loss:', DRSN_test_score ) print('Test accuracy:', DRSN_test_score ) 为方便对比,深度残差网络的代码如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat Dec 28 23:19:03 2019 Implemented using TensorFlow 1.0 and Keras 2.2.1 K. He, X. Zhang, S. Ren, J. Sun, Deep Residual Learning for Image Recognition, CVPR, 2016. @author: me """ from __future__ import print_function import numpy as np import keras from keras.datasets import mnist from keras.layers import Dense, Conv2D, BatchNormalization, Activation from keras.layers import AveragePooling2D, Input, GlobalAveragePooling2D from keras.optimizers import Adam from keras.regularizers import l2 from keras import backend as K from keras.models import Model from keras.layers.core import Lambda K.set_learning_phase(1) # input image dimensions img_rows, img_cols = 28, 28 # the data, split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data() if K.image_data_format() == 'channels_first': x_train = x_train.reshape(x_train.shape , 1, img_rows, img_cols) x_test = x_test.reshape(x_test.shape , 1, img_rows, img_cols) input_shape = (1, img_rows, img_cols) else: x_train = x_train.reshape(x_train.shape , img_rows, img_cols, 1) x_test = x_test.reshape(x_test.shape , img_rows, img_cols, 1) input_shape = (img_rows, img_cols, 1) # Noised data x_train = x_train.astype('float32') / 255. + 0.5*np.random.random( , img_rows, img_cols, 1]) x_test = x_test.astype('float32') / 255. + 0.5*np.random.random( , img_rows, img_cols, 1]) print('x_train shape:', x_train.shape) print(x_train.shape , 'train samples') print(x_test.shape , 'test samples') # convert class vectors to binary class matrices y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) def pad_backend(inputs, in_channels, out_channels): pad_dim = (out_channels - in_channels)//2 return K.spatial_3d_padding(inputs, padding = ((0,0),(0,0),(pad_dim,pad_dim))) def residual_block(incoming, nb_blocks, out_channels, downsample=False, downsample_strides=2): residual = incoming in_channels = incoming.get_shape().as_list() for i in range(nb_blocks): identity = residual if not downsample: downsample_strides = 1 residual = BatchNormalization()(residual) residual = Activation('relu')(residual) residual = Conv2D(out_channels, 3, strides=(downsample_strides, downsample_strides), padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(residual) residual = BatchNormalization()(residual) residual = Activation('relu')(residual) residual = Conv2D(out_channels, 3, padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(residual) # Downsampling (it is important to use the pooL-size of (1, 1)) 1: identity = AveragePooling2D(pool_size=(1, 1), strides=(2, 2))(identity) # Zero_padding to match channels (it is important to use zero padding rather than 1by1 convolution) if in_channels != out_channels: identity = Lambda(pad_backend)(identity, in_channels, out_channels) residual = keras.layers.add( ) return residual # define and train a model inputs = Input(shape=input_shape) net = Conv2D(8, 3, padding='same', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(inputs) net = residual_block(net, 1, 8, downsample=True) net = BatchNormalization()(net) net = Activation('relu')(net) net = GlobalAveragePooling2D()(net) outputs = Dense(10, activation='softmax', kernel_initializer='he_normal', kernel_regularizer=l2(1e-4))(net) model = Model(inputs=inputs, outputs=outputs) model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics= ) model.fit(x_train, y_train, batch_size=100, epochs=5, verbose=1, validation_data=(x_test, y_test)) # get results K.set_learning_phase(0) resnet_train_score = model.evaluate(x_train, y_train, batch_size=100, verbose=0) print('Train loss:', resnet_train_score ) print('Train accuracy:', resnet_train_score ) resnet_test_score = model.evaluate(x_test, y_test, batch_size=100, verbose=0) print('Test loss:', resnet_test_score ) print('Test accuracy:', resnet_test_score ) 备注: (1)深度残差收缩网络的结构比普通的深度残差网络复杂,也许更难训练。 (2)程序里只设置了一个基本模块,在更复杂的数据集上,可适当增加。 (3)如果遇到这个TypeError:softmax() got an unexpected keyword argument 'axis',就点开tensorflow_backend.py,将return tf.nn.softmax(x, axis=axis)中的第一个axis改成dim即可。 参考文献: M. Zhao, S. Zhong, X. Fu, et al., Deep residual shrinkage networks for fault diagnosis, IEEE Transactions on Industrial Informatics, 2019, DOI: 10.1109/TII.2019.2943898 https://ieeexplore.ieee.org/document/8850096
相关资源
  • 所需E币: 0
    时间: 2023-3-8 14:38
    大小: 17.44MB
    上传者: Bullboy
    模式识别的基础入门书,快来看看吧
  • 所需E币: 5
    时间: 2023-2-14 12:34
    大小: 950.62KB
    上传者: czd886
    基于随机森林和二维码模式识别的农业移动机器人设计
  • 所需E币: 5
    时间: 2023-2-11 21:40
    大小: 1.71MB
    上传者: ZHUANG
    重叠时间切片改进深度神经网络的运动想象EEG模式识别
  • 所需E币: 3
    时间: 2023-2-11 14:37
    大小: 1012.56KB
    上传者: ZHUANG
    攻击模式识别方法在网络安全态势评估中的应用
  • 所需E币: 0
    时间: 2022-10-11 12:47
    大小: 326.36KB
    上传者: czd886
    模式识别在变电站远程视频监控系统中的应用.
  • 所需E币: 5
    时间: 2022-9-26 23:17
    大小: 4.07MB
    上传者: czd886
    关于智慧城市安防领域中模式识别技术的有效运用分析
  • 所需E币: 0
    时间: 2022-7-8 09:10
    大小: 3.28MB
    上传者: ZHUANG
    模式识别技术的无线通信网络安全系统可靠性评价
  • 所需E币: 1
    时间: 2022-6-14 11:42
    大小: 11.58MB
    模式识别与机器学习2014马春鹏Machinelearning
  • 所需E币: 5
    时间: 2022-3-15 00:44
    大小: 10.12MB
    上传者: samewell
    模式识别与机器学习中文版.pdf
  • 所需E币: 0
    时间: 2022-3-15 00:44
    大小: 10.06MB
    上传者: samewell
    《现代模式识别》-孙即祥.pdf
  • 所需E币: 1
    时间: 2022-3-1 16:34
    大小: 141.03MB
    上传者: 西风瘦马
    3206006_模式识别与人工智能(基于MATLAB).pdf
  • 所需E币: 5
    时间: 2022-3-1 14:52
    大小: 16.7MB
    上传者: 西风瘦马
    模式识别与智能计算—MATLAB技术实现(第4版)内容简介本书广泛吸取统计学、神经网络、数据挖掘、机器学习、人工智能、群体智能计算等学科的先进思想和理论,将其应用到模式识别领域中;以一种新的体系,系统、全面地介绍模式识别的理论、方法及应用。全书共分为13章,内容包括:模式识别概述,特征的选择与优化,模式相似性测度,基于概率统计的贝叶斯分类器设计,判别函数分类器设计,神经网络分类器设计,决策树分类器设计,粗糙集分类器设计,聚类分析,模糊聚类分析,遗传算法聚类分析,粒子群算法聚类分析,Memetic算法仿生计算。书中所述理论知识均提供实现步骤、示范性代码及验证实例的效果图示,以达到理论与实践相结合的目的。本书可作为高等院校计算机工程、信息工程、生物医学工程、智能机器人学、工业自动化、模式识别等学科研究生和本科生的教材或教学参考书,也可供有关工程技术人员参考。。图书在版编目(CIP)数据模式识别与智能计算:MATLAB技术实现/杨淑莹,郑清春著郾—4版郾—北京:电子工业出版社,2019郾12“十二五冶普通高等教育本科国家级规划教材ISBN978-7-121-35866-1玉.淤模…摇域郾淤杨…于郑…摇芋郾淤模式识别-计算机辅助计算-Matlab软件-高等学校-教材于人工智能-计算机辅助计算-Matlab软件-高等学校-教材摇郁郾淤O235-39于TP183中国版本图书馆CIP数据核字(2018)第292329号
  • 所需E币: 4
    时间: 2022-2-27 08:52
    大小: 4.2MB
    上传者: ZHUANG
    用于外骨骼机器人控制的人体肌电信号模式识别方法研究
  • 所需E币: 3
    时间: 2022-1-26 19:17
    大小: 12.18MB
    上传者: samewell
    PRML中文版-模式识别与机器学习.pdf
  • 所需E币: 0
    时间: 2022-1-22 17:11
    大小: 12.48MB
    上传者: samewell
    模式识别原理与应用.pdf
  • 所需E币: 5
    时间: 2021-9-19 11:23
    大小: 1.21MB
    上传者: ZHUANG
    基于模式识别原理的模拟电路故障诊断神经网络方法
  • 所需E币: 5
    时间: 2021-9-19 20:43
    大小: 257.37KB
    上传者: ZHUANG
    基于模糊模式识别的模拟电路故障诊断方法.
  • 所需E币: 5
    时间: 2021-9-17 20:49
    大小: 2.03MB
    上传者: ZHUANG
    基于模式识别原理的神经网络模拟电路故障诊断方法.
  • 所需E币: 1
    时间: 2020-11-26 15:40
    大小: 617.4KB
    上传者: 指的是在下
    全光纤安防系统模式识别混合编程的实现
  • 所需E币: 4
    时间: 2020-1-2 02:02
    大小: 267.85KB
    上传者: rdg1993
    将模式识别方法应用到入侵检测领域,用以区分正常和异常的用户或主机行为.采用KDD99作为实验数据集,通过计算信息增益,从原始数据中选取对分类结果影响较大的特征属性;再分别选取两种带监督的模式识别方法支持向量机(SVM)和多层神经网络(MNN)以及两种不带监督的聚类方法Single-Linkage和K-Means进行实验.实验结果表明,上述方法在入侵检测领域中具有很好的应用前景.模式识别方法在入侵检测中的应用姜楠(天津大学计算机科学与技术学院,天津300072)摘要:将模式识别方法应用到入侵检测领域,用以区分正常和异常的用户或主机行为。采用KDD99作为实验数据集,通过计算信息增益,从原始数据中选取对分类结果影响较大的特征属性;再分别选取两种带监督的模式识别方法支持向量机(SVM)和多层神经网络(MNN)以及两种不带监督的聚类方法Sin甜e―Linkage和K―Means进行实验。实验结果表明,上述方法在入侵检测领域中具有很好的应用前景。关键词:模式识别入侵检测支持向量机聚类IntmsiondetectionusingpattemrecognitionmethodsJIANGN”……