All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.cilib.nn.architecture.Architecture Maven / Gradle / Ivy

Go to download

A library of composable components enabling simpler Computational Intelligence

There is a newer version: 0.8
Show newest version
/**           __  __
 *    _____ _/ /_/ /_    Computational Intelligence Library (CIlib)
 *   / ___/ / / / __ \   (c) CIRG @ UP
 *  / /__/ / / / /_/ /   http://cilib.net
 *  \___/_/_/_/_.___/
 */
package net.sourceforge.cilib.nn.architecture;

import com.google.common.collect.AbstractIterator;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.sourceforge.cilib.nn.architecture.builder.ArchitectureBuilder;
import net.sourceforge.cilib.nn.architecture.builder.FeedForwardArchitectureBuilder;
import net.sourceforge.cilib.nn.architecture.visitors.ArchitectureVisitor;

/**
 * Class represents a neural network architecture and encapsulates a {@link ArchitectureBuilder}
 * and a list of {@link Layers}.
 */
public class Architecture {

    private ArchitectureBuilder architectureBuilder;
    private List layers;

    /**
     * Default constructor. Default ArchitectureBuilder is a {@link FeedForwardArchitectureBuilder}
     */
    public Architecture() {
        layers = new ArrayList();
        architectureBuilder = new FeedForwardArchitectureBuilder();
    }

    /**
     * Initialises the architecture by calling the builder's build method on
     * 'this' object.
     */
    public void initialise() {
        architectureBuilder.buildArchitecture(this);
    }

    /**
     * Accepts an {@link ArchitectureVisitor} and calls its visit method on
     * 'this' object.
     * @param visitor
     */
    public void accept(ArchitectureVisitor visitor) {
        visitor.visit(this);
    }

    /**
     * Gets the architecture builder.
     * @return the architecture builder.
     */
    public ArchitectureBuilder getArchitectureBuilder() {
        return architectureBuilder;
    }

    /**
     * Sets the architecture builder.
     * @param architectureBuilder the new architecture builder.
     */
    public void setArchitectureBuilder(ArchitectureBuilder architectureBuilder) {
        this.architectureBuilder = architectureBuilder;
    }

    /**
     * Gets the number of layers the architecture contains.
     * @return the number of layers in the architecture.
     */
    public int getNumLayers() {
        return layers.size();
    }

    /**
     * Gets the list containing the layers.
     * @return list containing the layers.
     */
    public List getLayers() {
        return layers;
    }

    /**
     * Sets the list containing the layers.
     * @param layers the new list containing the layers.
     */
    public void setLayers(List layers) {
        this.layers = layers;
    }

    /**
     * Iterable for all hidden and output layers.
     */
    public Iterable getActivationLayers() {
        return new Iterable() {
            @Override
            public Iterator iterator() {
                return new ActivationLayerIterator();
            }
        };
    }

    private class ActivationLayerIterator extends AbstractIterator {

        private int idx = 1;

        @Override
        protected Layer computeNext() {
            if (idx >= getNumLayers()) {
                return endOfData();
            }
            return getLayers().get(idx++);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy