Contents

singleGateRNN(_:recurrentWeight:initState:descriptor:name:)

Creates a single-gate RNN operation and returns the value and optionally the training state tensor.

Declaration

func singleGateRNN(_ source: MPSGraphTensor, recurrentWeight: MPSGraphTensor, initState: MPSGraphTensor?, descriptor: MPSGraphSingleGateRNNDescriptor, name: String?) -> [MPSGraphTensor]

Parameters

  • source:

    A tensor that contains the source data x[t] with the data layout [T,N,I]. In case inputWeight = nil and bidirectional = NO then the layout is [T,N,H] and for inputWeight = nil and bidirectional = YES the layout is [T,N,2H].

  • recurrentWeight:

    A tensor containing the recurrent weights R. For bidirectional the layout is [2,H,H] and otherwise it is [H,H].

  • initState:

    The initial internal state of the RNN h[-1] - optional, if missing the operation assumes zeroes. For bidirectional the layout is [N,2H] and otherwise it is [N,H].

  • descriptor:

    A descriptor that defines the parameters for the RNN operation.

  • name:

    The name for the operation.

Return Value

A valid MPSGraphTensor array of size 1 or 2, depending on value of descriptor.training. The layout of the both outputs is [T,N,H] or [T,N,2H] for bidirectional.

Discussion

This operation returns tensors h and optionally z that are defined recursively as follows:

for t = 0 to T-1
  z[t] = x[t] W^T + (h[t-1]m) R^T + b
  h[t] = activation( z[t] ), where

W is optional inputWeight, R is recurrentWeight, b is bias, m is optional mask, x[t] is source h[t] is the first output, z[t] is the second output (optional) and h[-1] is initState. See MPSGraphSingleGateRNNDescriptor for different activation options.