文章目录

  • CNN
    • 1.CNN介绍
    • 2.CNN基本原理
  • 代码实现
  • 手写数字复杂网络层抽特征可视化工具http://scs.ryerson.ca/~aharley/vis/conv/

CNN

1.CNN介绍

CNN是应用在图像识别领域较多的一种机器学习算法,它与普通的神经网络有点类似,通过输入层然后乘以权重加上偏置,并且通过一个非线性的激活函数,即可得到输出值。CNN要做的是给定一幅图,对该图像进行编码最终即可将该图进行分类,而此过程中参数相比普通神经网络的参数要少,并且更加高效。

CNN通常由三个部分组成,分别是Conv layer、Pooling layer、Full-connected layer,它们组成了一个完整的CNN结构。通常输入是一幅图片,whc,分别为图像的宽度高度以及频道数目(RGB),conv layer将计算输入层与权重矩阵的卷积,然后将该结果通过ReLU函数,Pooling layer用于对卷积后的矩阵进行抽样降维,例如按22矩形大小对原卷积矩阵分成若干个22大小的块,然后对于每个块只取其中的最大值,这样就可以使得维度降低为原来的1/4,而这就是max pooling方法,该方法的优点是减少了计算过程中参数的个数以及防止过拟合的产生。最后,经过的是MLP,方法类似,可以参考以前的博文(逻辑回归及感知器)。

总结一下,CNN就是将一幅图像经过一层又一层的编码过后,可以得到一个结论值,该值是对该图像的分类或描述。

2.CNN基本原理

当输入数据的维度很大时,如图像,就不能简单地每个输入值连接一个神经元,这时候每一个神经元要负责一片感知场,例如若输入数据为32323,而感知场的个数为55,则此时conv layer的权重为55*3,因此共有75个权重。这样就可以有效减少参数的数目。

一般情况下,CNN的结构形式是:输入层—>Conv层—>Pooling层—>(重复Conv、Pooling层)…—>FC层—>输出结果。具体说来,通常还有以下几种形式:

Input--->((Conv--->ReLU--->Conv--->ReLU)--->Pooling)*3--->(FC--->ReLU)*2--->OutputInput--->(Conv--->ReLU--->Pooling)*2--->FC--->ReLU--->Output

通常输入层大小一般为2的整数倍,如32,64,96,224,384等。

通常卷积层使用较小的filter,如33,最多也就55,并且使用stride=1(stride表示卷积时对input进行每次移动一步,上下左右都是),并且对原来的input进行padding(使用0元素填充)。

Pooling层用于对卷积结果进行降低维度,例如选择22的区域对卷积层进行降低维度,则选择22区域的最大值作为输出,这样卷积层的维度就降为之前一半。

卷积层和Pooling层是CNN的核心所在,下图显示了CNN的结构图:

较低层是用来卷积以及抽样的,较高的层用来进行逻辑回归。

代码实现

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam# 载入数据
(x_train,y_train),(x_test,y_test) = mnist.load_data()# (60000,28,28)->(60000,28,28,1)
x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0
# 换one hot格式
y_train = np_utils.to_categorical(y_train,num_classes=10)
y_test = np_utils.to_categorical(y_test,num_classes=10)# 定义顺序模型
model = Sequential()# 第一个卷积层
# input_shape 输入平面
# filters 卷积核/滤波器个数
# kernel_size 卷积窗口大小
# strides 步长
# padding padding方式 same/valid
# activation 激活函数
model.add(Convolution2D(input_shape = (28,28,1),filters = 32,kernel_size = 5,strides = 1,padding = 'same',activation = 'relu'
))
# 第一个池化层
model.add(MaxPooling2D(pool_size = 2,strides = 2,padding = 'same',
))# 第二个卷积层
model.add(Convolution2D(64,5,strides=1,padding='same',activation = 'relu'))
# 第二个池化层
model.add(MaxPooling2D(2,2,'same'))
# 把第二个池化层的输出扁平化为1维
model.add(Flatten())# 第一个全连接层
model.add(Dense(1024,activation = 'relu'))
# Dropout
model.add(Dropout(0.5))
# 第二个全连接层
model.add(Dense(10,activation='softmax'))# 定义优化器
adam = Adam(lr=1e-4)
# 定义优化器,loss function,训练过程中计算准确率
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=10)# 评估模型
loss,accuracy = model.evaluate(x_test,y_test)print('test loss',loss)
print('test accuracy',accuracy)

