ceras
yet another deep learning engine
Classes | Namespaces | Typedefs | Functions | Variables
tensor.hpp File Reference
#include "./includes.hpp"
#include "./utils/better_assert.hpp"
#include "./utils/range.hpp"
#include "./utils/stride_iterator.hpp"
#include "./utils/for_each.hpp"
#include "./utils/buffered_allocator.hpp"
#include "./utils/debug.hpp"
#include "./utils/id.hpp"
#include "./utils/list.hpp"
#include "./backend/cuda.hpp"
#include "./backend/cblas.hpp"

Go to the source code of this file.

Classes

struct  ceras::tensor< T, Allocator >
 
struct  ceras::is_tensor< T >
 
struct  ceras::is_tensor< tensor< T, A > >
 
struct  ceras::view_1d< T >
 
struct  ceras::view_2d< T >
 
struct  ceras::view_3d< T >
 
struct  ceras::view_4d< T >
 
struct  ceras::view< T, 1 >
 
struct  ceras::view< T, 2 >
 
struct  ceras::view< T, 3 >
 
struct  ceras::view< T, 4 >
 
struct  ceras::view< T, N >
 N-Dimentional view of 1D memory. More...
 

Namespaces

 ceras
 

Typedefs

template<typename T >
using ceras::default_allocator = std::allocator< T >
 
template<typename T >
using ceras::array = view_1d< T >
 
template<typename T >
using ceras::matrix = view_2d< T >
 
template<typename T >
using ceras::cube = view_3d< T >
 
template<typename T >
using ceras::tesseract = view_4d< T >
 

Functions

template<typename T , typename A = default_allocator<T>>
constexpr tensor< T, A > ceras::as_tensor (T val) noexcept
 
template<Tensor Tsor, typename CharT , typename Traits >
std::basic_ostream< CharT, Traits > & ceras::operator<< (std::basic_ostream< CharT, Traits > &os_, Tsor const &tsor)
 
template<typename T >
requires std::floating_point< T > void ceras::gemm_cpu (T const *A, bool a_transposed, T const *B, bool b_transposed, unsigned long m, unsigned long n, unsigned long k, T *C)
 
void ceras::update_cuda_gemm_threshold ()
 
template<typename T >
requires std::floating_point< T > void ceras::gemm (T const *A, bool a_transposed, T const *B, bool b_transposed, unsigned long m, unsigned long n, unsigned long k, T *C)
 
template<typename T >
requires std::floating_point< T > void ceras::gemm (view_2d< T > const &x, view_2d< T > const &y, view_2d< T > &ans)
 
