1:
16: package ;
17:
18: import ;
19: import ;
20: import ;
21: import ;
22: import ;
23: import ;
24:
25:
35: public class BiNetToNNML extends NetToNNML {
36:
37:
40: public String generateString(NeuralNet net) throws NeuronTypeMismatchException, NeuronNotFoundException {
41: if(net.getType().equals("de.webdings.jannis.neuralnet.BiNeuron")) {
42: return this.generateString(net.getLayers());
43: } else {
44: throw new NeuronTypeMismatchException();
45: }
46: }
47:
50: public String generateString(Neuron[][] layers) throws NeuronTypeMismatchException, NeuronNotFoundException {
51: NeuralNet net = new NeuralNet(layers);
52: String type = null;
53: if(net.getType().equals("de.webdings.jannis.neuralnet.BiNeuron")) {
54: type = "bineuron";
55: } else {
56: throw new NeuronTypeMismatchException("Unknown neuron type");
57: }
58: this.finder = new NeuronIDFinder(layers);
59: s = new String("<?xml version=\"1.0\"?>\n<!DOCTYPE neural_net SYSTEM \"nnml.dtd\">\n");
60: s = s+ "<neural_net type=\"" + type + "\">\n";
61: int i;
62: for (i = 0; i < layers.length; ++i) {
63: nextLayer(layers[i]);
64: }
65: for (i = 0; i < layers.length; ++i) {
66: for(int j=0;j<layers[i].length;++j) {
67: for(int k=0;k<layers[i][j].getConnections().length;++k) {
68: this.nextSynapse(layers[i][j].getConnections()[k]);
69: }
70: }
71: }
72: s = s+ "</neural_net>";
73: return s;
74:
75: }
76:
77: private void nextSynapse(Synapse synapse) throws NeuronNotFoundException {
78: s = s+ "<synapse weight=\"" + synapse.getWeight() + "\">\n";
79: s = s+ "<source layerID=\"" + finder.getLayerID(synapse.getSource())
80: + "\" neuronID=\"" + finder.getNeuronID(synapse.getSource()) + "\"/>\n";
81: s = s+ "<target layerID=\"" + finder.getLayerID(synapse.getTarget())
82: + "\" neuronID=\"" + finder.getNeuronID(synapse.getTarget()) + "\"/>\n";
83: s = s+ "</synapse>\n";
84: }
85:
86: private void nextNeuron(Neuron neuron) {
87: s = s+ "<neuron sigma=\"" + neuron.getActivationFunction() + "\"/>\n";
88: }
89:
90: private void nextLayer(Neuron[] layer) {
91: int j;
92: s = s+ "<layer>\n";
93: for(j=0;j<layer.length;++j) {
94: nextNeuron(layer[j]);
95: }
96: s = s+ "</layer>\n";
97: }
98:
99:
100: }