手写数字复杂网络层抽特征可视化工具http://scs.ryerson.ca/~aharley/vis/conv/

Keras【Deep Learning With Python】更优模型探索Keras实现CNN相关推荐

  1. Keras【Deep Learning With Python】更优模型探索Keras实现RNN

    文章目录 RNN简介 1.RNN的应用 2.什么是RNN? 3.RNN用来做什么? 4. 训练RNNs Keras代码实现(Mnist) RNN简介 1.RNN的应用 RNN主要有两个应用,一是评测一 ...

  2. Keras【Deep Learning With Python】更优模型探索Keras实现LSTM

    文章目录 1.LSTM 网络 2.之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用. 3.代码实现 1.LSTM 网络 可以理解为RN ...

  3. Keras Tutorial: Deep Learning in Python

    This Keras tutorial introduces you to deep learning in Python: learn to preprocess your data, model, ...

  4. Deep learning with Python 学习笔记(9)

    神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...

  5. python思想读后感_《Deep Learning with Python》读后感精选

    <Deep Learning with Python>是一本由Francois Chollet著作,Manning Publications出版的Paperback图书,本书定价:USD ...

  6. Deep learning with Python 学习笔记(6)

    本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...

  7. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  8. Deep Learning with Python

    1.学习地址 Deep Learning with Python(wang@123) 2.大神的twitter 大神的twitter

  9. Keras【Deep Learning With Python】—Keras基础

    文章目录 1.关于Keras 2.Keras的模块结构 3.使用Keras搭建一个神经网络 4. 主要概念 5.第一个示例 下载网站数据注意 1.关于Keras 1)简介 Keras是由纯python ...

最新文章

  1. Matlab R2016a 如何设置自己称心的工作区域
  2. 通过yumdownloader下载rpm包
  3. Junit实现接口类测试
  4. 用JS解决图片太大,把网站撑变形的问题
  5. Java - Jackson JSON Java Parser API
  6. hiho1249 Xiongnu's Land
  7. Silverlight:Downloader的使用(event篇)
  8. java 启动内存参数_请问该如何设置Java虚拟机JVM启动内存参数?
  9. 传海思为 PC 开发 CPU/GPU ;小米将发布第二款 5G 手机;Firefox 68.0.2 发布 | 极客头条...
  10. Cocos2d-x3.2 EditBox的使用
  11. 【算法学习】Fast burst images denoising
  12. Android实现计算器布局(约束布局
  13. 风雨三十载,华为的沉浮往事
  14. 手动实现一门图灵完备的编程语言——Brainfuck
  15. Unity TextMesh Pro标记
  16. 青海电大随学随考计算机,[青海电大]17秋随学随考中国现当代文学名著导读(1)作业4资料...
  17. Android 打电话实现两种方法
  18. 《第一财经周刊》不一样的Startup:中国创业者喜欢时尚娱乐
  19. 恢复U盘未分配空间怎么合并,u盘分区扩展卷不显示怎么办
  20. 国内10个千年古镇 绝美春色洗涤你的眼

热门文章

  1. Windows 无法启动 NVIDIA Display Container LS 服务
  2. android OkHttp form 上传图片和参数
  3. Elasticsearch6 去重
  4. Caffe学习系列(8):solver优化方法
  5. python计算相关系数
  6. 青龙羊毛——广汽三菱(搬运)
  7. JUNIPER设备常用命令总结
  8. 炫舞时代服务器维护中怎么办,炫舞时代出bug是怎么回事 具体事件详细始末
  9. python utf 8_python写utf-8文件的问题
  10. tomcat的jsp页面超过65535,导致500报错