Package ai.djl.nn

Class SequentialBlock

All Implemented Interfaces:
StreamingBlock, Block
Direct Known Subclasses:
PointwiseFeedForwardBlock

public class SequentialBlock extends AbstractBlock implements StreamingBlock
SequentialBlock is a Block whose children form a chain of blocks with each child block feeding its output to the next. The output of the last child is returned as the output of the SequentialBlock.

SequentialBlock has no direct parameters.

  • Constructor Details

    • SequentialBlock

      public SequentialBlock()
      Creates an empty sequential block. Use add and addAll to add blocks to be executed in sequence.
  • Method Details

    • addAll

      public SequentialBlock addAll(Block... blocks)
      Adds an array of blocks to be executed in sequence, in order.
      Parameters:
      blocks - the array of blocks
      Returns:
      this block
    • addAll

      public SequentialBlock addAll(Collection<Block> blocks)
      Adds a Collection of blocks to be executed in sequence, in order.
      Parameters:
      blocks - the Collection of blocks
      Returns:
      this block
    • add

      public SequentialBlock add(Block block)
      Adds the given Block to the block to be executed in order.
      Parameters:
      block - the block to be added to the sequence of blocks
      Returns:
      this block
    • add

      Adds a LambdaBlock that applies the given function to the sequence of blocks.
      Parameters:
      f - the function forms the LambdaBlock
      Returns:
      this block
    • add

      public SequentialBlock add(Function<NDList,NDList> f, String name)
      Adds a LambdaBlock that applies the given function to the sequence of blocks.
      Parameters:
      f - the function forms the LambdaBlock
      name - the function name
      Returns:
      this block
    • addSingleton

      public SequentialBlock addSingleton(Function<NDArray,NDArray> f)
      Adds a LambdaBlock.singleton(Function) that applies the given function to the sequence of blocks.
      Parameters:
      f - the function forms the LambdaBlock
      Returns:
      this block
      See Also:
    • addSingleton

      public SequentialBlock addSingleton(Function<NDArray,NDArray> f, String name)
      Adds a LambdaBlock.singleton(Function) that applies the given function to the sequence of blocks.
      Parameters:
      f - the function forms the LambdaBlock
      name - the function name
      Returns:
      this block
      See Also:
    • removeLastBlock

      public void removeLastBlock()
      Removes the Block added last from the sequence of blocks.
    • replaceLastBlock

      public void replaceLastBlock(Block block)
      Replaces the Block last added from the sequence of blocks, and adds the given block.
      Parameters:
      block - the block to replace the last block with
    • isReturnIntermediate

      public boolean isReturnIntermediate()
      Returns whether the block returns all intermediate block results or only the end of the sequential chain.
      Returns:
      whether the block returns all intermediate block results or only the end of the sequential chain
    • setReturnIntermediate

      public SequentialBlock setReturnIntermediate(boolean returnIntermediate)
      Sets whether the block returns all intermediate sequence results.
      Parameters:
      returnIntermediate - true for intermediates, false for only chain result (default and typical behavior is false)
      Returns:
      this SequentialBlock
    • forwardInternal

      protected NDList forwardInternal(ParameterStore parameterStore, NDList inputs, boolean training, ai.djl.util.PairList<String,Object> params)
      Specified by:
      forwardInternal in class AbstractBaseBlock
      Parameters:
      parameterStore - the parameter store
      inputs - the input NDList
      training - true for a training forward pass
      params - optional parameters
      Returns:
      the output of the forward pass
    • forwardInternal

      protected NDList forwardInternal(ParameterStore parameterStore, NDList data, NDList labels, ai.djl.util.PairList<String,Object> params)
      Overrides:
      forwardInternal in class AbstractBaseBlock
      Parameters:
      parameterStore - the parameter store
      data - the input data NDList
      labels - the input labels NDList
      params - optional parameters
      Returns:
      the output of the forward pass
      See Also:
    • forwardStreamIter

      public Iterator<NDList> forwardStreamIter(ParameterStore parameterStore, NDList inputs, boolean training, ai.djl.util.PairList<String,Object> params)
      Applies the operating function of the block once, but returns the result in chunks. This method should only be called on blocks that are initialized.
      Specified by:
      forwardStreamIter in interface StreamingBlock
      Parameters:
      parameterStore - the parameter store
      inputs - the input NDList
      training - true for a training forward pass (turn on dropout and layerNorm)
      params - optional parameters
      Returns:
      the output of the forward pass
    • initializeChildBlocks

      public void initializeChildBlocks(NDManager manager, DataType dataType, Shape... inputShapes)
      Initializes the Child blocks of this block. You need to override this method if your subclass has child blocks. Used to determine the correct input shapes for child blocks based on the requested input shape for this block.
      Overrides:
      initializeChildBlocks in class AbstractBaseBlock
      Parameters:
      manager - the manager to use for initialization
      dataType - the requested data type
      inputShapes - the expected input shapes for this block
    • getOutputShapes

      public Shape[] getOutputShapes(Shape[] inputs)
      Returns the expected output shapes of the block for the specified input shapes.
      Specified by:
      getOutputShapes in interface Block
      Parameters:
      inputs - the shapes of the inputs
      Returns:
      the expected output shapes of the block
    • saveMetadata

      protected void saveMetadata(DataOutputStream os) throws IOException
      Override this method to save additional data apart from parameter values.

      This default implementation saves the currently set input shapes.

      Overrides:
      saveMetadata in class AbstractBaseBlock
      Parameters:
      os - the non-null output stream the parameter values and metadata are written to
      Throws:
      IOException - saving failed
    • loadMetadata

      public void loadMetadata(byte loadVersion, DataInputStream is) throws IOException, MalformedModelException
      Overwrite this to load additional metadata with the parameter values.

      If you overwrite AbstractBaseBlock.saveMetadata(DataOutputStream) or need to provide backward compatibility to older binary formats, you probably need to overwrite this. This default implementation checks if the version number fits, if not it throws an MalformedModelException. After that it restores the input shapes.

      Overrides:
      loadMetadata in class AbstractBaseBlock
      Parameters:
      loadVersion - the version used for loading this metadata.
      is - the input stream we are loading from
      Throws:
      IOException - loading failed
      MalformedModelException - data can be loaded but has wrong format