A spatially sparse convolutional neural network, CNN, system for inking applications, the system comprising: at least one processor; and a computer-readable medium storing instructions that are operative when executed by the at least one processor to: receive input data as a sparse tensor; store the input data in a sparse tensor data structure, wherein the sparse tensor data structure includes a non-zero element having a value and an index and wherein the sparse tensor data structure omits zero-value elements of the input data; perform a convolution operation using the input data in the sparse tensor data structure and a kernel, wherein the non-zero element of the input data is multiplied by an element of the kernel that is indexed based at least on the index of the non-zero element of the input data and wherein the convolution operation omits multiplication operations for zero-value elements of the input data; transpose a three-dimensional, 3D, tensor output of the convolution operation from a first order to a second order, wherein each of the first order and the second order comprises a width, height, and channel; and determine, based at least on the transposed 3D tensor output of the convolution operation, an output character or object representing the input data. at least one processor; and a computer-readable medium storing instructions that are operative when executed by the at least one processor to: receive input data as a sparse tensor; store the input data in a sparse tensor data structure, wherein the sparse tensor data structure includes a non-zero element having a value and an index and wherein the sparse tensor data structure omits zero-value elements of the input data; perform a convolution operation using the input data in the sparse tensor data structure and a kernel, wherein the non-zero element of the input data is multiplied by an element of the kernel that is indexed based at least on the index of the non-zero element of the input data and wherein the convolution operation omits multiplication operations for zero-value elements of the input data; transpose a three-dimensional, 3D, tensor output of the convolution operation from a first order to a second order, wherein each of the first order and the second order comprises a width, height, and channel; and determine, based at least on the transposed 3D tensor output of the convolution operation, an output character or object representing the input data. receive input data as a sparse tensor; store the input data in a sparse tensor data structure, wherein the sparse tensor data structure includes a non-zero element having a value and an index and wherein the sparse tensor data structure omits zero-value elements of the input data; perform a convolution operation using the input data in the sparse tensor data structure and a kernel, wherein the non-zero element of the input data is multiplied by an element of the kernel that is indexed based at least on the index of the non-zero element of the input data and wherein the convolution operation omits multiplication operations for zero-value elements of the input data; transpose a three-dimensional, 3D, tensor output of the convolution operation from a first order to a second order, wherein each of the first order and the second order comprises a width, height, and channel; and determine, based at least on the transposed 3D tensor output of the convolution operation, an output character or object representing the input data.