/// <summary> /// Invoke this hook with a certain parameter registry if optional conditional criteria are satisfied. /// </summary> /// <param name="registry">The registry containing the required values for this hook's execution.</param> /// <param name="resolver">A helper resolver for complex registry entries (automatically cached).</param> public override void SubInvoke(IRegistry registry, IRegistryResolver resolver) { IDictionary <string, INDArray> block = (IDictionary <string, INDArray>)ParameterRegistry[DataIdentifier]; IPassNetworkReceiver receiver = (IPassNetworkReceiver)ParameterRegistry[ReceiverIdentifier]; INetwork network = resolver.ResolveGetSingle <INetwork>("network.self"); IDataProvider provider = new DefaultDataProvider(); provider.SetExternalOutputLink("external_default", (targetsRegistry, layer, targetBlock) => { receiver.ReceivePass((INDArray)targetsRegistry["activations"]); }); DataUtils.ProvideExternalInputData(provider, network, block); network.Run(Operator.Handler, false); DataUtils.ProvideExternalOutputData(provider, network, block); }
/// <summary> /// Create a hook with a certain time step and a set of required global registry entries. /// </summary> public PassNetworkHook(IPassNetworkReceiver receiver, IDictionary <string, INDArray> block, ITimeStep timeStep) : base(timeStep, "network.self") { ParameterRegistry[DataIdentifier] = block; ParameterRegistry[ReceiverIdentifier] = receiver; InvokeInBackground = true; }