converter.CRI_Converter
converter.CRI_Converter(self, num_steps, input_layer, output_layer, input_shape, v_threshold, embed_dim, backend='spikingjelly')
A class to convert a neural network model into an equivalent model compatible with the CRI (Capacitive ReRAM Inverter) hardware.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
num_steps |
int | The number of time steps in the input. | required |
input_layer |
int | The index of the first pytorch layer used as synapses. | required |
output_layer |
int | The index of the last pytorch layer used as synapses. | required |
input_shape |
tuple of int | The shape of the input data. Default is (1, 28, 28). | required |
backend |
str | The backend to use. Currently Support SpikingJelly and snnTorch. Default is ‘spikingjelly’. | 'spikingjelly' |
v_threshold |
float | The voltage threshold for the neurons. It should be set to the v_threshold of Quantize Network. | required |
embed_dim |
int | The embedding dimension. Only used for spikeformer. | required |
Attributes
| Name | Type | Description |
|---|---|---|
| HIGH_SYNAPSE_WEIGHT | float | The high synapse weight value. Default is 1e6. |
| axon_dict | defaultdict of list | A dictionary mapping each axon to a list of connected neurons. |
| neuron_dict | defaultdict of list | A dictionary mapping each neuron to a list of connected axons. |
| output_neurons | list | A list of output neurons. |
| input_shape | numpy.ndarray | The shape of the input data. |
| num_steps | int | The number of time steps in the input. |
| axon_offset | int | The current offset for axon indexing. |
| neuron_offset | int | The current offset for neuron indexing. |
| backend | str | The backend to use. |
| save_input | bool | Whether to save the input data. |
| bias_start_idx | int or None | The starting index for bias neurons. |
| curr_input | np.ndarray or None | The current input data. |
| input_layer | int | The index of the input layer. |
| output_layer | int | The index of the output layer. |
| layer_index | int | The current layer index. |
| total_axonSyn | int | The total number of axon synapses. |
| total_neuronSyn | int | The total number of neuron synapses. |
| max_fan | int | The maximum fan-out. |
| v_threshold | float | The voltage threshold for the neurons. |
| q | np.ndarray or None | The q matrix for attention conversion. |
| v | np.ndarray or None | The v matrix for attention conversion. |
| k | np.ndarray or None | The k matrix for attention conversion. |
| embed_dim | int | The embedding dimension. |
Examples
>>> converter = CRI_Converter()
>>> converter.layer_converter(some_model)
>>> converter.input_converter(some_input_data)Methods
| Name | Description |
|---|---|
| input_converter | Converts input data into a spike train and then into a list of axon indices. |
| layer_converter | Converts a model into a CRI-compatible model. |
| run_CRI_hw | Runs a set of inputs through the hardware implementation of the network and gets the output predictions. |
| run_CRI_sw | Runs a set of inputs through the software simulation of the network and gets the output predictions. |
input_converter
converter.CRI_Converter.input_converter(self, input_data)
Converts input data into a spike train and then into a list of axon indices.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
input_data |
torch.Tensor | The input data. | required |
Returns
| Type | Description |
|---|---|
| list of list of str | The batch of spikes, with each spike represented by its axon index. |
Examples
>>> converter = CRI_Converter()
>>> converter.input_converter(some_input_data)layer_converter
converter.CRI_Converter.layer_converter(self, model)
Converts a model into a CRI-compatible model.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
model |
torch.nn.Module | The input model. | required |
Examples
>>> converter = CRI_Converter()
>>> converter.layer_converter(some_model)run_CRI_hw
converter.CRI_Converter.run_CRI_hw(self, inputList, hardwareNetwork)
Runs a set of inputs through the hardware implementation of the network and gets the output predictions.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
inputList |
list of list of str | The input data, where each item is a list of axon indices representing the spikes. | required |
hardwareNetwork |
object | The hardware network object. | required |
Returns
| Type | Description |
|---|---|
| list of int | The output predictions. |
Examples
>>> converter = CRI_Converter()
>>> converter.run_CRI_hw(some_inputList, some_hardwareNetwork)run_CRI_sw
converter.CRI_Converter.run_CRI_sw(self, inputList, softwareNetwork)
Runs a set of inputs through the software simulation of the network and gets the output predictions.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
inputList |
list of list of str | The input data, where each item is a list of axon indices representing the spikes. | required |
softwareNetwork |
object | The software network object. | required |
Returns
| Type | Description |
|---|---|
| list of int | The output predictions. |
Examples
>>> converter = CRI_Converter()
>>> converter.run_CRI_sw(some_inputList, some_softwareNetwork)