CNN不要关心模板/filter的参数怎么来,attention不要关心权重怎么来的。神经网络不要关心参数怎么来的。

一些个人想法。

在刚开始学习CNN的时候,很好奇filter的参数是怎么来的。看视频过程中也有人问。实际上我们并不需要关心filter中的参数,只要能做梯度下降,那么我们的目标就是使得loss下降。而filter中的参数自然会变得更有利于loss下降。至于filter卷积后是在提取什么特征,这完全需要我们自己下定义。最近复习attention机制,讲attention的例子时会给人一种权重是事先定好的。比如:一个seq2seq的模型把“机器学习”翻译到“machine learning”。例子会解释说,当生成机器时,应该更关注machine这个单词,按道理说确实是这样。实际上这个权重是训练出来的,如果模型训练得好,权重也应该是更偏向于machine。那是因为这样确实可以使得loss下降。深度学习中,你发现了什么方法,或者什么机制,只要能做梯度下降,尽管实验,如果这种方法能使得效果更好,那么你可以过后来解读它。但是一般而言,我猜想研究者也不会随便就搞出个方法,比如卷积,attention这些应该也是基于一些事实做出来的。卷积在早期图像处理就可以做特征提取,比如边缘提取,锐化。而attention据说也是根据人的大脑来的。比如看书时短时间内也是注意书的局部段落,不会注意整本书。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 C 语言来实现 CNN(卷积神经网络)是可行的,但是需要对 C 语言的知识和 CNN 的原理有扎实的了解。 首先需要实现卷积层,其中包括卷积运算和激活函数。卷积运算可以使用二维数组来存储图像和卷积核,并使用循环进行卷积计算。激活函数可以使用常用的激活函数,如 ReLU(修正线性单元)、sigmoid 和 tanh。 接下来需要实现池化层,通常使用最大池化或平均池化来实现。 最后实现全连接层,对卷积层的输出进行权值乘法和加和运算,然后使用激活函数进行非线性转换。 实现完所有的层后,需要进行训练,使用反向传播算法和随机梯度下降法来更新网络中的权值。 最后需要对训练得到的模型进行评估,确定其在新数据上的表现。 代码实现部分可能比较复杂,但是理解 CNN 的原理和使用 C 语言编程的基本技能都是需要的。 ### 回答2: 使用C语言来编写卷积神经网络(CNN)是可行的。C语言是一种高级编程语言,被广泛用于系统级编程以及需要高性能的应用程序开发。虽然C语言相对于其他语言来说较底层,但仍然可以使用它来实现神经网络。以下是一些步骤和任务,可以用C语言实现CNN网络: 1. 数据预处理:首先,需要将训练数据和测试数据加载到内存中,并进行必要的预处理操作,如图像缩放、归一化等。C语言提供了文件I/O和图像处理库,可以方便地操作图像数据。 2. 网络模型定义:使用C语言定义CNN的网络结构,包括卷积层、池化层、全连接层等组件。可以使用结构体或数组来表示神经网络的层和参数。 3. 前向传播:实现CNN的前向传播过程,即将输入数据通过网络进行一次计算,得到输出结果。这需要编写卷积、激活函数和池化等计算过程,以及参数的传递和更新操作。 4. 反向传播:实现CNN的反向传播过程,即通过计算误差梯度来更新网络的权重和偏置。反向传播需要编写梯度计算、误差反向传递和参数更新等代码。 5. 模型训练:利用训练数据,对CNN模型进行训练。这涉及到以适当的学习率更新模型参数,直到达到一定的训练准确度或经过预定的训练轮次。 6. 模型评估:使用测试数据评估训练好的CNN模型的性能。这包括计算准确率、损失函数等指标,以判断网络的性能和泛化能力。 总结来说,使用C语言来编写CNN神经网络需要对C语言的语法和数据处理有一定的了解,同时需要熟悉CNN的原理和算法。虽然C语言相对较底层,但可以通过编写合适的代码和使用一些C语言扩展库来实现卷积神经网络的各个步骤。 ### 回答3: 使用C语言编写卷积神经网络CNN)需要以下几个关键步骤。 1. 引入必要的库:首先,在C代码中引入必要的库文件,如stdio.h、stdlib.h等。 2. 定义网络结构:下一步是定义CNN的网络结构,包括卷积层(Convolutional Layer)、池化层(Pooling Layer)、全连接层(Fully Connected Layer)等。可以使用C的结构体来定义这些层,并设置相应的参数,如卷积核大小、步长、池化窗口大小等。 3. 数据预处理:CNN通常需要对输入数据进行预处理,如归一化、平衡化等。在C代码中,可以定义相应的函数来实现这些数据预处理步骤。 4. 前向传播:CNN的前向传播过程是整个网络的核心。在C代码中,可以编写函数来实现卷积、池化和激活函数等操作。这些函数通常需要使用嵌套的循环来对输入数据和卷积核进行计算,以得出输出特征图。 5. 反向传播:在CNN中,反向传播用于计算网络中各层的梯度,以进行参数更新。在C代码中,可以编写函数来计算梯度,并使用梯度下降法或其他优化算法来更新网络参数。 6. 训练与测试:在C代码中,可以编写训练和测试函数来实现CNN的训练和测试过程。这些函数通常会在训练数据集上进行迭代训练,然后在测试数据集上进行评估。 7. 性能优化:为了提高CNN的性能,可以在C代码中应用各种性能优化技术,如并行计算、数据流等。这些技术可以在网络的计算过程中提高计算效率,从而加速训练和推理。 总体来说,使用C语言编写CNN神经网络需要掌握C语言的基本语法和数据结构,并且具备对CNN网络结构和算法的深入理解。另外,编写高效的C代码需要一定的编程技巧和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值