神经网络自定义(了解原理)

本文通过一个简单的神经网络实例,展示了如何将复合函数拆分为基本组件,利用forward和backward过程进行计算。代码中涉及了sin、div、e和mul等基本运算层,最终得出结果并进行反向传播求导。这个例子直观地解释了神经网络的前向传播和反向传播原理,加深了对神经网络的理解。
摘要由CSDN通过智能技术生成

数据挖掘课讲到了神经网络,让自己写一个简单的例子,笔者觉得非常好,特别有助于加强对神经网络的认识,所以来做一个小小的分享,让我们一起共同进步吧。

1.问题描述:

2.代码展示

dxdy.py

'''
coding:utf-8
@author: Li Sentan
@time:2021.10.24
@file:dxdy.py
'''

from layer_naive import *

x = eval(input("Please input the value of x:"))
y = eval(input("Please input the value of y:"))
x = x*math.pi

threex = MulLayer()
sin = sinLayer()
netwoy = MulLayer()
e = eLayer()
twoadd = AddLayer()
div = divLayer()

# forward
threex1 = threex.forward(3,x)
sin1 = sin.forward(threex1)
netwoy1 = netwoy.forward(-2,y)
e1 =e.forward((netwoy1))
twoadd1 = twoadd.forward(sin1,e1)
div1 = div.forward(twoadd1,8)
result = min(5,div1)

# backward
dresult = 1
dtwoadd,dy= div.backward(dout = dresult)
dsin,de = twoadd.backward(dtwoadd)
dnetwoy = e.backward(de)
dx2,dy = netwoy.backward(dnetwoy)
dthreex = sin.backward(dsin)
dy2,dx  = threex.backward(dthreex)


print("result:", result)
print("dx:", int(round(dx,0)))
print("dy:", int(round(dy,0)))

 layer_naive.py

'''
coding:utf-8
@author: Li Sentan
@time:2021.10.24
@file:layer_naive.py
'''
import math

class sinLayer:
    def __init__(self):
        pass

    def forward(self,x):
        self.x = x
        out = math.sin(x)
        return out

    def backward(self, dout):
        dx = dout * math.cos(self.x)
        return dx


class divLayer:
    def __init__(self):
        pass

    def forward(self, x, y):
        self.x = x
        self.y = y
        out = y/x
        return out

    def backward(self, dout):
        dx = dout * (-self.y)/(self.x**2)
        dy = dout * (1/self.x)
        return dx, dy


class eLayer:
    def __init__(self):
        pass

    def forward(self, x):
        self.x = x
        out = math.exp(x)
        return out

    def backward(self, dout):
        dx = dout * math.exp(self.x)
        return dx


class MulLayer:
    def __init__(self):
        self.x = None
        self.y = None

    def forward(self, x, y):
        self.x = x
        self.y = y                
        out = x * y
        return out

    def backward(self, dout):
        dx = dout * self.y
        dy = dout * self.x
        return dx, dy


class AddLayer:
    def __init__(self):
        pass

    def forward(self, x, y):
        out = x + y
        return out

    def backward(self, dout):
        dx = dout * 1
        dy = dout * 1
        return dx, dy

3.结果展示:

结果跟计算一致。

从中我们可以感受到,通俗点概述,我们就是将一个复合函数分成一个个简单函数,forward就是向一个个简单函数按顺序代入值, backward就是反顺序对一个个简单函数进行求导,然后进行乘积,跟我们平时的对复合函数的求导思想一致。哈哈哈,放个好玩的图,深度学习 so easy!

### 回答1: Halcon是一种图像处理软件,它提供了许多功能强大的算法和工具,可以用于图像处理和分析。其中,Halcon还支持自定义神经网络的开发,以便用户可以根据自己的需要创建和训练神经网络模型。 在Halcon中,用户可以通过使用内置的神经网络函数来创建自己的网络模型。这些函数包括:神经网络模型的定义、初始化、训练和预测等。用户可以选择基本的前馈神经网络或者循环神经网络,也可以根据需要对这些模型进行修改和定制。 如果用户需要更复杂的网络模型,可以使用外部的神经网络库,例如Caffe或TensorFlow等。在Halcon中,用户可以通过调用外部库的API来构建自己的神经网络模型,并且可以与Halcon的其他功能进行集成,实现一体化的处理。 总之,在Halcon中,用户可以根据自己的需要和技能水平来创建自己的神经网络模型,并且可以结合Halcon的其他功能进行图像处理和分析的工作。这些网络模型可以用于许多应用领域,例如计算机视觉、医学图像分析、自动化等。 ### 回答2: Halcon是一款广泛使用的机器视觉软件工具,它提供了许多功能和工具,包括可以自定义神经网络功能。 Halcon自定义神经网络所使用的是多层前馈神经网络,并且可以根据需求来进行网络的构建和训练,以达到更好的识别结果。 首先,需要进行训练数据的准备。收集大量的样本数据并对其进行标注,是训练和构建神经网络的前提条件。其次,需要选择适当的网络拓扑结构和激活函数,并通过训练集的数据来对神经网络进行训练,以获得最佳的网络参数。 Halcon提供了诸如特征提取、正则化、深度学习等功能,这些功能可以用于优化神经网络的训练效果。此外,还可以使用Halcon提供的评价函数来评估神经网络的性能和准确率。 总之,Halcon自定义神经网络是一项复杂的任务,需要对机器视觉和神经网络的基本原理有深入的了解和掌握。但是,一旦成功构建和训练了一个高性能的神经网络模型,它将可帮助用户更准确地解决各种视觉识别和检测问题。 ### 回答3: Halcon是一款用于机器视觉应用的软件平台,它具有高度的灵活性和可扩展性,支持用户自定义神经网络。用户使用Halcon自定义神经网络的过程如下: 首先,用户需要设计自己的模型结构,如神经网络的层数、每层的节点数、激活函数等。Halcon提供了一系列基本的神经网络模型,如多层感知器模型、卷积神经网络模型等,用户可以基于这些模型进行修改和扩展。此外,Halcon还支持自定义的C++算法进行模型设计。 接着,用户需要对模型进行训练。Halcon提供了多种训练算法,如梯度下降算法、反向传播算法等,用户可以根据自己的需要选择不同的算法进行训练。训练的目的是为了让神经网络能够对输入数据进行有意义的处理,产生预期的输出结果。 最后,用户需要使用训练好的神经网络进行应用。Halcon集成了各种图像处理工具和应用,用户可以直接使用Halcon提供的API进行调用,也可以基于Halcon进行二次开发,实现自己的图像处理应用。 总之,Halcon提供了完整的神经网络设计、训练和应用开发的解决方案,为用户提供了更高效、更灵活的机器视觉应用开发体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值