如何快速为神经网络中的神经元编写S型函数?

时间:2020-03-05 00:54:55

标签: swift

我直接在Xcode游乐场中建立自己的神经网络,我拥有了大部分神经网络,但是为了计算每个神经元的值,最后我需要使用S形来使它的值介于-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

}

1 个答案:

答案 0 :(得分:0)

S形函数很简单

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

这将返回0或1,但短过渡段除外,您可以将其任意减小。

我强烈建议您学习线性代数。这将为您节省很多痛苦。 https://developer.apple.com/documentation/accelerate/working_with_matrices