我想了解更多关于神经网络的信息,我正在开发一个用C++编写的NN程序,但是我被反向传播算法卡住了,抱歉我没有提供一些工作代码。
我知道有很多库可以在许多语言中创建NN,但我更喜欢自己制作。问题在于,我不知道为了实现特定目标(如模式识别或函数逼近等)需要多少层和多少神经元。
我的问题是:如果我想要识别一些特定的模式,比如图像检测,需要多少层和每层多少个神经元?假设我所有的图像都是8x8像素,我会从一个64个神经元的输入层开始,但我不知道隐藏层和输出层需要放多少神经元。假设我要区分猫和狗,或者你认为的任何东西,输出层该怎么办?我可以想象一个只有一个神经元的输出层,输出0到1之间的值,具有经典的逻辑函数(
对于我来说,这个话题不是很清晰。我在互联网上读了很多资料,发现许多库都未被实现且难以理解,并且有很多对神经网络能做什么的解释,但没有说明如何实现它。
我从https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/和http://neuralnetworksanddeeplearning.com/chap1.html中读取了很多内容,在这里我理解了如何近似一个函数(因为每个层中的每个神经元都可以被认为是一个带有特定权重和偏置的阶跃函数),以及反向传播算法的工作原理,但其他教程则更关注预先存在的库。我还阅读了这个问题Determining the proper amount of Neurons for a Neural Network,但我想涉及NN的激活函数,哪种最好,以及哪种最适合。 谢谢您提前的答案!
我知道有很多库可以在许多语言中创建NN,但我更喜欢自己制作。问题在于,我不知道为了实现特定目标(如模式识别或函数逼近等)需要多少层和多少神经元。
我的问题是:如果我想要识别一些特定的模式,比如图像检测,需要多少层和每层多少个神经元?假设我所有的图像都是8x8像素,我会从一个64个神经元的输入层开始,但我不知道隐藏层和输出层需要放多少神经元。假设我要区分猫和狗,或者你认为的任何东西,输出层该怎么办?我可以想象一个只有一个神经元的输出层,输出0到1之间的值,具有经典的逻辑函数(
1/(1+exp(-x)
),当它接近0时,输入是一只猫,当它接近1时,输入是一只狗,但是......这是正确的吗?如果我添加一个新的模式,比如鱼怎么办?如果输入包含一只狗和一只猫(...和一条鱼)怎么办?这让我想到,输出层中的逻辑函数并不非常适合这样的模式识别,只是因为1/(1+exp(-x))在(0, 1)范围内。我必须更改激活功能或者在输出层添加其他神经元吗?是否有其他更准确的激活函数来完成这项工作?每个层的每个神经元的激活功能是否相同,还是不同?对于我来说,这个话题不是很清晰。我在互联网上读了很多资料,发现许多库都未被实现且难以理解,并且有很多对神经网络能做什么的解释,但没有说明如何实现它。
我从https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/和http://neuralnetworksanddeeplearning.com/chap1.html中读取了很多内容,在这里我理解了如何近似一个函数(因为每个层中的每个神经元都可以被认为是一个带有特定权重和偏置的阶跃函数),以及反向传播算法的工作原理,但其他教程则更关注预先存在的库。我还阅读了这个问题Determining the proper amount of Neurons for a Neural Network,但我想涉及NN的激活函数,哪种最好,以及哪种最适合。 谢谢您提前的答案!