gpt4 book ai didi

java - 单层感知器训练?

转载 作者:行者123 更新时间:2023-11-30 09:03:05 24 4
gpt4 key购买 nike

<分区>

我一直在尝试训练以下网络并获得合适的权重,但它一直在运行。谁能告诉我代码中可能有什么问题?这里 {8, 1} 是输入,{-1}} 是使用符号函数的预期输出。

import java.util.Arrays;

public class ANN {

public static void main(String args[]) {

double threshold = 1.2;
double learningRate = 0.08;

// Init weights

double[] weights = { -1.4, 1.8 };

int[][][] trainingData = {
{{8, 1}, {-1}},
{{3, 2}, {-1}},
{{6, 3}, {-1}},
{{1, 4}, {-1}},
{{9, 5}, {1}},
{{5, 6}, {1}},
{{2, 7}, {1}},
{{4, 8}, {1}},
{{7, 9}, {1}},
};

// Start training loop
while (true) {
int errorCount = 0;
// Loop over training data
for (int i = 0; i < trainingData.length; i++) {
System.out.println("Starting weights: " + Arrays.toString(weights));
// Calculate weighted input
double weightedSum = 0;
for (int ii = 0; ii < trainingData[i][0].length; ii++) {
weightedSum += trainingData[i][0][ii] * weights[ii];
}

// Calculate output
int output = 0;
if (threshold <= weightedSum) {
output = 1;
}

System.out.println("Target output: " + trainingData[i][1][0]
+ ", " + "Actual Output: " + output);

// Calculate error
int error = trainingData[i][1][0] - output;
System.out.println("Error: " + error);
// Increase error count for incorrect output
if (error != 0) {
errorCount++;
}

// Update weights
for (int ii = 0; ii < trainingData[i][0].length; ii++) {
weights[ii] += learningRate * error
* trainingData[i][0][ii];
}

System.out.println("New weights: " + Arrays.toString(weights));
System.out.println();
}

// If there are no errors, stop
if (errorCount == 0) {
System.out
.println("Final weights: " + Arrays.toString(weights));
System.exit(0);
}
}
}

}

编辑:我认为问题出在计算输出的代码片段中。应该翻转它,以便如果总和大于阈值输出为 1,否则为 0。

    // Calculate output
int output = 0;
if (weightedSum > threshold) {
output = 1;
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com