解决Scala中的0.1+0.2

 Scala中的0.1+0.2是不等于0.3的

由于精度的问题,小数的计算会存在误差

 

可以使用BigDecimal()解决

以下是一个简单的 Scala 实现多层感知机(Multilayer Perceptron)的示例代码: ```scala import breeze.linalg.{DenseMatrix, DenseVector} import breeze.numerics._ import scala.util.Random class NeuralNetwork(inputSize: Int, hiddenSize: Int, outputSize: Int) { private val random = new Random() // 初始化权重 private var w1 = DenseMatrix.rand(hiddenSize, inputSize, random) private var w2 = DenseMatrix.rand(outputSize, hiddenSize, random) // 初始化偏置 private var b1 = DenseVector.rand(hiddenSize, random) private var b2 = DenseVector.rand(outputSize, random) // 定义 sigmoid 激活函数 private def sigmoid(x: DenseVector[Double]): DenseVector[Double] = { 1.0 / (exp(-x) + 1.0) } // 前向传播 def forward(input: DenseVector[Double]): DenseVector[Double] = { val hidden = sigmoid(w1 * input + b1) sigmoid(w2 * hidden + b2) } // 训练网络 def train(input: DenseVector[Double], target: DenseVector[Double], learningRate: Double): Unit = { // 前向传播 val hidden = sigmoid(w1 * input + b1) val output = sigmoid(w2 * hidden + b2) // 计算误差 val error = target - output // 反向传播 val outputDelta = error *:* output * (1.0 - output) val hiddenDelta = (w2.t * outputDelta) *:* hidden * (1.0 - hidden) // 更新权重和偏置 w2 += learningRate * outputDelta * hidden.t b2 += learningRate * outputDelta w1 += learningRate * hiddenDelta * input.t b1 += learningRate * hiddenDelta } } object NeuralNetwork { def main(args: Array[String]): Unit = { // 定义数据集 val input = DenseVector(0.1, 0.2, 0.3) val target = DenseVector(0.4, 0.5) // 定义网络结构和学习率 val inputSize = input.size val hiddenSize = 5 val outputSize = target.size val learningRate = 0.1 // 初始化网络 val net = new NeuralNetwork(inputSize, hiddenSize, outputSize) // 训练网络 for (i <- 1 to 1000) { net.train(input, target, learningRate) } // 测试网络 val output = net.forward(input) println(s"Input: $input") println(s"Target: $target") println(s"Output: $output") } } ``` 在这个示例,我们创建了一个 `NeuralNetwork` 类,该类接受输入大小、隐藏层大小和输出大小作为参数,并实现了前向传播、训练和sigmoid 激活函数。在 `main` 函数,我们定义了一个简单的数据集,初始化了一个 `NeuralNetwork` 实例并训练了它,然后测试了它的输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值