template<Tensor Tsor>
Tsor ceras::add (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator+ (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator+ (typename Tsor::value_type const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator+ (Tsor const &lhs, typename Tsor::value_type const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::minus (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator- (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator- (typename Tsor::value_type const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator- (Tsor const &lhs, typename Tsor::value_type const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator* (typename Tsor::value_type const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator* (Tsor const &lhs, typename Tsor::value_type const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator/ (Tsor const &lhs, typename Tsor::value_type const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::reshape (Tsor const &ts, std::vector< unsigned long > const &new_shape)
 
template<Tensor Tsor>
void ceras::multiply (Tsor const &lhs, Tsor const &rhs, Tsor &ans) noexcept
 
template<Tensor Tsor>
Tsor ceras::multiply (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::operator* (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::elementwise_product (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::hadamard_product (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::elementwise_divide (Tsor const &lhs, Tsor const &rhs) noexcept
 
template<Tensor Tsor>
Tsor ceras::repeat (Tsor const &tsor, unsigned long n)
 
template<Tensor Tsor>
Tsor ceras::reduce_sum (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::reduce_mean (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::clip (Tsor &tsor, typename Tsor::value_type lower=0, typename Tsor::value_type upper=1)
 
template<Tensor Tsor>
Tsor ceras::squeeze (Tsor const &tsor)
 
template<typename T , typename A = default_allocator<T>>
tensor< T, A > ceras::randn (std::vector< unsigned long > const &shape, T mean=T{0}, T stddev=T{1})
 
template<typename T , typename A = default_allocator<T>>
tensor< T, A > ceras::truncated_normal (std::vector< unsigned long > const &shape, T mean=T{0}, T stddev=T{1}, T lower=T{0}, T upper=T{1})
 
template<typename T , typename A = default_allocator<T>>
tensor< T, A > ceras::random (std::vector< unsigned long > const &shape, T min=T{0}, T max=T{1})
 
template<Tensor Tsor>
Tsor ceras::random_like (Tsor const &tsor, typename Tsor::value_type min=0, typename Tsor::value_type max=1)
 
template<Tensor Tsor>
Tsor ceras::randn_like (Tsor const &tsor, typename Tsor::value_type mean=0, typename Tsor::value_type stddev=1)
 
template<typename T , typename A = default_allocator<T>>
tensor< T, A > ceras::glorot_uniform (std::initializer_list< unsigned long > shape)
 
template<Tensor Tsor>
Tsor ceras::deep_copy (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::copy (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::concatenate (Tsor const &lhs, Tsor const &rhs, unsigned long axis=0) noexcept
 
template<Tensor Tsor>
Tsor ceras::repmat (Tsor const &tsor, unsigned long row_rep, unsigned long col_rep)
 
template<Tensor Tsor>
constexpr bool ceras::empty (Tsor const &tsor) noexcept
 
template<typename T , typename A = default_allocator<T>>
constexpr tensor< T, A > ceras::zeros (std::vector< unsigned long > const &shape)
 
template<Tensor Tsor>
constexpr Tsor ceras::zeros_like (Tsor const &tsor)
 
template<typename T , typename A = default_allocator<T>>
constexpr tensor< T, A > ceras::ones (std::vector< unsigned long > const &shape)
 
template<Tensor Tsor>
constexpr Tsor ceras::ones_like (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::max (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::amax (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::min (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::amin (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::sum (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::mean (Tsor const &tsor)
 
template<Tensor Tsor>
auto ceras::norm (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::abs (Tsor const &tsor)
 
template<Tensor Tsor>
Tsor ceras::softmax (Tsor const &tsor)
 
template<Tensor Tsor>
bool ceras::has_nan (Tsor const &tsor)
 
template<Tensor Tsor>
bool ceras::has_inf (Tsor const &tsor)
 
template<Tensor Tsor>
bool ceras::is_valid (Tsor const &tsor)
 
template<Tensor Tsor, typename Function >
Tsor ceras::reduce (Tsor const &ts, unsigned long axis, typename Tsor::value_type const &init, Function const &func, bool keepdims=false) noexcept
 
template<Tensor Tsor>
Tsor ceras::sum (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<Tensor Tsor>
requires std::floating_point< typename Tsor::value_type > Tsor ceras::mean (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<Tensor Tsor>
requires std::floating_point< typename Tsor::value_type > Tsor ceras::variance (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<Tensor Tsor>
requires std::floating_point< typename Tsor::value_type > Tsor ceras::standard_deviation (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<Tensor Tsor>
requires std::floating_point< typename Tsor::value_type > Tsor::value_type ceras::var (Tsor const &ts) noexcept
 
template<Tensor Tsor>
requires std::floating_point< typename Tsor::value_type > Tsor::value_type ceras::std (Tsor const &ts) noexcept
 
template<Tensor Tsor>
Tsor ceras::max (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<Tensor Tsor>
Tsor ceras::min (Tsor const &ts, unsigned long axis, bool keepdims=false) noexcept
 
template<typename T , typename A = default_allocator<T>>
requires std::floating_point< T > tensor< T, A > ceras::linspace (T start, T stop, unsigned long num, bool endpoint=true) noexcept
 
template<class _Tp , class _CharT , class _Traits , class _Alloc >
std::basic_istream< _CharT, _Traits > & ceras::read_tensor (std::basic_istream< _CharT, _Traits > &__is, tensor< _Tp, _Alloc > &__x)
 
template<class _Tp , class _CharT , class _Traits , class _Alloc >
std::basic_ostream< _CharT, _Traits > & ceras::write_tensor (std::basic_ostream< _CharT, _Traits > &__os, tensor< _Tp, _Alloc > const &__x)
 
template<typename T , typename A = default_allocator<T>>
tensor< T, A > ceras::load_tensor (std::string const &file_name)
 
template<Tensor Tsor>
void ceras::save_tensor (std::string const &file_name, Tsor const &tsor)
 

Variables

static unsigned long ceras::random_seed = std::chrono::system_clock::now().time_since_epoch().count()
 
static std::mt19937 ceras::random_generator {random_seed}
 
template<class T >
constexpr bool ceras::is_tensor_v = is_tensor<T>::value
 
template<typename T >
concept ceras::Tensor = is_tensor_v<T>