四、卷积神经网络(Convolution Neural Networks)

一、CNN(Convolution Neural Networks)

卷积神经网络基本思想:识别物体的特征,来进行判断物体
卷积Convolution:过滤器filter中的数值与图片像素值对应相乘再相加,6 * 6卷积一次(步数为1)变成4 * 4
Max Pooling:对卷积之后的4 * 4图像,分区选取最大值(2*2选取),变成 2 * 2;
Max Pooling作用是增强特征,减少数据

Ⅰ卷积

在这里插入图片描述
原图在这里插入图片描述
竖直过滤器在这里插入图片描述最终效果在这里插入图片描述

垂直过滤器在这里插入图片描述最终效果在这里插入图片描述

ⅡMax Pooling

在这里插入图片描述
Max Pooling之后尺寸减小为原来的一半
在这里插入图片描述

ⅢCNN卷积神经网络就是卷积+Max Pooling

二、全连接和卷积网络比较

传统的全连接网络

全连接网络 loss: 0.2400 - acc: 0.9113

from tensorflow import keras
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as npfashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))train_images_y = train_images/255
#model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
#optimizer="adam",loss="sparse_categorical_crossentropy",metrics=[`'accuracy']
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])model.fit(train_images_y,train_labels,epochs=10)
"""
Epoch 1/10
60000/60000 [==============================] - 2s 38us/sample - loss: 0.4977 - acc: 0.8257
Epoch 2/10
60000/60000 [==============================] - 2s 41us/sample - loss: 0.3779 - acc: 0.8637
Epoch 3/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.3390 - acc: 0.8762
Epoch 4/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.3158 - acc: 0.8847
Epoch 5/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.2971 - acc: 0.8899
Epoch 6/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.2829 - acc: 0.8963
Epoch 7/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.2702 - acc: 0.8999
Epoch 8/10
60000/60000 [==============================] - 2s 38us/sample - loss: 0.2584 - acc: 0.9035
Epoch 9/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.2507 - acc: 0.9059
Epoch 10/10
60000/60000 [==============================] - 2s 39us/sample - loss: 0.2400 - acc: 0.9113
"""

卷积神经网络

卷积神经网络 loss: 0.0964 - acc: 0.9640

from tensorflow import keras
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as npfashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
model = keras.Sequential()model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2,2))
model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2,2))model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))train_images_y = train_images/255
#model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
#optimizer="adam",loss="sparse_categorical_crossentropy",metrics=[`'accuracy']
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])model.fit(train_images_y.reshape(-1,28,28,1),train_labels,epochs=10)
"""
Epoch 1/10
60000/60000 [==============================] - 43s 710us/sample - loss: 0.4380 - acc: 0.8408
Epoch 2/10
60000/60000 [==============================] - 41s 682us/sample - loss: 0.2923 - acc: 0.8920
Epoch 3/10
60000/60000 [==============================] - 41s 680us/sample - loss: 0.2485 - acc: 0.9082
Epoch 4/10
60000/60000 [==============================] - 41s 681us/sample - loss: 0.2164 - acc: 0.9190
Epoch 5/10
60000/60000 [==============================] - 41s 681us/sample - loss: 0.1886 - acc: 0.9297
Epoch 6/10
60000/60000 [==============================] - 41s 680us/sample - loss: 0.1654 - acc: 0.9376
Epoch 7/10
60000/60000 [==============================] - 41s 686us/sample - loss: 0.1462 - acc: 0.9446
Epoch 8/10
60000/60000 [==============================] - 41s 681us/sample - loss: 0.1254 - acc: 0.9525
Epoch 9/10
60000/60000 [==============================] - 42s 706us/sample - loss: 0.1115 - acc: 0.9579
Epoch 10/10
60000/60000 [==============================] - 47s 780us/sample - loss: 0.0964 - acc: 0.9640
"""

很明显,CNN要比传统的全连接网络正确率高,损失函数值小,但训练时间长

三、分析卷积神经网络

在卷积神经网络训练的基础上,看下网络结构
七层!!!

Output Shape

原始图像像素为28 * 28,这里的过滤器为3 * 3的卷积核,故
第一层图像变成了26 * 26,64为64个卷积核(过滤器),经过一次卷积之后,一张图像就变成了64张图像了
第二层,将图像变为原来的四分之一,长宽各减半,变成了13 * 13
第三层,卷积层,卷积核3 * 3,去掉2个像素点,变成11 * 11的图像
第四层,将图像变为原来的四分之一,长宽各减半,变成了5 * 5
第五层,flatten将所有像素进行展平,5 * 5 * 64=1600

