BlackCat_Tensors
A GPU-supported autograd and linear algebra library, designed for neural network construction
Public Types | Public Member Functions | List of all members
bc::nn::Convolution< SystemTag, ValueType, Optimizer > Struct Template Reference

#include <convolution.h>

Inheritance diagram for bc::nn::Convolution< SystemTag, ValueType, Optimizer >:
Inheritance graph
[legend]
Collaboration diagram for bc::nn::Convolution< SystemTag, ValueType, Optimizer >:
Collaboration graph
[legend]

Public Types

using system_tag = SystemTag
 
using value_type = ValueType
 
using allocator_type = nn_default_allocator_type< ValueType, SystemTag >
 
using optimizer_type = Optimizer
 
using self_type = Convolution< SystemTag, ValueType, Optimizer >
 
using input_descriptor_t = Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > >
 
using parent_type = Layer_Base< self_type, input_descriptor_t >
 
using input_tensor_dim = bc::traits::Integer< 3 >
 
using output_tensor_dim = bc::traits::Integer< 3 >
 
using greedy_evaluate_delta = std::true_type
 
using requires_extra_cache = std::true_type
 
using defines_single_predict = std::true_type
 
- Public Types inherited from bc::nn::Layer_Base< Convolution< SystemTag, ValueType, Optimizer >, Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
using value_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::value_type
 
using system_tag = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::system_tag
 
using allocator_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::allocator_type
 
using input_tensor_dim = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::tensor_dim
 
using shape_type = bc::Dim< input_tensor_dim::value >
 
using input_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::type
 
using batched_input_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::batched_type
 
using output_value_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::value_type
 
using output_system_tag = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::system_tag
 
using output_allocator_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::allocator_type
 
using output_tensor_dim = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::tensor_dim
 
using output_shape_type = bc::Dim< output_tensor_dim::value >
 
using output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::type
 
using batched_output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::batched_type
 
- Public Types inherited from bc::nn::Layer_Output_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
using output_value_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::value_type
 
using output_value_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::value_type
 
using output_system_tag = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::system_tag
 
using output_system_tag = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::system_tag
 
using output_allocator_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::allocator_type
 
using output_allocator_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::allocator_type
 
using output_tensor_dim = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::tensor_dim
 
using output_tensor_dim = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::tensor_dim
 
using output_shape_type = bc::Dim< output_tensor_dim::value >
 
using output_shape_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::shape_type
 
using output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::type
 
using output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::tensor_type
 
using batched_output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::batched_type
 
using batched_output_tensor_type = typename Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > ::batched_type
 
using next_layer_type = Layer_Input_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
 
using next_layer_type = Layer_Input_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
 

Public Member Functions

 Convolution (Dim< 3 > img_dims, Dim< 3 > krnl_dims, Dim< 2 > padding=Dim< 2 >().fill(0), Dim< 2 > strides=Dim< 2 >().fill(1), Dim< 2 > dilation=Dim< 2 >().fill(1))
 
template<class X >
auto forward_propagation (const X &x, Cache &cache)
 
template<class X >
auto single_predict (const X &x, Cache &cache)
 
template<class X , class Delta >
auto back_propagation (const X &x, const Delta &dy, Cache &cache)
 
Dim< 3 > get_batched_column_image_shape () const
 
Dim< 4 > get_kernel_shape () const
 
void update_weights ()
 
void set_learning_rate (value_type lr)
 
virtual void save (Layer_Loader &loader) const override
 
virtual void load (Layer_Loader &loader) override
 
auto & get_weights () const
 
auto & get_weights ()
 
- Public Member Functions inherited from bc::nn::Layer_Base< Convolution< SystemTag, ValueType, Optimizer >, Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
 Layer_Base (std::string classname, shape_type input_shape, output_shape_type output_shape)
 m_classname should be initialized by supplying __func__ to the first argument of the Layer_Base. More...
 
 Layer_Base (std::string classname, shape_type input_shape)
 
virtual ~Layer_Base ()
 
virtual output_shape_type get_output_shape () const
 
virtual shape_type get_input_shape () const
 
auto get_batched_input_shape () const
 
auto get_batched_output_shape () const
 
bc::size_t input_size () const
 
bc::size_t output_size () const
 
bc::size_t batch_size () const
 
bc::size_t batched_input_size () const
 
bc::size_t batched_output_size () const
 
void set_batch_size (int batch_size)
 
virtual void set_batch_size_hook (int batch_size)
 
void set_learning_rate (value_type learning_rate)
 
virtual void set_learning_rate_hook (value_type learning_rate)
 
auto get_learning_rate () const
 
auto get_batched_learning_rate () const
 
virtual void save_from_cache (Layer_Loader &, const Cache &) const
 
virtual void load_to_cache (Layer_Loader &, const Cache &)
 
void copy_training_data_to_single_predict (Cache &, int batch_index)
 
void update_weights ()
 
void clear_bp_storage (Cache &)
 
const std::string & classname () const
 Returns the derived_classes class namepse. More...
 
std::string get_string_architecture () const
 
virtual std::string get_string_architecture_hook () const
 
auto default_input_tensor_factory () const
 
auto default_output_tensor_factory () const
 
auto default_batched_input_tensor_factory () const
 
auto default_batched_output_tensor_factory () const
 
- Public Member Functions inherited from bc::nn::Layer_Input_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
void set_prev (prev_layer_type &prev)
 
void set_prev (prev_layer_type &prev)
 
