目录

一、获取并绘制图像

二、手写卷积

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. 简单的卷积神经网络,实现手写英文字母识别

    简单的卷积神经网络,实现手写英文字母识别 1 搭建Python运行环境(建议用Anaconda),自学Python程序设计 安装Tensorflow.再安装Pycharm等环境.(也可用Pytorch ...

  2. PyTorch基础与简单应用:构建卷积神经网络实现MNIST手写数字分类

    文章目录 (一) 问题描述 (二) 设计简要描述 (三) 程序清单 (四) 结果分析 (五) 调试报告 (六) 实验小结 (七) 参考资料 (一) 问题描述 构建卷积神经网络实现MNIST手写数字分类 ...

  3. 卷积神经网络mnist手写数字识别代码_搭建经典LeNet5 CNN卷积神经网络对Mnist手写数字数据识别实例与注释讲解,准确率达到97%...

    LeNet-5卷积神经网络是最经典的卷积网络之一,这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数,对LeNet-5做了改动,也是对一些tf函数的实例化笔记吧. 环境 Pyc ...

  4. PyTorch入门一:卷积神经网络实现MNIST手写数字识别

    先给出几个入门PyTorch的好的资料: PyTorch官方教程(中文版):http://pytorch123.com <动手学深度学习>PyTorch版:https://github.c ...

  5. Tensorflow之 CNN卷积神经网络的MNIST手写数字识别

    点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 作者,周乘,华中科技大学电子与信息工程系在读. 前言 tensorflow中文社区对官方文档进行了完整翻 ...

  6. Tensorflow卷积神经网络识别MINST手写数字

    开发环境: Ubuntu16.04+Tensorflow1.5.0-GPU+CUDN9.0+CUDNN7.0 如果是Debian系列的系统,请参考这篇博客进行安装. 所有完整代码的github地址为: ...

  7. (二)Tensorflow搭建卷积神经网络实现MNIST手写字体识别及预测

    1 搭建卷积神经网络 1.0 网络结构 图1.0 卷积网络结构 1.2 网络分析 序号 网络层 描述 1 卷积层 一张原始图像(28, 28, 1),batch=1,经过卷积处理,得到图像特征(28, ...

  8. 神经网络学习(三)比较详细 卷积神经网络原理、手写字体识别(卷积网络实现)

    之前写了一篇基于minist数据集(手写数字0-9)的全连接层神经网络,识别率(85%)并不高,这段时间学习了一些卷积神经网络的知识又实践了一把, 识别率(96%左右)确实上来了 ,下面把我的学习过程 ...

  9. 深蓝学院第三章:基于卷积神经网络(CNN)的手写数字识别实践

    参看之前篇章的用全连接神经网络去做手写识别:https://blog.csdn.net/m0_37957160/article/details/114105389?spm=1001.2014.3001 ...

  10. 【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)

    主要内容: 1.基于CNN的mnist手写数字识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64. ...

最新文章

  1. colab找不到模块 no name
  2. python乐观锁代码实现_Elasticsearch系列—并发控制及乐观锁实现原理
  3. 合并区间(LintCode)
  4. YOLO V4 Tiny改进版来啦!速度294FPS精度不减YOLO V4 Tiny
  5. python广告刷量_Python一日一练05----怒刷点击量
  6. jvm:运行时数据区
  7. SpringBoot WebSocket Stomp
  8. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)
  9. FatFs源码剖析(2)
  10. shell常用命令总结总结
  11. excel制作录入和查询系统_Excel进销存管理系统,完整函数应用,出入查询库存更新自动显示...
  12. 机器学习作业班_python神经网络搭建
  13. cannot+connect+mysql_mysqlnd cannot connect to MySQL 4.1+ using the old insecure
  14. Bat如何制作菜单选择
  15. python爬虫算法是什么_Python爬虫:什么是网络爬虫
  16. 没有免费用户却飞速发展,Uber技术栈全解析!
  17. 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
  18. 数据结构与算法学习笔记(五)树
  19. linux卸载cuda10.0,Ubuntu卸载cuda10.0
  20. 大数据应用分析解决方案----图书出版

热门文章

  1. 微信小程序----map组件实现(获取定位城市天气或者指定城市天气数据)
  2. python join split
  3. CakePHP中出现persistent is not writable等Warning的解决方法
  4. 无法在数据库 'ycmis2' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。...
  5. 目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用
  6. 用Macbook-苹果系统写代码出现显示问题Text input context does not respond to _valueForTIProperty:
  7. linux连接小米随身wifi密码忘记了,小米wifi管理员密码忘记了怎么办?
  8. 一致 先验分布 后验分布_浅谈Loki分布式架构中的一致性哈希
  9. 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解
  10. 13. 微型计算机中,传送cpu发出的读/写指令的总线是,我的微机原理题库