Param参数

第一层,33的卷积核(过滤器)有64个,33*64=576,每一个都还有一个bias,故576+64=640个参数
第二层没有调整参数,只是变化了尺寸,故参数为0
第三层,接第一层的576个参数,与本身的64个卷积核连接,576 * 64=36864,再加上每一个的bias,36864 + 64=36928
第四层没有调整参数,只是变化了尺寸,故参数为0
第五层,展平操作,就是把所有的像素点值都展成一行,没有调整参数,只是尺寸变化了而已,故参数为0
第六层,代码设置的就是128个神经元,故与上一层进行全连接操作,1600 * 128=204800,再加上每一个都有一个bias,故204800 + 128 = 204928
第七层,就是10分类而已,上一层128个神经元与这10个神经元全排列,128 * 10 =1280,在加上每个的bias,1280+10=1290

model.summary()
"""
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_2 (Conv2D)            (None, 26, 26, 64)        640       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 13, 13, 64)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 11, 11, 64)        36928     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 1600)              0         
_________________________________________________________________
dense_4 (Dense)              (None, 128)               204928    
_________________________________________________________________
dense_5 (Dense)              (None, 10)                1290      
=================================================================
Total params: 243,786
Trainable params: 243,786
Non-trainable params: 0
_________________________________________________________________
"""

四、详细查看各层网络

对测试集中第一张图像进行七层网络分析

test_images_y = test_images/255#因为前面训练的时候对训练图像进行了归一化操作,故测试的时候也需要对测试图像进行归一化操作
layer_outputs = [layer.output for layer in model.layers]
activation_model = tf.keras.models.Model(inputs=model.input,outputs=layer_outputs)
pred = activation_model.predict(test_images_y[0].reshape(1,28,28,1))#这里对第一张图像进行测试
pred

在这里插入图片描述
预测的结果包括七层网络的结果

len(pred)
"""
7
"""

pred[第几层网络0-6一共七层][0,:,:,第几个卷积核1-64一共64个卷积核]

第一层网络,卷积层的shape

pred[0].shape
"""
(1, 26, 26, 64)
"""

第一个0表示第一层,卷积层
第二个0是画图用的,必须为0
:,:表示展示图片的所有信息
第一个1表示第一个卷积核(过滤器)

pred[0][0,:,:,1]

在这里插入图片描述

第一层—卷积层

看下第一层的使用第一个卷积核(共64个卷积核),生成的图像

plt.imshow(pred[0][0,:,:,1])

在这里插入图片描述

看下第一层的使用第二个卷积核(共64个卷积核),生成的图像

plt.imshow(pred[0][0,:,:,2])

在这里插入图片描述

第二层—Max Polling层

看下第二层的使用第一个卷积核(共64个卷积核),生成的图像

plt.imshow(pred[1][0,:,:,1])

在这里插入图片描述
看下第二层的使用第二个卷积核(共64个卷积核),生成的图像

plt.imshow(pred[1][0,:,:,2])

在这里插入图片描述

总结

卷积层26*26,到Max Polling层变成了13 * 13
且Max Polling层物体的特征更加明显了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ3096Surprising Strings(map)

题意:输入很多字符串,以星号结束。判断每个字符串是不是“Surprising Strings”,判断方法是:以“ZGBG”为例,“0-pairs”是ZG,GB,BG,这三个子串不相同,所以是“0-unique”…

vs助手使用期过 编译CEGUI的问题:error C2061: 语法错误: 标识符“__RPC__out_xcount_part” VS2010...

第一个问题,下一个破解版的VX_A.dll,将其覆盖以前的dll即可, 但是目录有所要求,如下: XP系统:系统盘\Documents and Settings\用户名\Local Settings\Application win7或者vistaData\Microsoft\VisualStud…

五、项目实战---识别人和马

一、准备训练数据 下载数据集 validation验证集 train训练集 数据集结构如下: 将数据集解压到自己选择的目录下就行 最后的结构效果如下: 二、构建模型 ImageDataGenerator 真实数据中,往往图片尺寸大小不一,需要裁剪成一样…

leetcode 122. 买卖股票的最佳时机 II 思考分析

目录题目贪心法题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必…

css设置a连接禁用样式_使用CSS禁用链接

css设置a连接禁用样式Question: 题: Links are one of the most essential aspects of any web page or website. They play a very important role in making our website or web page quite responsive or interactive. So the topic for discussion is quite pe…

服务器出现 HTTP 错误代码,及解决方法

