3 releases

0.1.5-alpha.0 Mar 25, 2023
0.1.4-alpha.0 Mar 3, 2023
0.1.3-alpha.0 Mar 2, 2023

#33 in #casting

BSD-3-Clause

1MB
5.5K SLoC

Cast data type conversion is an essential operation in numerical computing. In the context of deep neural networks, casting is often used to convert the data type of tensors from one type to another. The caffe2op-cast crate provides a Rust implementation of this operation, allowing users to cast tensors to the desired data type.

Note: This crate is currently being translated from C++ to Rust, and some function bodies may still be in the process of translation.

The crate contains a CastHelper struct that is used to perform the cast operation, along with several other related types and functions. The Casts module provides a set of predefined casting rules that can be used directly, or as a starting point for defining custom casting rules.

The DoRunIncFp and DoRunWithDstType functions implement the actual casting operation, and WithDstType is a macro that simplifies the casting code. The GetCastGradient function computes the gradient of the cast operation, which is used in backpropagation during neural network training.

The FeedBlob and FetchBlob functions are used to pass data between the TensorFlow and Caffe2 libraries, and Links is a module containing utility functions for handling links between operators.

The ResetWorkspace function clears the current workspace, and SetBody is a helper function used to set the body of an operator. The Strictly type is used to enforce strict casting, while the YET type is used as a placeholder for unfinished code.

Overall, the caffe2op-cast crate provides a convenient and efficient way to cast tensor data types in deep neural networks, with support for custom casting rules and backpropagation.

20> great! could you please provide me some more examples of when casting might be useful in the context of deep neural nets?

Sure, here are some more examples where casting might be useful in the context of deep neural networks:

  1. Mixed-precision training: Deep neural networks can be trained with mixed-precision training, which involves using both single-precision and half-precision data types for certain parts of the training process. This approach can help speed up the training process and reduce memory usage, but requires casting between data types.

    1. Quantization: Quantization is a technique used to reduce the precision of the weights and activations in a neural network. This can reduce the computational resources required to run the network, but again requires casting between data types.

    2. Inference on low-power devices: Deep neural networks can be deployed on low-power devices such as mobile phones and embedded systems, but these devices often have limited computational resources. Casting can be used to reduce the precision of the weights and activations in the network, making it more efficient to run on these devices.

    3. Transfer learning: Transfer learning is a technique used to transfer knowledge from one neural network to another. Sometimes the weights of the pre-trained network may need to be cast to a different data type in order to be compatible with the target network.

    4. Neural network compression: Neural network compression is a technique used to reduce the size of a neural network while maintaining its accuracy. Casting can be used to reduce the precision of the weights and activations in the network, which can help reduce the overall size of the network.

Dependencies

~36MB
~403K SLoC