input_shape_type input_shape () const
 
input_shape_type input_shape () const
 
const prev_layer_typeprev_layer () const
 
prev_layer_typeprev_layer ()
 
const prev_layer_typeprev_layer () const
 
prev_layer_typeprev_layer ()
 
virtual ~Layer_Input_Base ()
 
virtual ~Layer_Input_Base ()
 
- Public Member Functions inherited from bc::nn::Layer_Output_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
void set_next (next_layer_type &next)
 
void set_next (next_layer_type &next)
 
output_shape_type output_shape () const
 
output_shape_type output_shape () const
 
const next_layer_typenext_layer () const
 
next_layer_typenext_layer ()
 
const next_layer_typenext_layer () const
 
next_layer_typenext_layer ()
 
virtual ~Layer_Output_Base ()
 
virtual ~Layer_Output_Base ()
 

Additional Inherited Members

- Static Public Member Functions inherited from bc::nn::Layer_Base< Convolution< SystemTag, ValueType, Optimizer >, Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
static std::string parse_classname (std::string classname)
 
- Static Public Attributes inherited from bc::nn::Layer_Base< Convolution< SystemTag, ValueType, Optimizer >, Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
static constexpr value_type default_learning_rate
 
- Protected Attributes inherited from bc::nn::Layer_Base< Convolution< SystemTag, ValueType, Optimizer >, Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
shape_type m_input_shape
 
output_shape_type m_output_shape
 
- Protected Attributes inherited from bc::nn::Layer_Input_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
prev_layer_typem_prev_layer
 
input_shape_type m_input_shape
 
- Protected Attributes inherited from bc::nn::Layer_Output_Base< Tensor_Descriptor< ValueType, SystemTag, bc::traits::Integer< 3 > > >
next_layer_typem_next_layer
 
bc::Dim< output_tensor_dim::value > m_output_shape
 

Member Typedef Documentation

◆ allocator_type

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::allocator_type = nn_default_allocator_type<ValueType, SystemTag>

◆ defines_single_predict

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::defines_single_predict = std::true_type

◆ greedy_evaluate_delta

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::greedy_evaluate_delta = std::true_type

◆ input_descriptor_t

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::input_descriptor_t = Tensor_Descriptor<ValueType, SystemTag, bc::traits::Integer<3> >

◆ input_tensor_dim

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::input_tensor_dim = bc::traits::Integer<3>

◆ optimizer_type

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::optimizer_type = Optimizer

◆ output_tensor_dim

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::output_tensor_dim = bc::traits::Integer<3>

◆ parent_type

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::parent_type = Layer_Base<self_type, input_descriptor_t>

◆ requires_extra_cache

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::requires_extra_cache = std::true_type

◆ self_type

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::self_type = Convolution<SystemTag, ValueType, Optimizer>

◆ system_tag

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::system_tag = SystemTag

◆ value_type

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
using bc::nn::Convolution< SystemTag, ValueType, Optimizer >::value_type = ValueType

Constructor & Destructor Documentation

◆ Convolution()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
bc::nn::Convolution< SystemTag, ValueType, Optimizer >::Convolution ( Dim< 3 >  img_dims,
Dim< 3 >  krnl_dims,
Dim< 2 >  padding = Dim<2>().fill(0),
Dim< 2 >  strides = Dim<2>().fill(1),
Dim< 2 >  dilation = Dim<2>().fill(1) 
)
inline

Member Function Documentation

◆ back_propagation()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
template<class X , class Delta >
auto bc::nn::Convolution< SystemTag, ValueType, Optimizer >::back_propagation ( const X &  x,
const Delta &  dy,
Cache cache 
)
inline

◆ forward_propagation()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
template<class X >
auto bc::nn::Convolution< SystemTag, ValueType, Optimizer >::forward_propagation ( const X &  x,
Cache cache 
)
inline

◆ get_batched_column_image_shape()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
Dim<3> bc::nn::Convolution< SystemTag, ValueType, Optimizer >::get_batched_column_image_shape ( ) const
inline

◆ get_kernel_shape()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
Dim<4> bc::nn::Convolution< SystemTag, ValueType, Optimizer >::get_kernel_shape ( ) const
inline

◆ get_weights() [1/2]

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
auto& bc::nn::Convolution< SystemTag, ValueType, Optimizer >::get_weights ( ) const
inline

◆ get_weights() [2/2]

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
auto& bc::nn::Convolution< SystemTag, ValueType, Optimizer >::get_weights ( )
inline

◆ load()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
virtual void bc::nn::Convolution< SystemTag, ValueType, Optimizer >::load ( Layer_Loader loader)
inlineoverridevirtual

◆ save()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
virtual void bc::nn::Convolution< SystemTag, ValueType, Optimizer >::save ( Layer_Loader loader) const
inlineoverridevirtual

◆ set_learning_rate()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
void bc::nn::Convolution< SystemTag, ValueType, Optimizer >::set_learning_rate ( value_type  lr)
inline

◆ single_predict()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
template<class X >
auto bc::nn::Convolution< SystemTag, ValueType, Optimizer >::single_predict ( const X &  x,
Cache cache 
)
inline

◆ update_weights()

template<class SystemTag , class ValueType , class Optimizer = Stochastic_Gradient_Descent>
void bc::nn::Convolution< SystemTag, ValueType, Optimizer >::update_weights ( )
inline

The documentation for this struct was generated from the following file: