Class Neuron

  • All Implemented Interfaces:
    java.io.Serializable

    public class Neuron
    extends java.lang.Object
    implements java.io.Serializable
    Describes a neuron element of a neural network. This class aims to be thread-safe.
    Since:
    3.3
    See Also:
    Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  Neuron.SerializationProxy
      Serialization.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.concurrent.atomic.AtomicReference<double[]> features
      Neuron data.
      private long identifier
      Identifier.
      private java.util.concurrent.atomic.AtomicLong numberOfAttemptedUpdates
      Number of attempts to update a neuron.
      private java.util.concurrent.atomic.AtomicLong numberOfSuccessfulUpdates
      Number of successful updates of a neuron.
      private static long serialVersionUID
      Serializable.
      private int size
      Length of the feature set.
    • Constructor Summary

      Constructors 
      Constructor Description
      Neuron​(long identifier, double[] features)
      Creates a neuron.
    • Field Detail

      • serialVersionUID

        private static final long serialVersionUID
        Serializable.
        See Also:
        Constant Field Values
      • identifier

        private final long identifier
        Identifier.
      • size

        private final int size
        Length of the feature set.
      • features

        private final java.util.concurrent.atomic.AtomicReference<double[]> features
        Neuron data.
      • numberOfAttemptedUpdates

        private final java.util.concurrent.atomic.AtomicLong numberOfAttemptedUpdates
        Number of attempts to update a neuron.
      • numberOfSuccessfulUpdates

        private final java.util.concurrent.atomic.AtomicLong numberOfSuccessfulUpdates
        Number of successful updates of a neuron.
    • Constructor Detail

      • Neuron

        Neuron​(long identifier,
               double[] features)
        Creates a neuron. The size of the feature set is fixed to the length of the given argument.
        Constructor is package-private: Neurons must be created by the network instance to which they will belong.
        Parameters:
        identifier - Identifier (assigned by the Network).
        features - Initial values of the feature set.
    • Method Detail

      • copy

        public Neuron copy()
        Performs a deep copy of this instance. Upon return, the copied and original instances will be independent: Updating one will not affect the other.
        Returns:
        a new instance with the same state as this instance.
        Since:
        3.6
      • getIdentifier

        public long getIdentifier()
        Gets the neuron's identifier.
        Returns:
        the identifier.
      • getSize

        public int getSize()
        Gets the length of the feature set.
        Returns:
        the number of features.
      • getFeatures

        public double[] getFeatures()
        Gets the neuron's features.
        Returns:
        a copy of the neuron's features.
      • compareAndSetFeatures

        public boolean compareAndSetFeatures​(double[] expect,
                                             double[] update)
        Tries to atomically update the neuron's features. Update will be performed only if the expected values match the current values.
        In effect, when concurrent threads call this method, the state could be modified by one, so that it does not correspond to the the state assumed by another. Typically, a caller retrieves the current state, and uses it to compute the new state. During this computation, another thread might have done the same thing, and updated the state: If the current thread were to proceed with its own update, it would overwrite the new state (which might already have been used by yet other threads). To prevent this, the method does not perform the update when a concurrent modification has been detected, and returns false. When this happens, the caller should fetch the new current state, redo its computation, and call this method again.
        Parameters:
        expect - Current values of the features, as assumed by the caller. Update will never succeed if the contents of this array does not match the values returned by getFeatures().
        update - Features's new values.
        Returns:
        true if the update was successful, false otherwise.
        Throws:
        DimensionMismatchException - if the length of update is not the same as specified in the constructor.
      • getNumberOfAttemptedUpdates

        public long getNumberOfAttemptedUpdates()
        Retrieves the number of calls to the compareAndSetFeatures method. Note that if the caller wants to use this method in combination with getNumberOfSuccessfulUpdates(), additional synchronization may be required to ensure consistency.
        Returns:
        the number of update attempts.
        Since:
        3.6
      • getNumberOfSuccessfulUpdates

        public long getNumberOfSuccessfulUpdates()
        Retrieves the number of successful calls to the compareAndSetFeatures method. Note that if the caller wants to use this method in combination with getNumberOfAttemptedUpdates(), additional synchronization may be required to ensure consistency.
        Returns:
        the number of successful updates.
        Since:
        3.6
      • containSameValues

        private boolean containSameValues​(double[] current,
                                          double[] expect)
        Checks whether the contents of both arrays is the same.
        Parameters:
        current - Current values.
        expect - Expected values.
        Returns:
        true if the arrays contain the same values.
        Throws:
        DimensionMismatchException - if the length of expected is not the same as specified in the constructor.
      • readObject

        private void readObject​(java.io.ObjectInputStream in)
        Prevents proxy bypass.
        Parameters:
        in - Input stream.
      • writeReplace

        private java.lang.Object writeReplace()
        Custom serialization.
        Returns:
        the proxy instance that will be actually serialized.