mirror of
https://github.com/huggingface/candle.git
synced 2025-06-18 11:37:11 +00:00
Add some documentation and test to the linear layer. (#151)
* Add some documentation and test to the linear layer. * Layer norm doc. * Minor tweaks.
This commit is contained in:
@ -31,7 +31,9 @@ Cheatsheet:
|
|||||||
|
|
||||||
| | Using PyTorch | Using Candle |
|
| | Using PyTorch | Using Candle |
|
||||||
|------------|------------------------------------------|------------------------------------------------------------------|
|
|------------|------------------------------------------|------------------------------------------------------------------|
|
||||||
| Creation | `torch.Tensor([[1, 2], [3, 4]])` | `Tensor::new(&[[1f32, 2.]], [3., 4.]], &Device::Cpu)?` |
|
| Creation | `torch.Tensor([[1, 2], [3, 4]])` | `Tensor::new(` |
|
||||||
|
| | | ` &[[1f32, 2.]], [3., 4.]],` |
|
||||||
|
| | | ` &Device::Cpu)?` |
|
||||||
| Indexing | `tensor[:, :4]` | `tensor.i((.., ..4))?` |
|
| Indexing | `tensor[:, :4]` | `tensor.i((.., ..4))?` |
|
||||||
| Operations | `tensor.view((2, 2))` | `tensor.reshape((2, 2))?` |
|
| Operations | `tensor.view((2, 2))` | `tensor.reshape((2, 2))?` |
|
||||||
| Operations | `a.matmul(b)` | `a.matmul(&b)?` |
|
| Operations | `a.matmul(b)` | `a.matmul(&b)?` |
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//! Convolution Layers.
|
||||||
use candle::{Result, Tensor};
|
use candle::{Result, Tensor};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
//! Embedding Layer.
|
||||||
use candle::{Result, Tensor};
|
use candle::{Result, Tensor};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -1,3 +1,33 @@
|
|||||||
|
//! Layer Normalization.
|
||||||
|
//!
|
||||||
|
//! This layer applies Layer Normalization over a mini-batch of inputs as described in [`Layer
|
||||||
|
//! Normalization`]. The input is expected to have three dimensions: a batch dimension, a length,
|
||||||
|
//! and a hidden size, the normalization is applied over the last dimension.
|
||||||
|
//!
|
||||||
|
//! # Example
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! use candle::{Tensor, Device::Cpu};
|
||||||
|
//! use candle_nn::LayerNorm;
|
||||||
|
//! # fn main() -> candle::Result<()> {
|
||||||
|
//!
|
||||||
|
//! let w = Tensor::new(1f32, &Cpu)?;
|
||||||
|
//! let b = Tensor::new(0f32, &Cpu)?;
|
||||||
|
//! let layer = LayerNorm::new(w, b, 1e-5);
|
||||||
|
//!
|
||||||
|
//! let xs = Tensor::new(
|
||||||
|
//! &[[[1f32, 2., 3.], [4., 5., 6.], [9., 8., 7.]]],
|
||||||
|
//! &Cpu)?;
|
||||||
|
//! let ys = layer.forward(&xs)?;
|
||||||
|
//! assert_eq!(
|
||||||
|
//! ys.to_vec3::<f32>()?,
|
||||||
|
//! &[[[-1.2247356, 0.0, 1.2247356],
|
||||||
|
//! [-1.2247356, 0.0, 1.2247356],
|
||||||
|
//! [ 1.2247356, 0.0, -1.2247356]]]);
|
||||||
|
//! # Ok(()) }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! [`Layer Normalization`]: https://arxiv.org/abs/1607.06450
|
||||||
use candle::{DType, Result, Tensor};
|
use candle::{DType, Result, Tensor};
|
||||||
|
|
||||||
// This layer norm version handles both weight and bias so removes the mean.
|
// This layer norm version handles both weight and bias so removes the mean.
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
//! Linear layer
|
||||||
|
//!
|
||||||
|
//! This layer applies a linear transformation to the incoming data, `y = x@w.t() + b`.
|
||||||
|
//! The bias is optional. The `forward` method can be used to apply the layer, it supports input
|
||||||
|
//! with a batch dimension (so of shape `(b_sz, in_c)`) or without (of shape `(in_c,)`), the
|
||||||
|
//! output has shape `(b_sz, out_c)` and `(out_c,)` respectively.
|
||||||
|
//!
|
||||||
|
//! ```rust
|
||||||
|
//! use candle::{Tensor, Device::Cpu};
|
||||||
|
//! use candle_nn::Linear;
|
||||||
|
//! # fn main() -> candle::Result<()> {
|
||||||
|
//!
|
||||||
|
//! let w = Tensor::new(&[[1f32, 2.], [3., 4.], [5., 6.]], &Cpu)?;
|
||||||
|
//! let layer = Linear::new(w, None); // Use no bias.
|
||||||
|
//! let xs = Tensor::new(&[[10f32, 100.]], &Cpu)?;
|
||||||
|
//! let ys = layer.forward(&xs)?;
|
||||||
|
//! assert_eq!(ys.to_vec2::<f32>()?, &[[210.0, 430.0, 650.0]]);
|
||||||
|
//! # Ok(()) }
|
||||||
|
//! ```
|
||||||
use candle::Tensor;
|
use candle::Tensor;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
Reference in New Issue
Block a user