자격과 가격으로 자동차 분류를 만들고 싶습니다. MLP로해야하지만 XOR 예제 외에 다른 예제는 없습니다. 나는 6 가지 조건을 가지고 있으며 그 중 하나를 vhigh와 같이 [1,0,0,0]처럼 두배로 늘리고있다. (조건은 내가 링크 된 집합이다.)MLP로 자동차를 평가하는 방법은 무엇입니까?
여기에 내 MLP 코드가 있고 싶다. uci 데이터 세트 Dataset으로 교육하십시오.이 코드에 어떻게 적용 할 수 있습니까?
편집 : XOR 문제 외에 다른 예가 없다는 것을 말하지 않고 있습니다. 내 말은 입력 집합에 대한 예제가 필요하다는 것을 의미합니다. [1,0]처럼 2 개 이상의 입력이 필요하지 않습니다.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class MultiLayerPerceptron implements Cloneable
{
protected double fLearningRate = 0.6;
protected Layer[] fLayers;
protected TransferFunction fTransferFunction;
public MultiLayerPerceptron(int[] layers, double learningRate, TransferFunction fun)
{
fLearningRate = learningRate;
fTransferFunction = fun;
fLayers = new Layer[layers.length];
for(int i = 0; i < layers.length; i++)
{
if(i != 0)
{
fLayers[i] = new Layer(layers[i], layers[i - 1]);
}
else
{
fLayers[i] = new Layer(layers[i], 0);
}
}
}
public double[] execute(double[] input)
{
int i;
int j;
int k;
double new_value;
double output[] = new double[fLayers[fLayers.length - 1].Length];
// Put input
for(i = 0; i < fLayers[0].Length; i++)
{
fLayers[0].Neurons[i].Value = input[i];
}
// Execute - hiddens + output
for(k = 1; k < fLayers.length; k++)
{
for(i = 0; i < fLayers[k].Length; i++)
{
new_value = 0.0;
for(j = 0; j < fLayers[k - 1].Length; j++)
new_value += fLayers[k].Neurons[i].Weights[j] * fLayers[k - 1].Neurons[j].Value;
new_value += fLayers[k].Neurons[i].Bias;
fLayers[k].Neurons[i].Value = fTransferFunction.evalute(new_value);
}
}
// Get output
for(i = 0; i < fLayers[fLayers.length - 1].Length; i++)
{
output[i] = fLayers[fLayers.length - 1].Neurons[i].Value;
}
return output;
}
public double backPropagateMultiThread(double[] input, double[] output, int nthread)
{
return 0.0;
}
public double backPropagate(double[] input, double[] output)
{
double new_output[] = execute(input);
double error;
int i;
int j;
int k;
/* doutput = correct output (output) */
for(i = 0; i < fLayers[fLayers.length - 1].Length; i++)
{
error = output[i] - new_output[i];
fLayers[fLayers.length - 1].Neurons[i].Delta = error * fTransferFunction.evaluteDerivate(new_output[i]);
}
for(k = fLayers.length - 2; k >= 0; k--)
{
//delta
for(i = 0; i < fLayers[k].Length; i++)
{
error = 0.0;
for(j = 0; j < fLayers[k + 1].Length; j++)
error += fLayers[k + 1].Neurons[j].Delta * fLayers[k + 1].Neurons[j].Weights[i];
fLayers[k].Neurons[i].Delta = error * fTransferFunction.evaluteDerivate(fLayers[k].Neurons[i].Value);
}
// success
for(i = 0; i < fLayers[k + 1].Length; i++)
{
for(j = 0; j < fLayers[k].Length; j++)
fLayers[k + 1].Neurons[i].Weights[j] += fLearningRate * fLayers[k + 1].Neurons[i].Delta *
fLayers[k].Neurons[j].Value;
fLayers[k + 1].Neurons[i].Bias += fLearningRate * fLayers[k + 1].Neurons[i].Delta;
}
}
// error
error = 0.0;
for(i = 0; i < output.length; i++)
{
error += Math.abs(new_output[i] - output[i]);
//System.out.println(output[i]+" "+new_output[i]);
}
error = error/output.length;
return error;
}
public boolean save(String path)
{
try
{
FileOutputStream fout = new FileOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(this);
oos.close();
}
catch (Exception e)
{
return false;
}
return true;
}
public static MultiLayerPerceptron load(String path)
{
try
{
MultiLayerPerceptron net;
FileInputStream fin = new FileInputStream(path);
ObjectInputStream oos = new ObjectInputStream(fin);
net = (MultiLayerPerceptron) oos.readObject();
oos.close();
return net;
}
catch (Exception e)
{
return null;
}
}
public double getLearningRate()
{
return fLearningRate;
}
public void setLearningRate(double rate)
{
fLearningRate = rate;
}
public void setTransferFunction(TransferFunction fun)
{
fTransferFunction = fun;
}
public int getInputLayerSize()
{
return fLayers[0].Length;
}
public int getOutputLayerSize()
{
return fLayers[fLayers.length - 1].Length;
}
}
수백 경우가있다 인터넷에서 신경망을 사용하는 수천 가지 사례가 아닙니다. 그들이 모두 xor에 관한 것이라고 주장하는 것은 큰 오해입니다. – lejlot
제발 그들에게 제발 링크를 줄 수 있습니까? 이 예제를 찾으려고 할 때 XOR [1,0]과 같은 두 가지 입력 유형 만 찾습니다. 다른 예를 알면 나에게 도움이 될 수 있다고 말해 줄 수 있습니다. 당신의 답을 thx – medemir