TensorFlow(8)卷积神经网络实战(2)手写卷积池化
目录
一、获取并绘制图像
二、手写卷积
1、设置卷积核及权重
2、卷积
2-1、卷积实现
2-2、 限值
2-3、图像赋值
2-4、显示
卷积代码
三、手写池化
1、创建图像
2、遍历池化
3、显示图像
池化代码
总代码
一、获取并绘制图像
import cv2
import numpy as np# 从scipy库中获取名为"上升"的图像。这是一张漂亮的内置图片,有很多角度和线条
from scipy import misc
image = misc.ascent() #获取图像
width,height = image.shape #获取图像宽高# 绘制图像(灰度图)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.gray()
plt.show()
二、手写卷积
1、设置卷积核及权重
如果过滤器中的所有数字加起来不是0或1,那么就应该设置权重,让过滤器的总和为0或1。
例如,如果过滤器是1,1,1,1,2,1,1,1,1。
它们加起来是10,所以可以设置0.1的权重,使它标准化。
# 设置卷积核及权重
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1
2、卷积
# 卷积
# 对图像每行每列分别卷积(除去最外层)
for x in range(1, width-1):for y in range(1, height-1):
2-1、卷积实现
# 实现卷积# convolution += 图像列元素*卷积核行元素convolution = 0.0for i in range(3):for j in range(3):convolution += image[x-1+j, y-1+i]*filter[i][j]convolution *= weight
2-2、 限值
# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0
2-3、图像赋值
注:不能直接对原图赋值:被赋值后,原图会发生改变,后面还要用原图做卷积。
# 图像赋值copy[x][y] = convolution
如果直接对原图赋值,得到的就是这种图像:
2-4、显示
# 显示灰度图
plt.imshow(copy)
plt.show()
卷积代码
# 手写实现图像卷积
# 设置卷积核及权重
copy = image.copy()
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1
# 如果过滤器中的所有数字加起来不是0或1,那么就应该设置权重,让过滤器的总和为0或1。
# 例如,如果过滤器是1,1,1,1,2,1,1,1,1。
# 它们加起来是10,所以可以设置0.1的权重,使它标准化。# 卷积
for x in range(1, width-1):for y in range(1, height-1):# 实现卷积(图像对应位置 分别乘 卷积核对应位置)convolution = 0.0for i in range(3):for j in range(3):# 列和行分别对应相乘convolution += image[x-1+j, y-1+i]*filter[i][j]convolution *= weight# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0# 图像赋值copy[x][y] = convolution# 显示灰度图
plt.gray()
plt.grid(False)
plt.imshow(copy)
#plt.axis('off')
plt.show()
三、手写池化
在减小图像数据量的同时,保留图像的特征。
1、创建图像
# 创建图像(大小为原图的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))
2、遍历池化
在:本像素、右像素、下像素、右下像素等四个像素中,选取一个最大值,作为缩小后的新图像当前位置值。
# 遍历池化(步长为2)
for x in range(0, width, 2):for y in range(0, height, 2):# 选取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)
3、显示图像
# 显示图像
plt.gray()
plt.imshow(new_image2)
plt.show()
可以发现图像大小减半的同时,特征也得以保留。
池化代码
# 池化(最大值)
import numpy as np# 创建图像(大小为原图的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))# 遍历池化(步长为2)
for x in range(0, width, 2):for y in range(0, height, 2):# 选取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)# 显示图像
plt.gray()
plt.imshow(new_image2)
plt.show()
总代码
import cv2
from scipy import misc
image = misc.ascent()import matplotlib.pyplot as plt
plt.grid(False)
plt.gray()
plt.imshow(image)
plt.show()# 图像尺寸
width, height = image.shape# 手写实现图像卷积
# 设置卷积核及权重
new_image = image.copy()
filter = [ [-1, -2, -1], [0, 0, 0], [1, 2, 1]]
weight = 1
# 如果过滤器中的所有数字加起来不是0或1,那么就应该设置权重,让过滤器的总和为0或1。
# 例如,如果过滤器是1,1,1,1,2,1,1,1,1。
# 它们加起来是10,所以可以设置0.1的权重,使它标准化。# 卷积
for x in range(1, width-1):for y in range(1, height-1):# 实现卷积(图像对应位置 分别乘 卷积核对应位置)convolution = 0.0for i in range(3):for j in range(3):# 列和行分别对应相乘convolution += image[x-1+j][y-1+i]*filter[i][j]convolution *= weight# 限值if convolution > 255:convolution = 255elif convolution <0:convolution = 0# 图像赋值new_image[x][y] = convolution# 显示灰度图
plt.gray()
plt.grid(False)
plt.imshow(new_image)
plt.show() # 池化(最大值)
import numpy as np# 创建图像(大小为原图的1/4)
new_image2 = np.zeros((int(width/2), int(height/2)))# 遍历池化(步长为2)
for x in range(0, width, 2):for y in range(0, height, 2):# 选取最大像素pixels = []pixels.append(new_image[x][y])pixels.append(new_image[x+1][y])pixels.append(new_image[x][y+1])pixels.append(new_image[x+1][y+1])new_image2[int(x/2)][int(y/2)] = max(pixels)# 显示图像
plt.gray()
plt.imshow(new_image2)
plt.show()
TensorFlow(8)卷积神经网络实战(2)手写卷积池化相关推荐
- 简单的卷积神经网络,实现手写英文字母识别
简单的卷积神经网络,实现手写英文字母识别 1 搭建Python运行环境(建议用Anaconda),自学Python程序设计 安装Tensorflow.再安装Pycharm等环境.(也可用Pytorch ...
- PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类
文章目录 (一) 问题描述 (二) 设计简要描述 (三) 程序清单 (四) 结果分析 (五) 调试报告 (六) 实验小结 (七) 参考资料 (一) 问题描述 构建卷积神经网络实现MNIST手写数字分类 ...
- 卷积神经网络mnist手写数字识别代码_搭建经典LeNet5 CNN卷积神经网络对Mnist手写数字数据识别实例与注释讲解,准确率达到97%...
LeNet-5卷积神经网络是最经典的卷积网络之一,这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数,对LeNet-5做了改动,也是对一些tf函数的实例化笔记吧. 环境 Pyc ...
- PyTorch入门一:卷积神经网络实现MNIST手写数字识别
先给出几个入门PyTorch的好的资料: PyTorch官方教程(中文版):http://pytorch123.com <动手学深度学习>PyTorch版:https://github.c ...
- Tensorflow之 CNN卷积神经网络的MNIST手写数字识别
点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 作者,周乘,华中科技大学电子与信息工程系在读. 前言 tensorflow中文社区对官方文档进行了完整翻 ...
- Tensorflow卷积神经网络识别MINST手写数字
开发环境: Ubuntu16.04+Tensorflow1.5.0-GPU+CUDN9.0+CUDNN7.0 如果是Debian系列的系统,请参考这篇博客进行安装. 所有完整代码的github地址为: ...
- (二)Tensorflow搭建卷积神经网络实现MNIST手写字体识别及预测
1 搭建卷积神经网络 1.0 网络结构 图1.0 卷积网络结构 1.2 网络分析 序号 网络层 描述 1 卷积层 一张原始图像(28, 28, 1),batch=1,经过卷积处理,得到图像特征(28, ...
- 神经网络学习(三)比较详细 卷积神经网络原理、手写字体识别(卷积网络实现)
之前写了一篇基于minist数据集(手写数字0-9)的全连接层神经网络,识别率(85%)并不高,这段时间学习了一些卷积神经网络的知识又实践了一把, 识别率(96%左右)确实上来了 ,下面把我的学习过程 ...
- 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践
参看之前篇章的用全连接神经网络去做手写识别:https://blog.csdn.net/m0_37957160/article/details/114105389?spm=1001.2014.3001 ...
- 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
主要内容: 1.基于CNN的mnist手写数字识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...
最新文章
- colab找不到模块 no name
- python乐观锁代码实现_Elasticsearch系列—并发控制及乐观锁实现原理
- 合并区间(LintCode)
- YOLO V4 Tiny改进版来啦!速度294FPS精度不减YOLO V4 Tiny
- python广告刷量_Python一日一练05----怒刷点击量
- jvm:运行时数据区
- SpringBoot WebSocket Stomp
- 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)
- FatFs源码剖析(2)
- shell常用命令总结总结
- excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
- 机器学习作业班_python神经网络搭建
- cannot+connect+mysql_mysqlnd cannot connect to MySQL 4.1+ using the old insecure
- Bat如何制作菜单选择
- python爬虫算法是什么_Python爬虫:什么是网络爬虫
- 没有免费用户却飞速发展,Uber技术栈全解析!
- 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
- 数据结构与算法学习笔记(五)树
- linux卸载cuda10.0,Ubuntu卸载cuda10.0
- 大数据应用分析解决方案----图书出版
热门文章
- 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)
- python join split
- CakePHP中出现persistent is not writable等Warning的解决方法
- 无法在数据库 'ycmis2' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。...
- 目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用
- 用Macbook-苹果系统写代码出现显示问题Text input context does not respond to _valueForTIProperty:
- linux连接小米随身wifi密码忘记了,小米wifi管理员密码忘记了怎么办?
- 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希
- 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解
- 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库