文章目录

  • 前言
  • 1 CNN概述
  • 2 我的分析
  • 3 代码实现
  • 4 代码分析
  • 6 结果

前言

本文分为CNN讲解和keras实现CNN(mnist数据集)两部分。

1 CNN概述


卷积神经网络(Convolutional Neural Networks / CNNs / ConvNets)与普通神经网络非常相似,它们都由具有可学习的权重和偏置常量(biases)的神经元组成。每个神经元都接收一些输入,并做一些点积计算,输出是每个分类的分数,普通神经网络里的一些计算技巧到这里依旧适用。
具有三维体积的神经元(3D volumes of neurons)
卷积神经网络利用输入是图片的特点,把神经元设计成三个维度 : width, height, depth(注意这个depth不是神经网络的深度,而是用来描述神经元的) 。比如输入的图片大小是 32 × 32 × 3 (rgb),那么输入神经元就也具有 32×32×3 的维度。下面是图解:

2 我的分析


总的来说就是卷积层增大图片高度同时改变图片大小,但是在卷积的过程中会丢失一些信息,所以我们引入池化层。
也就是说,在卷积层不改变图片大小,在池化层改变图片大小。

3 代码实现

import numpy as np
np.random.seed(1337)
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flatten
from keras.optimizers import Adam(X_train,y_train),(X_test,y_test)=mnist.load_data()X_train=X_train.reshape(-1,1,28,28)
X_test=X_test.reshape(-1,1,28,28)
y_train=np_utils.to_categorical(y_train)
y_test=np_utils.to_categorical(y_test)model=Sequential()#Conv layer 1 output shape(32,28,28)
model.add(Convolution2D(nb_filter=32,nb_row=5,nb_col=5,border_mode='same',       # padding method 如果卷积的方式选择为same,那么卷积操作的输入和输出尺寸会保持一致。如果选择valid,那卷积过后,尺寸会变小。input_shape=(1,           # channels28,28)
))
model.add(Activation('relu'))# Pooling layer 1 (max pooling) output shape (32,14,14)
model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2),         # 跳跃2取样border_mode='same',    # Padding method
))# Conv layer 2 output shape (64,14,14)
model.add(Convolution2D(64,5,5,border_mode='same'))
model.add(Activation('relu'))# Pooling layer2 (maxp ooling) output shapr (64,7,7)
model.add(MaxPooling2D(pool_size=(2,2),border_mode='same'))# Fully connected layer 1 input shape(64,7,7)=(3136),output shape(1024)
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))# Fully connected layer 2 to shape (10) for 10 classed
model.add(Dense(10))
model.add(Activation('softmax'))adam=Adam(lr=1e-4)model.compile(optimizer=adam,loss="categorical_crossentropy",metrics=['accuracy']
)print("------------------------Training------------------------")
model.fit(X_train,y_train,nb_epoch=1,batch_size=32)print("\n------------------------Testing------------------------")
loss,accuracy=model.evaluate(X_test,y_test)print("\ntest loss:",loss)
print("\ntest accuracy",accuracy)

4 代码分析

这次我们主要讲CNN(Convolutional Neural Networks)卷积神经网络在 keras 上的代码实现。 用到的数据集还是MNIST。不同的是这次用到的层比较多,导入的模块也相应增加了一些。

from keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten
首先是数据预处理和model的设置。 然后添加第一个卷积层,滤波器数量为32,大小是5*5,Padding方法是same即不改变数据的长度和宽带。 因为是第一层所以需要说明输入数据的 shape ,激励选择 relu 函数。代码如下

model.add(Convolution2D(
batch_input_shape=(64, 1, 28, 28),
filters=32,
kernel_size=5,
strides=1,
padding=‘same’, # Padding method
data_format=‘channels_first’,
))
model.add(Activation(‘relu’))
第一层 pooling(池化,下采样),分辨率长宽各降低一半,输出数据shape为(32,14,14)

model.add(MaxPooling2D(
pool_size=2,
strides=2,
padding=‘same’, # Padding method
data_format=‘channels_first’,
))
再添加第二卷积层和池化层

model.add(Convolution2D(64, 5, strides=1, padding=‘same’, data_format=‘channels_first’))
model.add(Activation(‘relu’))
model.add(MaxPooling2D(2, 2, ‘same’, data_format=‘channels_first’))
经过以上处理之后数据shape为(64,7,7),需要将数据抹平成一维,再添加全连接层1

