4#include "dcnncombined.hpp"
8 using dcnnasgn::permutation_policy_tag;
10 using dcnnasgn::kernel_height_selector;
11 using dcnnasgn::kernel_width_selector;
12 using dcnnasgn::channel_selector;
13 using dcnnasgn::batch_tag;
14 using dcnnasgn::height_selector;
15 using dcnnasgn::width_selector;
16 using dcnnasgn::conv_weight_policy;
17 using dcnnasgn::feature_weight_policy;
19 using dcnnasgn::nonstrided_conv_layer_base;
20 using dcnnasgn::strided_conv_layer_base;
21 using dcnnasgn::image_transformed_relu_layer_base;
22 using dcnnasgn::image_maxpool_layer_base;
23 using dcnnasgn::final_maxpool_layer_base;
24 using dcnnasgn::feature_conv_layer_base;
25 using dcnnasgn::feature_shift_layer_base;
26 using dcnnasgn::image_data_policy;
27 using dcnnasgn::feature_data_policy;
28 using dcnnasgn::feature_bias_policy;
30 using tagged::tag_list;
32 using tagged::tensor_class;
91 template<
typename SP>
113 template<
typename CSP>
132 template<
typename KSP,
typename CSPI,
typename CSPO>
142 :
weights(policy::khr& policy::kwr & ~policy::cir& policy::cor)
153 template<
typename CSPI,
typename CSPO>
163 :
weights(~policy::cir& policy::cor)
174 template<
typename CSP>
178 feature_bias() : betas(policy::cr) {}
179 policy::bias_t betas;
200 template<
typename SPI,
typename SPO,
typename KSP>
240 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
242 auto&& weights = wtd.weights;
244 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname +
".bin"));
253 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
255 auto br = forward_check(ind, wtd, outd);
257 auto&& inv = ind.values;
258 auto&& wtv = wtd.weights;
259 auto&& outv = outd.values;
261 for (
auto x : outv.range())
268 auto&& outvb = outv[b];
269 auto&& invb = inv[b];
273 auto hor2 = hkorf(kh);
274 auto hoid = hkoimf(kh);
278 auto wor2 = wkorf(kw);
279 auto woid = wkoimf(kw);
281 auto&& wtvk = wtv[kh & kw];
287 auto&& outvbh = outvb[ho];
288 auto&& invbh = invb[hi];
294 auto&& outvbhw = outvbh[wo];
295 auto&& invbhw = invbh[wi];
299 auto&& wtwki = wtvk[~ci];
301 float val_inv = invbhw[ci];
304 outvbhw[
co] += wtwki[
co] * val_inv;
323 template<
typename SPI,
typename SPO,
typename KSP>
363 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
365 auto&& weights = wtd.weights;
367 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname +
".bin"));
376 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
378 auto br = forward_check(ind, wtd, outd);
380 auto&& inv = ind.values;
381 auto&& wtv = wtd.weights;
382 auto&& outv = outd.values;
384 for (
auto x : outv.range())
391 auto&& outvb = outv[b];
392 auto&& invb = inv[b];
396 auto hor2 = hkorf(kh);
397 auto hoid = hkoimf(kh);
401 auto wor2 = wkorf(kw);
402 auto woid = wkoimf(kw);
404 auto&& wtvk = wtv[kh & kw];
410 auto&& outvbh = outvb[ho];
411 auto&& invbh = invb[hi];
417 auto&& outvbhw = outvbh[wo];
418 auto&& invbhw = invbh[wi];
422 auto&& wtwki = wtvk[~ci];
424 float val_inv = invbhw[ci];
427 outvbhw[
co] += wtwki[
co] * val_inv;
444 template<
typename SP>
461 using self_::forward_check;
465 static void load_model(model_data& md,
const std::filesystem::path& data_folder,
const std::string& fname_bias1,
const std::string& fname_mean,
const std::string& fname_var,
const std::string& fname_weight,
const std::string& fname_bias2)
473 load_data_raw<dcnnasgn::feature_ftl>(betas1, data_folder / (fname_bias1 +
".bin"));
474 load_data_raw<dcnnasgn::feature_ftl>(Es, data_folder / (fname_mean +
".bin"));
475 load_data_raw<dcnnasgn::feature_ftl>(vars, data_folder / (fname_var +
".bin"));
476 load_data_raw<dcnnasgn::feature_ftl>(multipliers, data_folder / (fname_weight +
".bin"));
477 load_data_raw<dcnnasgn::feature_ftl>(betas2, data_folder / (fname_bias2 +
".bin"));
479 auto&& scalev = md.scales;
480 auto&& betav = md.betas;
483 auto beta1 = betas1[c];
486 auto multiplier = multipliers[c];
487 auto beta2 = betas2[c];
488 auto scale = multiplier / std::sqrt(var);
490 betav[c] = scale * (beta1 - E) + beta2;
500 static void forward(
const input_data& ind,
const model_data& md, output_data& outd)
502 auto br = forward_check(ind, md, outd);
504 auto&& inv = ind.values;
505 auto&& scalev = md.scales;
506 auto&& betav = md.betas;
507 auto&& outv = outd.values;
509 forward_core(br, inv, scalev, betav, outv);
512 static void forward_core(
auto br,
auto&& inv,
auto&& scalev,
auto&& betav,
auto&& outv)
516 auto&& invb = inv[b];
517 auto&& outvb = outv[b];
520 auto&& invbh = invb[h];
521 auto&& outvbh = outvb[h];
524 auto&& invbhw = invbh[w];
525 auto&& outvbhw = outvbh[w];
528 auto val1 = invbhw[c] * scalev[c];
529 auto val2 = val1 + betav[c];
530 outvbhw[c] = std::max(0.0f, val2);
543 template<
typename SPI,
typename SPO>
550 using typename base_::input_data;
551 using typename base_::output_data;
553 using typename base_::height_out_tag;
554 using typename base_::width_out_tag;
555 using typename base_::channel_tag;
570 using base_::forward_check;
577 static void forward(
const input_data& ind, output_data& outd)
579 auto br = forward_check(ind, outd);
581 auto&& inv = ind.values;
582 auto&& outv = outd.values;
586 auto&& outvb = outv[b];
589 auto&& outvbh = outvb[ho];
592 auto&& outvbhw = outvbh[wo];
595 outvbhw[c] = -std::numeric_limits<float>::infinity();
603 auto&& invb = inv[b];
604 auto&& outvb = outv[b];
607 auto hoid = hkoimf(kh);
610 auto woid = wkoimf(kw);
613 auto&& outvbh = outvb[ho];
615 auto&& invbh = invb[hi];
618 auto&& outvbhw = outvbh[wo];
620 auto&& invbhw = invbh[wi];
623 outvbhw[c] = std::max(outvbhw[c], invbhw[c]);
638 template<
typename SPI,
typename CSPO>
663 static void forward(
const input_data& ind, output_data& outd)
665 auto br = forward_check(ind, outd);
667 auto&& inv = ind.values;
668 auto&& outv = outd.values;
672 auto&& outvb = outv[b];
675 outvb[c] = -std::numeric_limits<float>::infinity();
681 auto&& invb = inv[b];
682 auto&& outvb = outv[b];
685 auto&& invbh = invb[hi];
688 auto&& invbhw = invbh[wi];
691 outvb[c] = std::max(outvb[c], invbhw[c]);
707 template<
typename CSPI,
typename CSPO>
726 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
728 auto&& weights = wtd.weights;
730 load_data_raw<dcnnasgn::feature_conv_ftl>(weights, data_folder / (fname +
".bin"));
739 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
741 auto br = forward_check(ind, wtd, outd);
743 auto&& inv = ind.values;
744 auto&& wtv = wtd.weights;
745 auto&& outv = outd.values;
759 auto wt = wtv[~ci &
co];
762 outv[
co & b] += wt * inv[ci & b];
775 template<
typename CSP>
782 using typename base_::input_data;
783 using typename base_::bias_data;
784 using typename base_::output_data;
788 using base_::forward_check;
791 static void load_model(bias_data& cd,
const std::filesystem::path& data_folder,
const std::string& fname)
793 load_data_raw<dcnnasgn::feature_ftl>(cd.betas, data_folder / (fname +
".bin"));
802 static void forward(
const input_data& ind,
const bias_data& cd, output_data& outd)
804 auto br = forward_check(ind, cd, outd);
806 auto&& inv = ind.values;
807 auto&& betav = cd.betas;
808 auto&& outv = outd.values;
812 auto beta = betav[c];
815 outv[c & b] = inv[c & b] + beta;
830 template<
typename CSPI,
typename CSPO,
typename KSP>
833 using model_c = dcnnsol::conv_weights< KSP, CSPI, CSPO, permutation_policy>;
834 using model_r = dcnnasgn::image_transformed_relu_model< CSPO>;
843 template<
typename SPI,
typename SPO>
846 using CSPI =
typename SPI::channel_policy;
847 using CSPO =
typename SPO::channel_policy;
849 using data_c = dcnnsol::image_data< SPO, permutation_policy>;
864 template<
typename SPI,
typename SPO,
typename KSP>
867 using CSPI =
typename SPI::channel_policy;
868 using CSPO =
typename SPO::channel_policy;
870 static constexpr bool nonstrided = tagged::same_tag< typename SPI::height_tag, typename SPO::height_tag>
871 && tagged::same_tag< typename SPI::width_tag, typename SPO::width_tag>;
873 using layer_c = std::conditional_t< nonstrided,
874 dcnnsol::nonstrided_conv_layer< SPI, SPO, KSP, permutation_policy>,
875 dcnnsol::strided_conv_layer< SPI, SPO, KSP, permutation_policy>>;
876 using layer_r = dcnnsol::image_transformed_relu_layer< SPO, permutation_policy>;
878 using internal_data = complete_cnn_internal< SPI, SPO, permutation_policy>;
880 using input_data = dcnnsol::image_data< SPI, permutation_policy>;
881 using model = complete_cnn_model< CSPI, CSPO, KSP, permutation_policy>;
882 using output_data = dcnnsol::image_data< SPO, permutation_policy>;
884 static void load_model(model& md,
const std::filesystem::path& data_folder,
int feature_number)
886 auto conv_name =
"features." + std::to_string(feature_number);
887 auto norm_name =
"features." + std::to_string(feature_number + 1);
889 layer_c::load_model(md.c, data_folder, conv_name +
".weight");
890 layer_r::load_model(md.r, data_folder, conv_name +
".bias", norm_name +
".running_mean", norm_name +
".running_var", norm_name +
".weight", norm_name +
".bias");
893 static void forward(
const input_data& ind,
const model& md, internal_data& td, output_data& outd)
895 layer_c::forward(ind, md.c, td.c);
896 layer_r::forward(td.c, md.r, outd);
900 static std::size_t forward_complexity(
const batch_range& br)
903 s += layer_c::forward_complexity(br);
904 s += layer_r::forward_complexity(br);
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:139
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:121
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:160
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:101
A tensor - a multi-dimensional tagged generalization of vector/matrix.
Definition tagged.hpp:1617
tagged::range_class< batch_tag > batch_range
The range of images within a minibatch.
Definition dcnnelements.hpp:91
retag< typename impl::co_traits< selector< T > >::co, T > co
Provide a co-tag for a given tag.
Definition tagged.hpp:1911
Tag: Channel dimension.
Definition dcnnelements.hpp:157
Policy class: Model weight data types for convolutional layers.
Definition dcnnelements.hpp:698
tagged::permute_tensor_class< typename PP::weights, float, kernel_height_tag, kernel_width_tag, tagged::co< channel_in_tag >, channel_out_tag > weights_t
The tensor containing the weights of the convolution.
Definition dcnnelements.hpp:723
Definition dcnnelements.hpp:1392
Utility base class for the fully connected layer.
Definition dcnnelements.hpp:1647
dcnnsol::feature_weights< CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1659
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1687
static constexpr auto cor
Output feature channel range.
Definition dcnnelements.hpp:1683
dcnnsol::feature_data< CSPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1655
static constexpr auto cir
Input feature channel range.
Definition dcnnelements.hpp:1682
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1699
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1663
Final layer activation data policy.
Definition dcnnelements.hpp:388
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:394
tagged::permute_tensor_class< typename PP::feature_data, float, channel_tag, batch_tag > values_t
2-dimensional tensor type carrying activations
Definition dcnnelements.hpp:401
Definition dcnnelements.hpp:1732
Policy class: Model weight data types for fully connected layers.
Definition dcnnelements.hpp:736
tagged::permute_tensor_class< typename PP::feature_weights, float, tagged::co< channel_in_tag >, channel_out_tag > weights_t
The tensor containing the weights of the convolution.
Definition dcnnelements.hpp:759
Definition dcnnelements.hpp:1510
static constexpr auto cr
Input image channel range.
Definition dcnnelements.hpp:1547
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1526
static tagged::range_class< batch_tag > forward_check(const input_data &ind, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1563
typename SPI::width_tag width_in_tag
Input image width.
Definition dcnnelements.hpp:1534
typename SPI::height_tag height_in_tag
Input image height.
Definition dcnnelements.hpp:1533
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1545
typename SPI::channel_tag channel_tag
Input image channel.
Definition dcnnelements.hpp:1535
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1546
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1522
Internal layer activation data policy.
Definition dcnnelements.hpp:339
tagged::permute_tensor_class< typename PP::data, float, height_tag, width_tag, channel_tag, batch_tag > values_t
4-dimensional tensor type carrying activations
Definition dcnnelements.hpp:371
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:364
static constexpr auto hr
Image height range, statically sized.
Definition dcnnelements.hpp:356
static constexpr auto wr
Image width range, statically sized.
Definition dcnnelements.hpp:360
Definition dcnnelements.hpp:1440
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:935
static constexpr conv_iko_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), 1 > hikomf
input-height index to kernel-height index to output-height index
Definition dcnnelements.hpp:1030
static constexpr conv_ok_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), 1 > hokrf
output-height index to kernel-height range
Definition dcnnelements.hpp:1024
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:946
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:989
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:982
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:983
static constexpr conv_koi_map_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, tagged::selector< width_in_tag >, kwr.size(), 1 > wkoimf
kernel-width index to output-width index to input-width index
Definition dcnnelements.hpp:1037
static constexpr conv_koi_map_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, tagged::selector< height_in_tag >, khr.size(), 1 > hkoimf
kernel-height index to output-height index to input-height index
Definition dcnnelements.hpp:1035
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:984
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:985
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:954
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1051
static constexpr conv_ko_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), 1 > hkorf
kernel-height index to output-height range
Definition dcnnelements.hpp:1034
static constexpr conv_oki_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), 1 > wokimf
output-width index to kernel-width index to input-width index
Definition dcnnelements.hpp:1027
static constexpr conv_ik_range_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, wir.size(), kwr.size(), 1 > wikrf
input-width index to kernel-width range
Definition dcnnelements.hpp:1031
static constexpr conv_ko_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), 1 > wkorf
kernel-width index to output-width range
Definition dcnnelements.hpp:1036
static constexpr conv_oki_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), 1 > hokimf
output-height index to kernel-height index to input-height index
Definition dcnnelements.hpp:1025
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:986
static constexpr conv_iko_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), 1 > wikomf
input-width index to kernel-width index to output-width index
Definition dcnnelements.hpp:1032
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:993
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:950
static constexpr conv_ok_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), 1 > wokrf
output-width index to kernel-width range
Definition dcnnelements.hpp:1026
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:987
static constexpr conv_ik_range_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, hir.size(), khr.size(), 1 > hikrf
input-height index to kernel-height range
Definition dcnnelements.hpp:1029
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:988
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:1099
static constexpr conv_iko_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), WSTRIDE > wikomf
input-width index to kernel-width index to output-width index
Definition dcnnelements.hpp:1206
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const weights &wtd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1225
static constexpr conv_oki_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), HSTRIDE > hokimf
output-height index to kernel-height index to input-height index
Definition dcnnelements.hpp:1199
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1110
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:1149
static constexpr conv_oki_map_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, kwr.size(), WSTRIDE > wokimf
output-width index to kernel-width index to input-width index
Definition dcnnelements.hpp:1201
static constexpr conv_koi_map_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, tagged::selector< height_in_tag >, khr.size(), HSTRIDE > hkoimf
kernel-height index to output-height index to input-height index
Definition dcnnelements.hpp:1209
static constexpr conv_ko_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), WSTRIDE > wkorf
kernel-width index to output-width range
Definition dcnnelements.hpp:1210
static constexpr conv_ik_range_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, hir.size(), khr.size(), HSTRIDE > hikrf
input-height index to kernel-height range
Definition dcnnelements.hpp:1203
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:1148
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1118
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1144
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1143
static constexpr conv_ko_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), HSTRIDE > hkorf
kernel-height index to output-height range
Definition dcnnelements.hpp:1208
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:1147
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:1146
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:1150
static constexpr conv_koi_map_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, tagged::selector< width_in_tag >, kwr.size(), WSTRIDE > wkoimf
kernel-width index to output-width index to input-width index
Definition dcnnelements.hpp:1211
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:1145
static constexpr conv_ik_range_functor< tagged::selector< width_in_tag >, tagged::selector< kernel_width_tag >, wir.size(), kwr.size(), WSTRIDE > wikrf
input-width index to kernel-width range
Definition dcnnelements.hpp:1205
static constexpr conv_ok_range_functor< tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, hir.size(), khr.size(), HSTRIDE > hokrf
output-height index to kernel-height range
Definition dcnnelements.hpp:1198
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1114
static constexpr conv_iko_map_functor< tagged::selector< height_in_tag >, tagged::selector< kernel_height_tag >, tagged::selector< height_out_tag >, khr.size(), HSTRIDE > hikomf
input-height index to kernel-height index to output-height index
Definition dcnnelements.hpp:1204
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1154
static constexpr conv_ok_range_functor< tagged::selector< kernel_width_tag >, tagged::selector< width_out_tag >, wir.size(), kwr.size(), WSTRIDE > wokrf
output-width index to kernel-width range
Definition dcnnelements.hpp:1200
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of an aggregate layer.
Definition dcnnsol.hpp:739
static void forward(const input_data &ind, const bias_data &cd, output_data &outd)
The forward-propagation function of a linear layer.
Definition dcnnsol.hpp:802
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:663
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:577
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:253
Policy class defining the layout of all major data.
Definition dcnnsol.hpp:48
tagged::tag_list< batch_tag, channel_selector > feature_data
The index order for activation signals (feature_data::values) generated by the Aggregate layer.
Definition dcnnsol.hpp:67
tagged::tag_list< tagged::co< channel_selector >, channel_selector > feature_weights
The index order for fully connected layer weights (conv_weights::weights)
Definition dcnnsol.hpp:58
tagged::tag_list< kernel_height_selector, kernel_width_selector, tagged::co< channel_selector >, channel_selector > weights
The index order for Convolution and Aggregate layer weights (conv_weights::weights)
Definition dcnnsol.hpp:53
tagged::tag_list< batch_tag, height_selector, width_selector, channel_selector > data
The index order for forward activation signals (image_data::values) between all layers except the fir...
Definition dcnnsol.hpp:63
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:376
A wrapped list of tags.
Definition tagged.hpp:228