【python】卷积神经网络

这篇具有很好参考价值的文章主要介绍了【python】卷积神经网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、图片的识别过程:

1.特征提取-CNN自动提取(卷积层)
2.提取主要特征(池化层)
3.特征汇总
4.产生分类器进行预测识别(全连层)

1.传统神经网络处理图片-全连接的网络结构
网络中的神经与相邻层上的每个神经元均连接。层数越多需要计算的参数就越多。
2.卷积神经网络-局部感受视野
对局部进行感知,然后在更高层将局部的信息综合起来得到全局信息。
【python】卷积神经网络

3.卷积神经网络权值共享
每个神经元的w值都是一样的。
就是整张图片在使用同一个卷积核内的参数。

二、卷积神经网络解决了两个问题

1、BP神经网络的全连接模式导致参数过多,反向传播计算量太大,模型训练时间过长,解决方案是权值共享
2、全连模式下每个像素都要与神经相连,特征点较多不利于分类。卷积:局部感受视野,局部信息综合起来得到全局信息。

三、基本结构

卷积层:特征提取-CNN自动提取
池化层:提取主要特征
ReLU层
全连层:产生分类器进行预测识别

【python】卷积神经网络
输入图片-卷积池化激活(获取主要特征)-重复-特征汇总,相当于全连层。
特征数变少,深度(通道数)变多👇
【python】卷积神经网络

1.卷积层

提取图片每个小部分里具有的特征。
【python】卷积神经网络
图片像素与卷积核(权重)相乘再相加。
【python】卷积神经网络

2.池化层

提取重要的特征信息。
将输入图像进行缩小,减少像素信息,保留重要信息。
取最大值、平均值等。
【python】卷积神经网络

3.ReLU 激活层

加入非线性因素,将卷积层输出结果做非线性映射。
ReLU 函数:对于输入负值,输出全为0.正值原样输出。
【python】卷积神经网络

单层卷积神经网络

卷积、激活函数、池化组合在一起
【python】卷积神经网络

4.全连接层

全连接层在整个卷积神经网络中起到“分类器”的作用,即通过卷积、池化等深度网络后,再经过全连接层对结果进行识别分类。
【python】卷积神经网络

四、卷积神经网络流程

【python】卷积神经网络

五、卷积神经网络算法过程

四步,两个阶段
1、向前传播过程
(1)从样本中读取(x,y),将x输入网络。
(2)计算相应的实际输出OP。
在此阶段,信息从输入层经过逐层变换,传送到输出层,输出层与每层的权值矩阵点乘,得到输出结果。

2、向后传播阶段
(1)计算实际输出与理想输出的差值。
(2)按极小误差反向传播调整权值矩阵。

六、(代码)卷积神经网络—手写数字模型

1.引入头文件,加载数据
将数据读入数据集 独热编码
2.封装函数,方便网络搭建多处调用
(1)构建权重w,产生随机变量
(2)构建偏置b
(3)卷积层准备:卷积函数实现
(4)卷积层 激活函数x与0作比较
(5)池化层:小一倍数据 特征图
3.特征标签的占位符
4.开始网络搭建 CNN构建
1)卷积层 ,创建patch=5*5卷积核
构建w、b
([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
(2)第一层卷积层,调用函数
(3)激活relu
(4)池化
2)第二层卷积
和第一层差不多,注意几个点
构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
第一层卷积层(上一层池化的结果,这一层的w)
3)全连层
据拍平、提纯、分类
(1)第一层全连层:前馈神经网络 输入:第二次池化结果 7764 假设神经元1024个
(2)第二层全连层:分类器
上层输出1024是这层输入,总的分类数为这层输出
5.构建损失函数
6.优化器

六、(代码)卷积神经网络:手写数字模型
1.引入头文件,加载数据

import tensorflow as tf
# 加载数据
from tensorflow.examples.tutorials.mnist import input_data

将数据读入数据集 独热编码

# 将数据读入数据集 独热编码
input_data.read_data_sets('MNIST_data/',one_hot=True)
input_size=28*28
# 分类
num_class=10

2.封装函数,方便网络搭建多处调用
(1)构建权重w,产生随机变量

# 创建函数:构建权重w,产生随机变量
def weight_variable(shape):
    """
    构建权重w,产生随机变量
    :param shape:
    :return:
    """
    w=tf.random_normal(shape=shape,stddev=0.01)
    return tf.Variable(w)

(2)构建偏置b

def bias_variable(shape):
    """
    构建偏置b
    :param shape:
    :return:
    """
    b=tf.constant(0.01,shape=shape)
    return tf.Variable(b)

(3)卷积层准备:卷积函数实现

def con2d(x,w):
    """
    卷积层准备:卷积函数实现
    :param x: 图像矩阵信息
    :param w: 卷积核的值
    :return: conv2d
    """
    # strides:卷积步长[上、右、下、左]
    return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')

(4)卷积层 激活函数x与0作比较

def relu_con(x):
    """
    卷积层 激活x与0作比较
    :param x:
    :return:
    """
    return tf.nn.relu(x)

