网站首页 > 技术文章 正文
引言
在本文中,我们将尝试使用 Keras 框架实现基本的 CNN 模型。卷积神经网络的好处在于它通过保留最大信息来减少或最小化图像的维度和参数,从而使训练过程变得更快并占用更少的计算能力。让我们开始吧!
我们必须导入与 Keras 关联的某些库来实现 CNN 模型。
#basic libraries
import matplotlib.pyplot as plt
from numpy import asarray
import numpy as np
import pandas as pd
import cv2 as cv
#importing Keras libraries
import keras
from keras.models import Sequential
from keras.layers import Dense, Conv2D , MaxPool2D , Activation
#colab don't support cv2.imshow method, so importing cv2_imshow
from google.colab.patches import cv2_imshow
#for image pre-processing
from skimage import io
我们在卷积神经网络模型中看到卷积层,有时人们会问你在模型中使用了多少层。现在,我们将看到用于制作一层 CNN 模型的组件。
步骤1: 从数据集获取输入图像。这取决于图像是 RGB 格式还是灰度格式。RGB 格式的尺寸是(n*n*3) ,灰度尺寸是(n*n) 。
步骤2: 在步骤一之后,下一步是使用维度为(m*m)的过滤器或内核。我们可以使用过滤器的数量来确定来自输入图像的不同信息。
步骤3: 这一步是通过对输入图像使用过滤器来获得维度 ( a*a ) 的 2D 图像。如果我们使用“Y”数量的过滤器,那么我们的输出具有“Y”数量的 2D 图像,即 ( a*a*Y )。
用于制作一层CNN模型的基本术语是过滤器、步幅、填充和图像的通道数。
· 过滤器:这些用于与图像相乘以获得 2D 图像。
· 步幅:它是一个过滤器或内核的移动距离,单位是像素。
· 填充:它是输入图像周围“零”值像素的额外维度,以保留最大信息。
· 通道:如果输入图像是 RGB,则它是“3”通道图像,如果输入图像是灰 度图像,则它是“1”通道图像。
#Getting an input from the website with mentioned URL below
urls = ["https://placekitten.com/800/571"]
#reading the image
image = io.imread(url)
#converting image from BGR to RGB
image_2 = cv.cvtColor(image, cv.COLOR_BGR2RGB)
#converting RGB to grayscale image
gray_image = cv.cvtColor(image_2, cv.COLOR_RGB2GRAY)
#display the image
cv2_imshow(gray_image)
查看输入图像的尺寸
gray_image.shape
#output: (571, 800)
众所周知,模型的输入图像是正方形的,以使过滤器正常工作。所以,我们需要调整输入图像的大小。
width = 512
height = 512
dim = (width, height)
# resize image
img = cv2.resize(gray_image, dim, interpolation = cv2.INTER_AREA)
img.shape
#output: (512, 512)
当我们将图像提供给 keras 时,它需要处于完美的维度,以便 keras 中的进程能够完美地工作。
img_batch = img.reshape(1, img.shape[0], img.shape[1], 1)
img_batch.shape
#output: (1, 512, 512, 1)
第一个参数是作为批处理的图像的数量,最后一个参数是1,这意味着它是一个灰度图像。
现在,我们将创建没有激活函数和池化层的卷积神经网络模型。权重将由模型本身随机选择。
model1 = Sequential()
model1.add(Conv2D(1, (15,15), padding= 'valid', input_shape =
img_batch.shape[1:]))
model1.summary()
在这里,我们使用的默认步长值是“1”,填充值是“ valid”,这意味着我们没有提供任何填充。第一个 Conv2D 层的第一个参数是“1”,这是我们使用的过滤器的数量,第二个参数是过滤器的大小,这里的过滤器的维数是(15*15)。
CNN 模型的第一层的总结如上所示。使用过滤器后的输出形状为(498*498*1) ,可训练参数为226。
使用或不使用过滤器、填充和步幅后获得输出形状的公式如下所示:
output shape= (input shape+2* padding — filter size)/stride + 1
output shape = (512 + 2*0 - 15)/1 +1 = 498
#the params we get
params = number of filters*(filter size) + number of filters*1
params = 1*(15*15) +1*1 = 226
所以,这 226 个是将在反向传播过程中训练的参数。现在,我们将在我们的模型上使用预测方法。
conv_img = model1.predict(img_batch)
在使用我们的模型1之后,我们会看到输出图像。
conv_img_show = conv_img.reshape(conv_img.shape[1],
conv_img.shape[2])
plt.imshow(conv_img_show, cmap = 'gray')
plt.show()
正如我们在上面的输出图像中看到的,尺寸是(498*498)。
现在,我们将看到使用激活函数即 relu 和最大池层后的输出图像。
model2 = Sequential()
model2.add(Conv2D(1, (15,15), padding= 'valid', input_shape = img_batch.shape[1:]))
model2.add(Activation('relu'))
model2.add(MaxPool2D(pool_size=(2,2)))
model2.summary()
conv_img = model2.predict(img_batch)
conv_img_show = conv_img.reshape(conv_img.shape[1], conv_img.shape[2])
plt.imshow(conv_img_show, cmap = 'gray')
plt.show()
如上所示,这正是一层卷积神经网络模型。由于最大池化操作,输出图像尺寸变小。
总结
在本文中,我们通过keras对卷积神经网络有了一个较为深入的了解,希望可以对你的学习带来帮助~
猜你喜欢
- 2024-10-22 彻底搞懂CNN中的卷积和反卷积 cnn卷积计算公式
- 2024-10-22 Python MTCNN(人脸检测)项目附代码讲解(2)-NMS/IOU工具介绍
- 2024-10-22 谷歌大脑用强化学习为移动设备量身定做最好最快的CNN模型
- 2024-10-22 STFGNN:用于交通流预测的时空融合图神经网络
- 2024-10-22 CNN中一些特殊环节的反向传播(面试要点)
- 2024-10-22 为何Keras中的CNN是有问题的,如何修复它们?
- 2024-10-22 用Keras实现一个标准的CNN! keras实现gan
- 2024-10-22 卷积神经网络CNN完全指南终极版(二)
- 2024-10-22 二项式定理问题(1):通项公式 二项式定理问题
- 2024-10-22 CNN 可视化算法 Grad-CAM pointrcnn可视化
你 发表评论:
欢迎- 最近发表
-
- 吴谨言专访大反转!痛批耍大牌后竟翻红,六公主七连发力显真诚
- 港股2月28日物业股涨幅榜:CHINAOVSPPT涨1.72%位居首位
- 港股2月28日物业股午盘:CHINAOVSPPT涨1.72%位居首位
- 港股3月2日物业股涨幅榜:CHINAOVSPPT涨1.03%位居首位
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%
- 天赋与心痛的背后:邓鸣贺成长悲剧引发的深刻反思
- 冯小刚女儿徐朵追星范丞丞 同框合照曝光惹人羡,回应网友尽显亲民
- “资本大佬”王冉:51岁娶小17岁童瑶,并承诺余生为娇妻保驾护航
- 港股3月2日物业股午盘:CHINAOVSPPT涨1.03%位居首位
- 「IT之家开箱」vivo S15 图赏:双镜云窗,盛夏风光
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)