swift - 如何快速为神经网络中的神经元编写 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
}
解决方案
sigmoid 函数很简单
func sigmoid(z: Double) -> Double {
return 1.0 / (1.0 + exp(-z))
}
这将返回 0 或 1,除了短过渡部分,您可以将其设置为任意小。
我强烈建议你学习线性代数。这将为您节省一个痛苦的世界。 https://developer.apple.com/documentation/accelerate/working_with_matrices
推荐阅读
- c - 如何在 Rust 中获取 C 指针的所有权并适当地删除它?
- rabbitmq - 在 ubuntu 服务器 18.04 上将 rabbitmq 绑定到 localhost
- python-3.x - 在 conda 中使用 python3 创建的虚拟环境获取 python 2.7
- c - USB HID 空功能报告
- intellij-idea - 在“项目”窗格中预先输入文件名中的“查找下一个”
- sql - 如何让多个 CASE 结果出现在 SQL Server 的同一行中
- arrays - React-Autocomplete 输入项的条件显示
- python - 如何在命令提示符下设置 python 函数的参数
- primefaces - 为什么时间轴内的工具提示在范围更改(Primefaces)后停止工作?
- php - URL 在 htaccess 重写 URL 中重复