首页 > 解决方案 > 如何快速为神经网络中的神经元编写 sigmoid 函数?

问题描述

我直接在 Xcode 操场上制作自己的神经网络,我拥有其中的大部分,但为了计算每个神经元的值,最后我需要使用 sigmoid 使其值介于 -1 和 1 之间。我是不确定数学本身,所以我不知道如何以编程方式执行此操作。这是我目前拥有的代码。主要看神经元功能,我在那里有一条评论,指出我应该在哪里拥有它。对任何高级的人来说都非常重要(:代码:

import Cocoa

var inputs: [Double] = [0, 0, 0, 0]//*

//2 neuron hidden layer

var outputs: [Double] = [0, 0]//*
//Inputs and outputs of the neural network
//*not for training

func neuron1_1 (_ Weights: [Double] = [0, 0, 0, 0], _ bias: Double) -> Double {

var myProduct: Double = 0
myProduct = myProduct + inputs[0] * Weights[0]
myProduct = myProduct + inputs[1] * Weights[1]
myProduct = myProduct + inputs[2] * Weights[2]
myProduct = myProduct + inputs[3] * Weights[3]
//multiply all weights with inputs
myProduct = myProduct + bias
//add the output
//Sigmoid function here
return myProduct

}

func neuron1_2 (_ Weights: [Double] = [0, 0, 0, 0], _ bias: Double) -> Double {

var myProduct: Double = 0
myProduct = myProduct + inputs[0] * Weights[0]
myProduct = myProduct + inputs[1] * Weights[1]
myProduct = myProduct + inputs[2] * Weights[2]
myProduct = myProduct + inputs[3] * Weights[3]
//multiply all weights with inputs
myProduct = myProduct + bias
//add the output
//Sigmoid function here
return myProduct

}

func neuron2_1 (_ Weights: [Double] = [0, 0, 0, 0], _ bias: Double) -> Double {

var myProduct: Double = 0

myProduct = myProduct + neuron1_1([0, 0, 0, 0], 0) * Weights[0]
myProduct = myProduct + neuron1_2([0, 0, 0, 0], 0) * Weights[0]
myProduct = myProduct + bias

return myProduct

}

func neuron2_2 (_ Weights: [Double] = [0, 0, 0, 0], _ bias: Double) -> Double {

var myProduct: Double = 0

myProduct = myProduct + neuron1_1([0, 0, 0, 0], 0) * Weights[0]
myProduct = myProduct + neuron1_2([0, 0, 0, 0], 0) * Weights[0]
myProduct = myProduct + bias

return myProduct

}


func cost () -> Double {

var cost: Double = 0
//                                              ˘ use for training. Represents the desired 
output
cost = cost + pow((neuron2_1([0, 0, 0, 0], 0) - 0 ), 2)
cost = cost + pow((neuron2_2([0, 0, 0, 0], 0) - 0 ), 2)

return cost

}

标签: swift

解决方案


sigmoid 函数很简单

func sigmoid(z: Double) -> Double {
    return 1.0 / (1.0 + exp(-z))
}

这将返回 0 或 1,除了短过渡部分,您可以将其设置为任意小。

我强烈建议你学习线性代数。这将为您节省一个痛苦的世界。 https://developer.apple.com/documentation/accelerate/working_with_matrices


推荐阅读