model.add(Flatten())
model.add(Dense(1024))
model.add(Activation(‘relu’))
添加全连接层2(即输出层)

model.add(Dense(10))
model.add(Activation(‘softmax’))
设置adam优化方法,loss函数, metrics方法来观察输出结果

model.compile(optimizer=adam,
loss=‘categorical_crossentropy’,
metrics=[‘accuracy’])

6 结果


Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)相关推荐

  1. 基于tensorflow、keras利用emnist数据集构建CNN卷积神经网络进行手写字母识别

    EMNIST 数据集是一个包含手写字母,数字的数据集,它具有和MNIST相同的数据格式.The EMNIST Dataset | NIST 引用模块介绍: import tensorflow as t ...

  2. Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用

    一.CNN简介 1. 神经网络基础 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息.输入的讯息称为输入向量. 输出层(Output layer),讯息在神经元链接中 ...

  3. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

    Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文,但 ...

  4. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  5. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  6. [转]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN 原文地址:http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位 ...

  7. 【深度学习】越来越卷,教你使用Python实现卷积神经网络(CNN)

    @Author:Runsen https://blog.csdn.net/weixin_44510615/article/details/117409037 卷积神经网络 Yann LeCun 和Yo ...

  8. python神经网络案例——CNN卷积神经网络实现mnist手写体识别

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python教程全解 CNN卷积神经网络的理论教程参考 ...

  9. 越来越卷,教你使用Python实现卷积神经网络(CNN)

    @Author:Runsen 文章目录 卷积神经网络 网络架构 卷积 卷积层 在Keras中构建卷积层 池化层 全连接层 Python实现卷积神经网络 总结 卷积神经网络 Yann LeCun 和Yo ...

  10. plt保存图片_人工智能Keras CNN卷积神经网络的图片识别模型训练

    CNN卷积神经网络是人工智能的开端,CNN卷积神经网络让计算机能够认识图片,文字,甚至音频与视频.CNN卷积神经网络的基础知识,可以参考:CNN卷积神经网络 LetNet体系结构是卷积神经网络的&qu ...

最新文章

  1. Centos ab测试工具
  2. ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
  3. Linux+nfs配置开机启动,linux NFS配置:NFS开机自动启用及其原理
  4. 今天微软关闭Silverlight官网,Sivlerlight真得要死了吗?
  5. MFC和Win32之三___CGdiObject类和windows Gdi对象
  6. CMake常用命令整理
  7. cassss服务未启动_Mysql无法启动情况下,如何恢复数据呢?
  8. oracle 5表关联查询,Oracle学习笔记5 - 表查询
  9. 如歌将两个数组合并_将数组数据拆分后再合并,作为字典的键,实现多条件数据汇总...
  10. php实现手机号注册登录,thinkphp 手机号和用户名同时登录
  11. 笔记本电脑频繁自动重启_电脑为何总是自动重启 电脑自动重启原因【解决方法】...
  12. 豆豆趣事[2014年04月]
  13. 淘宝镜像安装以及配置
  14. Geoserver通过SLD配置道路线样式,随着放大加粗
  15. Debezium 抽取oracle数据
  16. logiscope系列-使用说明书
  17. mysql中工资表,( 13 ) 数据库中有工资表 , 包括 “ 姓名 ” 、 “ 工资 ” 和 “ 职称 ” 等字段 , 现要对不同职称的职 - 赏学吧...
  18. DailyFi - 9.17|Solana 去中心化收益聚合器 Francium 和 Solana 钱包 Slope 正式合作
  19. 关于振弦采集模块及采集仪振弦频率值准确率的问题
  20. C# 使用WebSocket创建聊天室案例

热门文章

  1. C2872 “ACCESS_MASK”: 不明确的符号
  2. 关于pycharm右键只能选择run Unit不能直接run的解决方法
  3. 海康摄像头取、录像机RTSP视频流的字串格式
  4. libdgl.dll WinError 126
  5. map/set iterator not dereferencable
  6. matplotlib.pyplot中add_subplot方法参数111的含义
  7. php 匿名方法,PHP基于Closure类创建匿名函数的方法详解
  8. python开源人脸识别库识别率达99_Python的开源人脸识别库:离线识别率高达99.38%...
  9. echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
  10. 链接时undefined reference to构造函数