请用scala写一个神经网络算法
时间: 2024-05-08 21:20:25 浏览: 251
神经网络算法
好的,下面是一个简单的使用Scala实现的神经网络算法:
```scala
import scala.math._
object NeuralNetwork {
// 定义激活函数
def sigmoid(x: Double): Double = 1.0 / (1.0 + exp(-x))
class NeuralNetwork(val inputSize: Int, val hiddenSize: Int, val outputSize: Int) {
// 初始化权重
var w1: Array[Array[Double]] = Array.fill(inputSize, hiddenSize)(math.random)
var w2: Array[Array[Double]] = Array.fill(hiddenSize, outputSize)(math.random)
// 定义前向传播函数
def forward(x: Array[Double]): Array[Double] = {
val h = sigmoid(x.zip(w1).map { case (a, b) => a * b.sum }.sum)
x.zip(w1).map { case (a, b) => a * b.map(sigmoid).sum }.zip(w2.head).map { case (a, b) => a * sigmoid(b) }
}
// 定义反向传播函数
def backward(x: Array[Double], y: Array[Double], learningRate: Double): Unit = {
val a1 = x.zip(w1).map { case (a, b) => a * b.sum }
val h = sigmoid(a1.sum)
val a2 = w2.head.zipWithIndex.map { case (a, i) => a * sigmoid(a1(i)) }
val o = sigmoid(a2.sum)
val error = y.head - o
// 更新权重
val delta2 = error * o * (1.0 - o)
w2 = w2.zipWithIndex.map {
case (w2row, j) => w2row.zipWithIndex.map {
case (w2, i) => w2 + learningRate * delta2 * sigmoid(a1(i))
}
}
val delta1 = a2.zip(w2.head).map { case (a, w) => a * w }.sum * h * (1.0 - h)
w1 = w1.zipWithIndex.map {
case (w1row, j) => w1row.zipWithIndex.map {
case (w1, i) => w1 + learningRate * delta1 * x(i)
}
}
}
}
}
```
这个神经网络包含一个输入层,一个隐藏层和一个输出层。它使用sigmoid作为激活函数,并且使用随机权重进行初始化。forward函数计算输入对应的输出,backward函数使用误差来更新权重。
阅读全文