下面介绍具体的神经网络在深度学习过程中,训练参数的详细产生。
案例1
假设现在有一个3X3的1维(输入通道为1)特征图输入(也即意味着该特征图相当于一张灰度图),然后由3个卷积核(过滤器、滤波器),每一个卷积核尺寸为2X2。输出3个通道特征图。神经网络训练的参数个数示意图为:
该层神经网络训练的参数个数即为:
(2*2+1)*3=15
总计15个参数, 这15个参数里面,其中12个为权重值(weights),3个偏差(biases)。
案例2
对于像普通常见的RGB彩色图片,具有3通道(R,G,B)。如果每一个输入特征图都有一个滤波器(卷积核)。产生的卷积按元素添加,并且向每个元素添加偏差项。 形成具有1个特征图的输出。
神经网络训练的参数个数计算:
4*3+1=13
总计13个参数,其中12个是权重,1个是偏差。
案例3
假设每1个输入特征图都分别有3个滤波器(以紫色,黄色,青色分别表示)。产生的卷积按元素添加,并且向每个元素添加偏差项。现在有2个特征图,最终输出3个特征图。
输入2个的特征图,最终输出3个特征图(意味着有3个偏差)。神经网络训练的参数个数为27,其中24个为权重,3个为偏差。
Python代码验证
建立神经网络,堆叠几层:
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from keras.models import Sequential
if name == “main”:
model = Sequential()
model.add(Conv2D(filters=32,
kernel_size=(3, 3),
input_shape=(150, 150, 3),
activation=‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=64,
kernel_size=(3, 3),
activation=‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=128,
kernel_size=(3, 3),
activation=‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=128,
kernel_size=(3, 3),
activation=‘relu’))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(units=512, activation=‘relu’))
model.add(Dense(units=1, activation=‘sigmoid’))
print(model.summary())
输出:
Model: “sequential_1”
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 148, 148, 32) 896
max_pooling2d_1 (MaxPooling2 (None, 74, 74, 32) 0
conv2d_2 (Conv2D) (None, 72, 72, 64) 18496
《设计思想解读开源框架》
第一章、 热修复设计
-
第一节、 AOT/JIT & dexopt 与 dex2oat
-
第二节、 热修复设计之 CLASS_ISPREVERIFIED 问题
-
第三节、热修复设计之热修复原理
-
第四节、Tinker 的集成与使用(自动补丁包生成)
第二章、 插件化框架设计
-
第一节、 Class 文件与 Dex 文件的结构解读
-
第二节、 Android 资源加载机制详解
-
第三节、 四大组件调用原理
-
第四节、 so 文件加载机制
-
第五节、 Android 系统服务实现原理
第三章、 组件化框架设计
-
第一节、阿里巴巴开源路由框——ARouter 原理分析
-
第二节、APT 编译时期自动生成代码&动态类加载
-
第三节、 Java SPI 机制
-
第四节、 AOP&IOC
-
第五节、 手写组件化架构
第四章、图片加载框架
-
第一节、图片加载框架选型
-
第二节、Glide 原理分析
-
第三节、手写图片加载框架实战
第五章、网络访问框架设计
-
第一节、网络通信必备基础
-
第二节、OkHttp 源码解读
-
第三节、Retrofit 源码解析
第六章、 RXJava 响应式编程框架设计
-
第一节、链式调用
-
第二节、 扩展的观察者模式
-
第三节、事件变换设计
-
第四节、Scheduler 线程控制
第七章、 IOC 架构设计
-
第一节、 依赖注入与控制反转
-
第二节、ButterKnife 原理上篇、中篇、下篇
-
第三节、Dagger 架构设计核心解密
第八章、 Android 架构组件 Jetpack
-
第一节、 LiveData 原理
-
第二节、 Navigation 如何解决 tabLayout 问题
-
第三节、 ViewModel 如何感知 View 生命周期及内核原理
-
第四节、 Room 架构方式方法
-
第五节、 dataBinding 为什么能够支持 MVVM
-
第六节、 WorkManager 内核揭秘
-
第七节、 Lifecycles 生命周期
本文包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
能够支持 MVVM** -
第六节、 WorkManager 内核揭秘
-
第七节、 Lifecycles 生命周期
[外链图片转存中…(img-9bniSbvl-1715116447053)]
本文包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
[外链图片转存中…(img-w5UsqrNV-1715116447054)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!