当前位置: 首页 > news >正文

【Flux.jl】 卷积神经网络

Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。

Conv 卷积算子

Conv: 卷积操作,用于特征提取。
ConvTranspose: 转置卷积操作,用于上采样。
DepthwiseConv: 深度可分卷积,每个输入通道单独卷积。
DepthwiseConvDims: 深度可分卷积的维度。
DenseConvDims: 密集卷积的维度。
ConvDims: 卷积的维度。

以 Conv 为例

Conv(filter, in => out, σ = identity;stride = 1, pad = 0, dilation = 1, groups = 1, [bias, init])
Conv(weight, [bias, activation; stride, pad, dilation])

标准卷积层。filter是一个整数元组,指定卷积核的大小;in和out分别指定输入和输出通道的数量。
图像数据应存储在WHCN顺序(宽度、高度、通道、批次)中。换句话说,一个100×100的RGB图像将是一个100×100×3×1的数组,而50个批次将是一个100×100×3×50的数组。这具有N=2的空间维度,需要一个像(5,5)这样的核尺寸,一个整数元组。
要在N个特征维度上执行卷积,此层期望输入一个数组,其中ndims(x) == N+2,其中size(x, N+1) == in是输入通道的数量,而size(x, ndims(x))(始终)是批次中观察值的数量。然后:
• filter应是一个包含N个整数的元组。
• 关键字stride和dilation每个都应是一个单个整数,或者是一个包含N个整数的元组。
• 关键字pad指定在数据数组边界上添加的元素数量。它可以是一个:

  • 整数,表示在所有边界上应用相同的填充,
  • 包含N个整数的元组,以在每个空间维度的开始/结束处应用相同的填充,
  • 包含2*N个整数的元组,用于非对称填充,
  • 单例SamePad(),用于计算填充,使得size(output,d) == size(x,d) / stride(可能四舍五入)对于每个空间维度。
    • 关键字groups预期是一个Int。它指定将卷积划分为多少组。
    用于控制层初始化的关键字:
    • init - 用于生成初始权重的函数。默认为glorot_uniform。
    • bias - 初始偏置向量默认为全零。可以通过将此设置为false来完全禁用可训练偏置,或者可以提供另一个向量,如bias = randn(Float32, out)。
    构造函数的第二种形式允许您传入预先构建的权重矩阵和偏置向量。这在您想要自己初始化权重时很有用。

Conv 官方API案例解读

这段代码是使用Julia编程语言和Flux机器学习库来创建和操作卷积神经网络(CNN)的层。下面是对每行代码的解释:

julia> xs = rand(Float32, 100, 100, 3, 50); # a batch of 50 RGB images

这行代码创建了一个名为xs的四维数组,它代表一个包含50张100x100像素的RGB图像的批次。每个像素由3个值表示(红、绿、蓝),因此数组的大小是100x100x3x50。

julia> layer
http://www.lryc.cn/news/500559.html

相关文章:

  • 大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”
  • 深入了解架构中常见的4种缓存模式及其实现
  • Hermes engine on React Native 0.72.5,function无法toString转成字符串
  • Spring Boot + MySQL 多线程查询与联表查询性能对比分析
  • Java 设计模式~工厂模式
  • OmicsTools生信环境全自动化安装配置教程,代做生信分析和辅导
  • 鸿蒙HarmonyOS应用开发 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
  • 二分模板题
  • 一篇文章掌握Git的基本原理与使用
  • 「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
  • 朗新科技集团如何用云消息队列 RocketMQ 版“快、准、狠”破解业务难题?
  • 【Ubuntu】Ubuntu的Desktop(学习/用户使用)和Bit版本(工作)
  • cmake CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_DIR的区别
  • 学会用VSCode debug
  • C语言专题之结构体的使用
  • python中的高阶函数
  • 学习笔记063——通过使用 aspose-words 将 Word 转 PDF 时,遇到的字体改变以及乱码问题
  • SpringBoot整合Mockito进行单元测试超全详细教程 JUnit断言 Mockito 单元测试
  • 【AI知识】过拟合、欠拟合和正则
  • MacOS编译webRTC源码小tip
  • Linux基础命令(三):文件压缩及解压缩命令
  • 目标跟踪算法:ByteTrack、卡尔曼滤波、匈牙利算法、高置信度检测目标、低置信度检测目标
  • [定昌linux系统]如何安装jdk8
  • 【Cadence32】PCB多层板电源、地平面层创建心得➕CM约束管理器Analyze分析显示设置➕“DP”报错DRC
  • 基于SpringBoot+Vue的新闻管理系统
  • 图的割点、割边(Tarjan算法)
  • 算法学习(十四)—— 二叉树的深度搜索(DFS)
  • 【vue2】封装自定义的日历组件(三)之基础添加月份的加减定位到最新月份的第一天
  • LabVIEW偏心圆筒流变仪测控系统
  • Runloop