Keras【Deep Learning With Python】CNN卷积神经网络(看不懂你打我系列)
文章目录
- 前言
- 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卷积神经网络(看不懂你打我系列)相关推荐
- 基于tensorflow、keras利用emnist数据集构建CNN卷积神经网络进行手写字母识别
EMNIST 数据集是一个包含手写字母,数字的数据集,它具有和MNIST相同的数据格式.The EMNIST Dataset | NIST 引用模块介绍: import tensorflow as t ...
- Python CNN卷积神经网络实例讲解,CNN实战,CNN代码实例,超实用
一.CNN简介 1. 神经网络基础 输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息.输入的讯息称为输入向量. 输出层(Output layer),讯息在神经元链接中 ...
- Deep Learning论文笔记之(五)CNN卷积神经网络代码理解
Deep Learning论文笔记之(五)CNN卷积神经网络代码理解 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但 ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...
- [转]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN 原文地址:http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位 ...
- 【深度学习】越来越卷,教你使用Python实现卷积神经网络(CNN)
@Author:Runsen https://blog.csdn.net/weixin_44510615/article/details/117409037 卷积神经网络 Yann LeCun 和Yo ...
- python神经网络案例——CNN卷积神经网络实现mnist手写体识别
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python教程全解 CNN卷积神经网络的理论教程参考 ...
- 越来越卷,教你使用Python实现卷积神经网络(CNN)
@Author:Runsen 文章目录 卷积神经网络 网络架构 卷积 卷积层 在Keras中构建卷积层 池化层 全连接层 Python实现卷积神经网络 总结 卷积神经网络 Yann LeCun 和Yo ...
- plt保存图片_人工智能Keras CNN卷积神经网络的图片识别模型训练
CNN卷积神经网络是人工智能的开端,CNN卷积神经网络让计算机能够认识图片,文字,甚至音频与视频.CNN卷积神经网络的基础知识,可以参考:CNN卷积神经网络 LetNet体系结构是卷积神经网络的&qu ...
最新文章
- Centos ab测试工具
- ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测
- Linux+nfs配置开机启动,linux NFS配置:NFS开机自动启用及其原理
- 今天微软关闭Silverlight官网,Sivlerlight真得要死了吗?
- MFC和Win32之三___CGdiObject类和windows Gdi对象
- CMake常用命令整理
- cassss服务未启动_Mysql无法启动情况下,如何恢复数据呢?
- oracle 5表关联查询,Oracle学习笔记5 - 表查询
- 如歌将两个数组合并_将数组数据拆分后再合并,作为字典的键,实现多条件数据汇总...
- php实现手机号注册登录,thinkphp 手机号和用户名同时登录
- 笔记本电脑频繁自动重启_电脑为何总是自动重启 电脑自动重启原因【解决方法】...
- 豆豆趣事[2014年04月]
- 淘宝镜像安装以及配置
- Geoserver通过SLD配置道路线样式,随着放大加粗
- Debezium 抽取oracle数据
- logiscope系列-使用说明书
- mysql中工资表,( 13 ) 数据库中有工资表 , 包括 “ 姓名 ” 、 “ 工资 ” 和 “ 职称 ” 等字段 , 现要对不同职称的职 - 赏学吧...
- DailyFi - 9.17|Solana 去中心化收益聚合器 Francium 和 Solana 钱包 Slope 正式合作
- 关于振弦采集模块及采集仪振弦频率值准确率的问题
- C# 使用WebSocket创建聊天室案例
热门文章
- C2872	“ACCESS_MASK”: 不明确的符号
- 关于pycharm右键只能选择run Unit不能直接run的解决方法
- 海康摄像头取、录像机RTSP视频流的字串格式
- libdgl.dll WinError 126
- map/set iterator not dereferencable
- matplotlib.pyplot中add_subplot方法参数111的含义
- php 匿名方法,PHP基于Closure类创建匿名函数的方法详解
- python开源人脸识别库识别率达99_Python的开源人脸识别库:离线识别率高达99.38%...
- echarts js 删除框选数据_echarts同一页面中四个图表切换的js数据交互方法示例
- 链接时undefined reference to构造函数