(5)池化层:小一倍数据 特征图

def max_pool_con2x2(x):
    """
    池化层:小一倍数据 特征图
    :param x: 图片的矩阵信息
    :return:
    value,
     ksize,
     strides,【上、右、下、左】右、下两个单位
     padding,
     data_format="NHWC",
     name=None,
     input=None
    """
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

3.特征标签的占位符

# 1.特征标签的占位符
# # 1.占位符---输入层 x:数据输入到图中进行计算  y:识别的数字,有几个类别输入几个数字
xs= tf.placeholder(tf.float32,shape=[None,input_size]) #64列不知道几行
ys = tf.placeholder(tf.float32,shape=[None,num_class])#10类不知道多少个

4.开始网络搭建 CNN构建
1)卷积层 ,创建patch=5*5卷积核
构建w、b
([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])

# 第一层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b
w_conv1=weight_variable([5,5,1,32])
b_conv1=bias_variable([32])

(2)第一层卷积层,调用函数

# 第一层卷积层
conv1 = con2d(x_image,w_conv1)

(3)激活relu

# 激活relu
h_conv1=relu_con(conv1+b_conv1)

(4)池化

# 池化
h_pool1=max_pool_con2x2(h_conv1)

2)第二层卷积
和第一层差不多,注意几个点
构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
第一层卷积层(上一层池化的结果,这一层的w)

# 第二层=====
# 第二层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
w_conv2=weight_variable([5,5,32,64])
b_conv2=bias_variable([64])
# 第一层卷积层(上一层池化的结果,这一层的w)
conv2 = con2d(h_pool1,w_conv2)
# 激活relu
h_conv2=relu_con(conv2+b_conv2)
# 池化
h_pool2=max_pool_con2x2(h_conv2)

3)全连层
据拍平、提纯、分类
(1)第一层全连层:前馈神经网络 输入:第二次池化结果 7764 假设神经元1024个

# 全连层 数据拍平、提纯、分类
# 不再做卷积了
# 全连接第一层:前馈神经网络 输入:第二次池化结果 7*7*64 假设神经元1024个
w_fc1=weight_variable([7*7*64,1024])
b_fc1=bias_variable([1024])
# 输出矩阵 几行不管 列:7*7*64
h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
# 前馈神经网络wx+b
h_fc1=tf.matmul(h_pool2_flat,w_fc1)+b_fc1
# 激活
h_flc1=relu_con(h_fc1)

(2)第二层全连层:分类器
上层输出1024是这层输入,总的分类数为这层输出

# 第二层全连层:分类
w_fc2=weight_variable([1024,num_class])
b_fc2=bias_variable([num_class])
# 计算并激活
# 前馈神经网络wx+b
h_fc2=tf.matmul(h_flc1,w_fc2)+b_fc2
# 激活---分类 返回每种情况的概率
predict=h_flc2=tf.nn.softmax(h_fc2)

# 构建损失函数
# 优化器

到这完整代码:文章来源地址https://www.toymoban.com/news/detail-420303.html

"""
卷积神经网络:手写数字模型
"""
import tensorflow as tf
# 加载数据
from tensorflow.examples.tutorials.mnist import input_data
# 将数据读入数据集 独热编码
input_data.read_data_sets('MNIST_data/',one_hot=True)

input_size=28*28
# 分类
num_class=10

# 创建函数:构建权重w,产生随机变量
def weight_variable(shape):
    """
    构建权重w,产生随机变量
    :param shape:
    :return:
    """
    w=tf.random_normal(shape=shape,stddev=0.01)
    return tf.Variable(w)


def bias_variable(shape):
    """
    构建偏置b
    :param shape:
    :return:
    """
    b=tf.constant(0.01,shape=shape)
    return tf.Variable(b)

def con2d(x,w):
    """
    卷积层准备:卷积函数实现
    :param x: 图像矩阵信息
    :param w: 卷积核的值
    :return: conv2d
    """
    # strides:卷积步长[上、右、下、左]
    return tf.nn.conv2d(x,w,strides=[1,1,1,1],padding='SAME')


def relu_con(x):
    """
    卷积层 激活x与0作比较
    :param x:
    :return:
    """
    return tf.nn.relu(x)

def max_pool_con2x2(x):
    """
    池化层:小一倍数据 特征图
    :param x: 图片的矩阵信息
    :return:
    value,
     ksize,
     strides,【上、右、下、左】右、下两个单位
     padding,
     data_format="NHWC",
     name=None,
     input=None
    """
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

# 网络搭建
# 1.特征标签的占位符
# # 1.占位符---输入层 x:数据输入到图中进行计算  y:识别的数字,有几个类别输入几个数字
xs= tf.placeholder(tf.float32,shape=[None,input_size]) #64列不知道几行
ys = tf.placeholder(tf.float32,shape=[None,num_class])#10类不知道多少个

