use serde::Deserialize;
use crate::layers::activation::Activation;
#[derive(Clone, Debug, Deserialize)]
pub struct BertConfig {
pub vocab_size: usize,
pub hidden_size: usize,
pub num_hidden_layers: usize,
pub num_attention_heads: usize,
pub intermediate_size: usize,
#[serde(default = "default_act")]
pub hidden_act: Activation,
pub max_position_embeddings: usize,
#[serde(default = "default_type_vocab_size")]
pub type_vocab_size: usize,
#[serde(default = "default_eps")]
pub layer_norm_eps: f64,
}
fn default_act() -> Activation {
Activation::Gelu
}
fn default_type_vocab_size() -> usize {
2
}
fn default_eps() -> f64 {
1e-12
}
impl BertConfig {
pub fn head_dim(&self) -> usize {
self.hidden_size / self.num_attention_heads
}
}