HTTP 400 - 请求无效 HTTP 401.1 - 未授权:登录失败 HTTP 401.2 - 未授权:服务器配置问题导致登录失败 HTTP 401.3 - ACL 禁止访问资源 HTTP 401.4 - 未授权:授权被筛选器拒绝 HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败 HTTP 40…

leetcode 55. 跳跃游戏 思考分析

题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1…

六、项目实战---识别猫和狗

一、准备数据集 kagglecatsanddogs网上一搜一大堆,这里我就不上传了,需要的话可以私信 导包 import os import zipfile import random import shutil import tensorflow as tf from tensorflow.keras.optimizers import RMSprop from tensorflow.kera…

修改shell终端提示信息

PS1:就是用户平时的提示符。PS2:第一行没输完,等待第二行输入的提示符。公共设置位置:/etc/profile echo $PS1可以看到当前提示符设置例如:显示绿色,并添加时间和shell版本export PS1"\[\e[32m\][\uyou are right…

java 字谜_计算字谜的出现次数

java 字谜Problem statement: 问题陈述: Given a string S and a word C, return the count of the occurrences of anagrams of the word in the text. Both string and word are in lowercase letter. 给定一个字符串S和一个单词C ,返回该单词在文本…

Origin绘制热重TG和微分热重DTG曲线

一、导入数据 二、传到Origin中 三、热重TG曲线 temp为横坐标、mass为纵坐标 绘制折线图 再稍微更改下格式 字体加粗,Times New Roman 曲线宽度设置为2 横纵坐标数值格式为Times New Roman 根据实际情况改下横纵坐标起始结束位置 四、微分热重DTG曲线 点击曲线…

【嵌入式系统复习】嵌入式网络与协议栈

目录开放式系统互连模型总线通信的报文组形式以及传递方式报文组形式报文传递方式网络分配与调度嵌入式TCP/IP蓝牙技术蓝牙的节能状态纠错方案蓝牙协议栈开放式系统互连模型 ISO/OSI七层模型展示了网络结构与各层的功能。 应用层: 提供了终端用户程序和网络之间的应…

代码兼容、技巧

代码兼容、技巧 前端开发中,一个头疼的事,就是代码的不兼容,这里贴出自己在前端开发中的一些解决经验。除了其浏览器本身的BUG外,不建议使用CSS hack来解决兼容性问题的。 IE和FF下对”li“的的高度解析不同 可以不定义高度&#…

Windows Phone 7 自定义事件

在Windows Phone的应用开发里面,对于事件这种东西我们可以随处可见,系统本来就已经封装好了各种各样的事件机制,如按钮的单击事件等等的。在实际的开发中,我们需要自己去给相关的类自定义一些事件来满足业务的要求,特别…

getcwd函数_PHP getcwd()函数与示例

getcwd函数PHP getcwd()函数 (PHP getcwd() function) The full form of getcwd is "Get Current Working Directory", the function getcwd() is used to get the name of the current working directory, it does not accept any parameter and returns the curren…

十四、数据库的导出和导入的两种方法

一、以SQL脚本格式导出(推荐) 导出 右击需要导出的数据库,任务—>生成脚本 下一步 选择要导出的数据库,下一步 内容根据需求修改,没啥需求直接下一步 勾选 表 勾选需要导出的数据库中的表 选择脚本保存的路…

Apache中 RewriteCond 规则参数介绍

RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。RewriteEngine onRewriteCond %{HTT…

【C++grammar】文件I/O流的基本用法

目录1、输入输出类介绍1.C/C文件操作对比2.什么是流?3.C I/O流类层次4.带缓冲的输入输出5.gcc编译器cin.in_avail()2、向文件写入数据1.写文件小练习2.如何将信息同时输出到文件和屏幕?3、从文件读数据1.检测文件是否成功打开2.检测是否已到文件末尾3.读…

作业2 分支循环结构

书本第39页 习题2 1.输入2个整数num1和num2.计算并输出它们的和&#xff0c;差&#xff0c;积&#xff0c;商&#xff0c;余数。 //输入2个整数num1和num2.计算并输出它们的和&#xff0c;差&#xff0c;积&#xff0c;商&#xff0c;余数。//#include<stdio.h> int main…

求一个序列中最大的子序列_最大的斐波那契子序列

求一个序列中最大的子序列Problem statement: 问题陈述&#xff1a; Given an array with positive number the task to find the largest subsequence from array that contain elements which are Fibonacci numbers. 给定一个具有正数的数组&#xff0c;任务是从包含菲波纳…