深度学习神经网络 卷积神经网络 第一节,构建前向传播函数(一)

本文主要是介绍深度学习神经网络 卷积神经网络 第一节,构建前向传播函数(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为敲卷积神经网络的代码确实浪费了不少时间,这里我详细地把代码进行解释。

只导入一个模块:

import tensorflow as tf

提前先把变量定义好:这个卷积层是先输入28*28维的图像,图像的通道数是1。第一个卷积核的大小是5,卷积核数量是32.第二个卷积核的大小是5,数量是64。第三层是全连接层的。

# 设定神经网络的超参数
# 定义神经网络可以接收的图片的尺寸和通道数
IMAGE_SIZE = 28
NUM_CHANNELS = 1
# 定义第一层卷积核的大小和个数
CONV1_SIZE = 5
CONV1_KERNEL_NUM = 32
# 定义第二层卷积核的大小和个数
CONV2_SIZE = 5
CONV2_KERNEL_NUM = 64
# 定义第三层全连接层的神经元个数
FC_SIZE = 512
# 定义第四层全连接层的神经元个数
OUTPUT_NODE = 10

我画个图表示一下:

现在开始定义网络各个层的参数。首先是网络权重函数。

该函数不但可以用来生成卷积层的参数,还可以用来生成全网络层的参数。(反正只需要注意运算方式不同即可)

# 定义初始化网络权重函数
def get_weight(shape, regularizer):'''args:shape:生成张量的维度regularizer: 正则化项的权重'''# tf.truncated_normal 生成去掉过大偏离点的正态分布随机数的张量,stddev 是指定标准差w = tf.Variable(tf.truncated_normal(shape, stddev=0.1))# 为权重加入 L2 正则化,通过限制权重的大小,使模型不会随意拟合训练数据中的随机噪音if regularizer != None: tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w))return w

然后是生成偏置的函数。注意其实卷积层也可以给每个卷积的最后运算结果上加个偏置。

# 定义初始化偏置项函数
def get_bias(shape):'''args:shape:生成张量的维度'''b = tf.Variable(tf.zeros(shape))  # 统一将 bias 初始化为 0return b

然后我们定义卷积函数:

该函数返回一个卷积的计算图,输入数据和卷积核,然后进行计算

# 定义卷积计算函数
def conv2d(x, w):'''args:x: 一个输入 batch [batch , 5分辨率 , 5分辨率 , 3通道数]w: 卷积层的权重 [3 3 3通道数 16核个数]'''# strides 表示卷积核在不同维度上的移动步长为 1,第一维和第四维一定是 1,这是因为卷积层的步长只对矩阵的长和宽有效;# padding='SAME'表示使用全 0 填充,而'VALID'表示不填充return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')

然后我们定义池化操作函数:池化过滤器边长为2,移动步长为2,边界填充0.

# 定义最大池化操作函数
def max_pool_2x2(x):'''args:x: 一个输入 batch'''# ksize 表示池化过滤器的边长为 2,strides 表示过滤器移动步长是 2,'SAME'提供使用全 0 填充return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

有了这四个函数,下一节里,我们就可以现在定义前向传播的函数了。

这篇关于深度学习神经网络 卷积神经网络 第一节,构建前向传播函数(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883659

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程