# 将xs灰度处理:拍平变成一维[-1任意一张图片,28,28矩阵大小,1深度]
# 将该数据放到卷积层操作
x_image=tf.reshape(xs,[-1,28,28,1])
# CNN构建
# 第一层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b
w_conv1=weight_variable([5,5,1,32])
b_conv1=bias_variable([32])
# 第一层卷积层
conv1 = con2d(x_image,w_conv1)
# 激活relu
h_conv1=relu_con(conv1+b_conv1)
# 池化
h_pool1=max_pool_con2x2(h_conv1)

# 第二层=====

# 第二层:卷积层 创建patch=5*5卷积核
# ([卷积核大小5 5,输入数据的维度1(灰度处理),输出的高度32])
# 构建w\b 上一层的输出是这一层的输入,这一层的输出2的次方
w_conv2=weight_variable([5,5,32,64])# 14*14*32
b_conv2=bias_variable([64])
# 第一层卷积层(上一层池化的结果,这一层的w)
conv2 = con2d(h_pool1,w_conv2)
# 激活relu
h_conv2=relu_con(conv2+b_conv2)
# 池化
h_pool2=max_pool_con2x2(h_conv2)

# 全连层 数据拍平、提纯、分类
# 不再做卷积了
# 全连接第一层:前馈神经网络 输入:第二次池化结果 7*7*64 假设神经元1024个
w_fc1=weight_variable([7*7*64,1024])
b_fc1=bias_variable([1024])
# 输出矩阵 几行不管 列:7*7*64
h_pool2_flat=tf.reshape(h_pool2,[-1,7*7*64])
# 前馈神经网络wx+b
h_fc1=tf.matmul(h_pool2_flat,w_fc1)+b_fc1
# 激活
h_flc1=relu_con(h_fc1)

# 第二层全连层:分类
w_fc2=weight_variable([1024,num_class])
b_fc2=bias_variable([num_class])
# 计算并激活
# 前馈神经网络wx+b
h_fc2=tf.matmul(h_flc1,w_fc2)+b_fc2
# 激活---分类 返回每种情况的概率
predict=h_flc2=tf.nn.softmax(h_fc2)

# 构建损失函数
# 优化器

到了这里,关于【python】卷积神经网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中的卷积神经网络(CNN)入门

    卷积神经网络(Convolutional Neural Networks, CNN)是一类特别适用于处理图像数据的深度学习模型。在Python中,我们可以使用流行的深度学习库TensorFlow和Keras来创建和训练一个CNN模型。在本文中,我们将介绍如何使用Keras创建一个简单的CNN模型,并用它对手写数字进行分类。 1. 准备

    2024年01月21日
    浏览(43)
  • 手势识别系统Python,基于卷积神经网络算法

    手势识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。 视频+代码:https://www.yuque.com/ziwu/

    2024年02月09日
    浏览(64)
  • python:神经网络的卷积核,权重矩阵长什么样子?

    很多人在做深度学习的时候,都把神经网络看成了一个黑盒子,只管输入不同的训练样本和标签,就可以预测出来和训练样本标签相似的结果。想必不少人也研究过神经网络的计算过程,在研究中一定会学到梯度下降算法和损失函数,也一定会了解到卷积核和反向传播求导等

    2024年02月04日
    浏览(34)
  • 水果识别系统Python,基于TensorFlow卷积神经网络算法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示 面对水果识别系统Python,基于TensorFlow卷积神经网络算---深度学习算法: 提示:以下是本篇文章正文内容,下面案例可供参考 果蔬识别系统,使用Python作为主要开发语言,使用深度学习 TensorFLOw框架

    2024年01月16日
    浏览(75)
  • 鸟类识别Python,基于TensorFlow卷积神经网络【实战项目】

    鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。 数据集选自加州理工学院200种鸟类

    2024年02月10日
    浏览(48)
  • 果蔬识别系统Python+Django+TensorFlow+卷积神经网络算法

    果蔬识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。 视频+代码:https://www.yuque.com/ziwu/

    2024年02月08日
    浏览(83)
  • 【毕业设计】深度学习垃圾分类系统 - python 卷积神经网络

    🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定

    2023年04月08日
    浏览(45)
  • 文本分类系统Python,基于深度学习CNN卷积神经网络

    文本分类系统,使用Python作为主要开发语言,通过TensorFlow搭建CNN卷积神经网络对十余种不同种类的文本数据集进行训练,最后得到一个h5格式的本地模型文件,然后采用Django开发网页界面,实现用户在界面中输入一段文字,识别其所属的文本种类。 在我们的日常生活和工作中

    2024年02月08日
    浏览(50)
  • 卷积神经网络(CNN)入门:使用Python实现手写数字识别

    在上一篇文章中,我们介绍了如何使用Python实现一个简单的前馈神经网络。本文将重点介绍卷积神经网络(CNN),这是一种在计算机视觉任务中表现优异的深度学习模型。我们将从卷积神经网络的基本原理开始,介绍卷积层、池化层和全连接层等概念,然后使用Python和Keras库

    2023年04月15日
    浏览(51)
  • 验证码识别系统Python,基于CNN卷积神经网络算法

    验证码识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,基于Pyqt5搭建桌面端操作界面,实现用户上传一张图片识别其名称。

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包