def softmax(x, name = ''): """ Compute softmax along with a squence values """ from ...ops import element_divide, exp x_exp = exp((x-broadcast_as(reduce_max(x), x))*10) x_softmax = element_divide(x_exp, broadcast_as(reduce_sum(x_exp), x), name = name) return x_softmax
def broadcast_as(operand, broadcast_as_operand, name=''): ''' Creates a sequence out of a non-sequence by endowing the `operand` with dynamic axes of the same type as the `broadcast_as_operand` and broadcasting the value of the `operand` along those dynamic axes. Example: >>> import cntk.ops as C >>> import numpy as np >>> x = C.input_variable(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.broadcast_as(t, b) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(4,3,2)) >>> y.eval({x:x0}) array([[[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]]]], dtype=float32) Args: operand: the symbolic tensor whose value will be broadcast broadcast_as_operand: the symbolic tensor whose dynamic axes will be used to broadcast the operand name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import broadcast_as operand = sanitize_input(operand, get_data_type(operand)) broadcast_as_operand = sanitize_input( broadcast_as_operand, get_data_type(broadcast_as_operand)) return broadcast_as(operand, broadcast_as_operand, name)
def broadcast_as(operand, broadcast_as_operand, name=''): ''' Creates a sequence out of a non-sequence by endowing the ``operand`` with dynamic axes of the same type as the ``broadcast_as_operand`` and broadcasting the value of the ``operand`` along those dynamic axes. Example: >>> import cntk.ops as C >>> import numpy as np >>> x = C.input_variable(shape=(3,2)) >>> t = C.sequence.last(x) >>> b = C.sequence.is_first(x) >>> y = C.sequence.broadcast_as(t, b) >>> x0 = np.reshape(np.arange(24.0,dtype=np.float32),(4,3,2)) >>> y.eval({x:x0}) array([[[[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]], <BLANKLINE> [[ 18., 19.], [ 20., 21.], [ 22., 23.]]]], dtype=float32) Args: operand: the symbolic tensor whose value will be broadcast broadcast_as_operand: the symbolic tensor whose dynamic axes will be used to broadcast the operand name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import broadcast_as operand = sanitize_input(operand, get_data_type(operand)) broadcast_as_operand = sanitize_input( broadcast_as_operand, get_data_type(broadcast_as_operand)) return broadcast_as(operand, broadcast_as_operand, name)
def broadcast_as(operand, broadcast_as_operand, name=''): ''' TBA Example: TBA Args: operand: the symbolic tensor operand denoting a tensor broadcast_as_operand: the symbolic tensor operand denoting a sequence per whose layout the main operand id to be broadcast name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import broadcast_as operand = sanitize_input(operand, get_data_type(operand)) broadcast_as_operand = sanitize_input( broadcast_as_operand, get_data_type(broadcast_as_operand)) return broadcast_as(operand, broadcast_as_operand, name)
def broadcast_as(operand, broadcast_as_operand, name=''): ''' TBA Example: TBA Args: operand: the symbolic tensor operand denoting a tensor broadcast_as_operand: the symbolic tensor operand denoting a sequence per whose layout the main operand id to be broadcast name (str): the name of the node in the network Returns: :class:`cntk.Function` ''' from cntk.cntk_py import broadcast_as operand = sanitize_input(operand, get_data_type(operand)) broadcast_as_operand = sanitize_input(broadcast_as_operand, get_data_type(broadcast_as_operand)) return broadcast_as(operand, broadcast_as_operand, name)