|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
ognuno mette in mostra il proprio cavallo ma nessuno ci sale sopra...
|
|
|
|
|
|
#22 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
|
Quote:
http://java.sun.com/j2se/1.5.0/docs/index.html buon divertimento per la conversione del programma.
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
|
|
|
|
|
#23 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
hahaahh
|
|
|
|
|
|
#24 | |
|
Messaggi: n/a
|
Quote:
|
|
|
|
|
#25 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
|
Quote:
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
|
|
|
|
|
#26 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
C'è qualcuno con un compilatore C++ sottomano che può controllare se il file cpp incollato da Syphilis compila?
Ho provato a fare una traslitterazione al volo ma ci sono alcuni pezzi che mi risultano non inizializzati. Sono quasi certo di aver tradotto tutto passo-passo ma, data la mia totale cecità in materia di reti neurali, potrei benissimo aver scritto il testo della vergine cuccia. |
|
|
|
|
|
#27 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
il testo della vergine cuccia. ahahhaha
dovrebbe esser alquanto giusto...io non lo capisco bene, ma dai commenti che ha messo quel ragazzo indiano che l'ha fatto sembra esserci tutto...non so...grazie mille pgi
|
|
|
|
|
|
#28 | |
|
Messaggi: n/a
|
Quote:
|
|
|
|
|
#29 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
1. Premesso che di quanto ho scritto non ho capito ma non dico una virgola, meno;
2. Appurato che "me pare d'avello fatto uguale"; 3. Dimostrato che tanto più s'allena Network quanto più ci azzecca e premettendo che, non sapendo quello che ho scritto, potrebbe essere un mero caso; 4. Da ultimo evidenziato che quanto segue non è codice Java ma una mera traslitterazione da C++ a Java con quei due aggiustamenti unicamente introdotti perchè a un certo punto m'ero perso; Tutto ciò premesso, ecco la versione java che negherò sulla tomba dei miei avi di aver mai scritto. Codice:
//File Main.java
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
PrintStream out = System.out;
int inp = 2, hid = 2, outp = 1;
int[] layers = { inp, hid, outp };
out.println("Enter number of training iterations: ");
int iter = in.nextInt();
Network net = new Network(0.1, layers, 3);
double[] input = {1, 0};
double[] outputs;
net.randomizeWeightAndBiases();
double[][] trainingInputs = {
{0, 0},
{1, 0},
{0, 1},
{1, 1},
};
double[][] trainingOutputs = {
{0},
{1},
{1},
{0}
};
out.println("Starting train...");
for(int i = 0; i < iter; i++) {
for(int j = 0; j < 4; j++) {
net.train(trainingInputs[j], trainingOutputs[j]);
}
}
out.println("End of training.");
out.println("Start test...");
for(int j = 0; j < 4; j++) {
out.println("Case number: " + (j+1));
net.setInputs(trainingInputs[j]);
outputs = net.getOutput();
for(int i = 0; i < inp; i++) {
out.println("Input: " + (i+1) + " : " + trainingInputs[j][i]);
}
for(int i = 0; i < outp; i++) {
out.println("Output: " + (i+1) + " : " + outputs[i]);
}
}
}
}
class Dendrite {
private double weight;
private int pointsTo;
public Dendrite() {
weight = 0;
pointsTo = 0;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void setPointsTo(int pointsTo) {
this.pointsTo = pointsTo;
}
public double getWeight() {
return weight;
}
public int getPointsTo() {
return pointsTo;
}
}
class Neuron {
private int id;
private double value;
private double bias;
private double delta;
private Dendrite[] dendrites;
public Neuron(int dendritesCount) {
dendrites = new Dendrite[dendritesCount];
for(int i = 0; i < dendrites.length; i++) {
dendrites[i] = new Dendrite();
dendrites[i].setPointsTo(i);
}
}
public void setDendrites(int dendritesCount) {
dendrites = new Dendrite[dendritesCount];
for(int i = 0; i < dendrites.length; i++) {
dendrites[i] = new Dendrite();
dendrites[i].setPointsTo(i);
}
}
public Dendrite getDendrite(int index) {
return dendrites[index];
}
public double getDelta() {
return delta;
}
public void setDelta(double delta) {
this.delta = delta;
}
public int getId() {
return id;
}
public void setValue(double value) {
this.value = value;
}
public double getValue() {
return value;
}
public void setBias(double bias) {
this.bias = bias;
}
public double getBias() {
return bias;
}
}
class Layer {
private Neuron[] neurons;
public Layer(int size) {
neurons = new Neuron[size];
for(int i = 0; i < size; i++) {
neurons[i] = new Neuron(1);
}
}
public Neuron getNeuron(int index) {
return neurons[index];
}
public void setNeuron(Neuron neuron, int index) {
neurons[index] = neuron;
}
}
class Network {
private Random random = new Random();
private double learningRate;
private Layer[] layers;
private int totLayers;
private int[] neuronInLayer;
private double[] netInputs;
private double[] netOutputs;
public Network(double learningRate, int[] layers, int totLayers) {
if(totLayers < 2) throw new IllegalArgumentException("layer's count cannot be less than 2");
this.learningRate = learningRate;
neuronInLayer = new int[totLayers];
this.layers = new Layer[totLayers];
for(int i = 0; i < totLayers; i++) {
neuronInLayer[i] = layers[i];
this.layers[i] = new Layer(layers[i]);
}
netInputs = new double[layers[0]];
netOutputs = new double[layers[totLayers - 1]];
this.totLayers = totLayers;
}
public void setInputs(double[] inputs) {
for(int i = 0; i < neuronInLayer[0]; i++) {
layers[0].getNeuron(i).setValue(inputs[i]);
}
}
public void randomizeWeightAndBiases() {
for(int i = 0; i < totLayers; i++) {
for(int j = 0; j < neuronInLayer[i]; j++) {
if(i != (totLayers - 1)) {
layers[i].getNeuron(j).setDendrites(neuronInLayer[i + 1]);
for(int k = 0; k < neuronInLayer[i + 1]; k++) {
layers[i].getNeuron(j).getDendrite(k).setWeight(getRand());
}
}
if(i != 0) {
layers[i].getNeuron(j).setBias(getRand());
}
}
}
}
public double[] getOutput() {
double[] outputs = new double[neuronInLayer[totLayers - 1]];
for(int i = 1; i < totLayers; i++) {
for(int j = 0; j < neuronInLayer[i]; j++) {
layers[i].getNeuron(j).setValue(0);
for(int k = 0; k < neuronInLayer[i - 1]; k++) {
layers[i].getNeuron(j).setValue(layers[i].getNeuron(j).getValue() + layers[i - 1].getNeuron(k).getValue() * layers[i - 1].getNeuron(k).getDendrite(j).getWeight());
}
layers[i].getNeuron(j).setValue(layers[i].getNeuron(j).getValue() + layers[i].getNeuron(j).getBias());
layers[i].getNeuron(j).setValue(limiter(layers[i].getNeuron(j).getValue()));
}
}
for(int i = 0; i < neuronInLayer[totLayers - 1]; i++) {
outputs[i] = layers[totLayers - 1].getNeuron(i).getValue();
}
return outputs;
}
public void update() {
getOutput();
}
public double limiter(double value) {
return (1.0 / (1 + Math.exp(-value)));
}
public double getRand() {
return 2 * random.nextDouble() - 1;
}
public double sigmaWeightDelta(int layerNumber, int neuronNumber) {
double result = 0;
for(int i = 0; i < neuronInLayer[layerNumber + 1]; i++) {
result = result + layers[layerNumber].getNeuron(neuronNumber).getDendrite(i).getWeight() * layers[layerNumber + 1].getNeuron(i).getDelta();
}
return result;
}
public void train(double[] inputs, double[] outputs) {
double target, actual, delta;
setInputs(inputs);
update();
for(int i = totLayers - 1; i > 0; i--) {
for(int j = 0; j < neuronInLayer[i]; j++) {
if(i == totLayers - 1) {
target = outputs[j];
actual = layers[i].getNeuron(j).getValue();
delta = (target - actual) * actual * (1 - actual);
layers[i].getNeuron(j).setDelta(delta);
for(int k = 0; k < neuronInLayer[i - 1]; k++) {
double dendriteWeight = layers[i - 1].getNeuron(k).getDendrite(j).getWeight();
dendriteWeight += delta * learningRate * layers[i - 1].getNeuron(k).getValue();
layers[i - 1].getNeuron(k).getDendrite(j).setWeight(dendriteWeight);
}
layers[i].getNeuron(j).setBias(layers[i].getNeuron(j).getBias() + delta * learningRate * 1);
} else {
actual = layers[i].getNeuron(j).getValue();
delta = actual * (1 - actual) * sigmaWeightDelta(i, j);
for(int k = 0; k < neuronInLayer[i - 1]; k++) {
double dendriteWeight = layers[i - 1].getNeuron(k).getDendrite(j).getWeight();
dendriteWeight += delta * learningRate * layers[i - 1].getNeuron(k).getValue();
layers[i - 1].getNeuron(k).getDendrite(j).setWeight(dendriteWeight);
}
if(i != 0) {
layers[i].getNeuron(j).setBias(layers[i].getNeuron(j).getBias() + delta * learningRate * 1);
}
}
}
}
}
}
E' un blocco unico per cui se copi il codice, lo incolli in un file "Main.java" e dai un javac Main.java, il compilatore sfrugullia tutto senza chiedere altro. |
|
|
|
|
|
#30 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
porca puzzola che lavorone grazie mille!!!
mi da un errore qui: Scanner in = new Scanner(System.in); Proprio all'inizio del codice settima righa...mi dice cannot find symbol ora provo a smanettar un pò...speriam di capire! t'adoro |
|
|
|
|
|
#31 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Ho usato la versione 5 di java. Se non trova Scanner forse usi la 1.4.
|
|
|
|
|
|
#32 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
sei aggiornato eh!
|
|
|
|
|
|
#33 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
direi che è ora di scaricarmi la 5
|
|
|
|
|
|
#34 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
ma qual'è che devo scaricar?? ho istallata ed ho provato a metterla in netbeans ma nulla...persiste...
|
|
|
|
|
|
#35 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Da qui:
http://java.sun.com/javase/downloads/index.jsp JDK 5.0 Update 9 se l'hai già scaricato e installato controlla che Netbeans lo usi. Dovrebbe esserci un pulsante sotto un tombino, dietro una pietra di fianco a un cespuglio che ti consente di farlo. |
|
|
|
|
|
#36 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
ok quella l'ho scaricata & installata ora tocca trovar il cescpuglio
|
|
|
|
|
|
#37 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
niente uhm...non c'è una possibile sostituzione di Scanner?
|
|
|
|
|
|
#38 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi usare BufferedReader.
Codice:
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
PrintStream out = System.out;
int inp = 2, hid = 2, outp = 1;
int[] layers = { inp, hid, outp };
out.println("Enter number of training iterations: ");
int iter;
try {
iter = Integer.parseInt(in.readLine());
} catch(IOException ex) {
throw new RuntimeException(ex);
}
|
|
|
|
|
|
#39 |
|
Junior Member
Iscritto dal: Nov 2006
Messaggi: 27
|
copio tutto questo al posto di quella righetta?
|
|
|
|
|
|
#40 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
No.
Al posto di Scanner in = new Scanner(System.in) ci metti BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); e al posto di int iter = in.nextInt(); ci metti: Codice:
int iter;
try {
iter = Integer.parseInt(in.readLine());
} catch(Exception ex) {
throw new RuntimeException(ex);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:58.



















