Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package next
- import org.apache.commons.math3.linear.Array2DRowRealMatrix
- import org.apache.commons.math3.linear.RealMatrix
- import java.util.*
- class Network(private val size: Int) {
- private var stableCount = 10000
- var neurons: Array<Neuron> = Array(size, { _ -> Neuron(size) })
- private val random = Random()
- fun learn(examples: Array<DoubleArray>) {
- var example: RealMatrix
- var result: RealMatrix = Array2DRowRealMatrix(size, size)
- for (e in examples) {
- example = Array2DRowRealMatrix(e)
- result = result.add(example.multiply(example.transpose()))
- }
- println("Learning done")
- for ( (i,row) in result.data.withIndex()) {
- neurons[i].weights = row
- }
- }
- fun recognizeImage(image: DoubleArray): Array<Boolean> {
- var correctCounter = 0
- for (i in 0 until size) {
- neurons[i].spin = image[i]
- }
- while (correctCounter < stableCount) {
- val randomNeuron = random.nextInt(size - 1)
- val spins = neurons.map({ i -> i.spin })
- correctCounter++
- if (neurons[randomNeuron].updateSpin(spins)) {
- correctCounter = 0
- }
- }
- return neurons.map { i -> i.spin == 1.0 }.toTypedArray()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement