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::first_normalize_layer_base;
20 using dcnnasgn::nonstrided_conv_layer_base;
21 using dcnnasgn::strided_conv_layer_base;
22 using dcnnasgn::image_normalize_layer_base;
23 using dcnnasgn::image_multiply_layer_base;
24 using dcnnasgn::image_shift_layer_base;
25 using dcnnasgn::image_relu_layer_base;
26 using dcnnasgn::image_maxpool_layer_base;
27 using dcnnasgn::final_maxpool_layer_base;
28 using dcnnasgn::feature_conv_layer_base;
29 using dcnnasgn::feature_shift_layer_base;
30 using dcnnasgn::loss_layer_base;
31 using dcnnasgn::gold_data;
32 using dcnnasgn::image_data_policy;
33 using dcnnasgn::feature_data_policy;
34 using dcnnasgn::feature_multiplier_policy;
35 using dcnnasgn::feature_bias_policy;
37 using tagged::tag_list;
39 using tagged::tensor_class;
98 template<
typename SP>
120 template<
typename CSP>
139 template<
typename KSP,
typename CSPI,
typename CSPO>
149 :
weights(policy::khr& policy::kwr & ~policy::cir& policy::cor)
160 template<
typename CSPI,
typename CSPO>
170 :
weights(~policy::cir& policy::cor)
181 template<
typename CSP>
185 feature_multiplier() : multipliers(policy::cr) {}
186 policy::multiplier_t multipliers;
195 template<
typename CSP>
199 feature_bias() : betas(policy::cr) {}
200 policy::bias_t betas;
220 template<
typename SP>
243 static void forward(
const input_data& ind, stat_data& cd, output_data& outd)
245 auto br = forward_check(ind, cd, outd);
247 auto&& inv = ind.images;
248 auto&& sumx = cd.sumx;
249 auto&& sumx2 = cd.sumx2;
252 auto&& scale = cd.scale;
253 auto&& outv = outd.values;
266 float value = inv[b & h & w & c];
268 sumx2 += value * value;
274 std::uint64_t n = hr.size() * wr.size() * br.size() * cr.size();
275 E = (float)((
double)sumx / n);
276 var = (float)(((
double)sumx2 - (
double)sumx * E) / n);
277 scale = 1.0f / std::sqrt(var);
287 outv[h & w & c & b] = scale * (inv[b & h & w & c] - E);
303 template<
typename SPI,
typename SPO,
typename KSP>
343 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
345 auto&& weights = wtd.weights;
347 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname +
".bin"));
356 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
358 auto br = forward_check(ind, wtd, outd);
360 auto&& inv = ind.values;
361 auto&& wtv = wtd.weights;
362 auto&& outv = outd.values;
364 for (
auto x : outv.range())
371 auto&& outvb = outv[b];
372 auto&& invb = inv[b];
376 auto hor2 = hkorf(kh);
377 auto hoid = hkoimf(kh);
381 auto wor2 = wkorf(kw);
382 auto woid = wkoimf(kw);
384 auto&& wtvk = wtv[kh & kw];
390 auto&& outvbh = outvb[ho];
391 auto&& invbh = invb[hi];
397 auto&& outvbhw = outvbh[wo];
398 auto&& invbhw = invbh[wi];
402 auto&& wtwki = wtvk[~ci];
404 float val_inv = invbhw[ci];
407 outvbhw[
co] += wtwki[
co] * val_inv;
426 template<
typename SPI,
typename SPO,
typename KSP>
466 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
468 auto&& weights = wtd.weights;
470 load_data_raw<dcnnasgn::image_conv_ftl>(weights, data_folder / (fname +
".bin"));
479 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
481 auto br = forward_check(ind, wtd, outd);
483 auto&& inv = ind.values;
484 auto&& wtv = wtd.weights;
485 auto&& outv = outd.values;
487 for (
auto x : outv.range())
494 auto&& outvb = outv[b];
495 auto&& invb = inv[b];
499 auto hor2 = hkorf(kh);
500 auto hoid = hkoimf(kh);
504 auto wor2 = wkorf(kw);
505 auto woid = wkoimf(kw);
507 auto&& wtvk = wtv[kh & kw];
513 auto&& outvbh = outvb[ho];
514 auto&& invbh = invb[hi];
520 auto&& outvbhw = outvbh[wo];
521 auto&& invbhw = invbh[wi];
525 auto&& wtwki = wtvk[~ci];
527 float val_inv = invbhw[ci];
530 outvbhw[
co] += wtwki[
co] * val_inv;
547 template<
typename SP>
564 using self_::forward_check;
568 static void load_model(norm_data& nd,
const std::filesystem::path& data_folder,
const std::string& fname_mean,
const std::string& fname_var)
570 load_data_raw<dcnnasgn::feature_ftl>(nd.Es, data_folder / (fname_mean +
".bin"));
572 auto&& scalev = nd.scales;
574 load_data_raw<dcnnasgn::feature_ftl>(vars, data_folder / (fname_var +
".bin"));
578 scalev[c] = 1.0f / std::sqrt(var);
588 static void forward(
const input_data& ind,
const norm_data& nd, output_data& outd)
590 auto br = forward_check(ind, nd, outd);
592 auto&& inv = ind.values;
594 auto&& scalev = nd.scales;
595 auto&& outv = outd.values;
597 forward_core(br, inv, Ev, scalev, outv);
600 static void forward_core(
auto br,
auto&& inv,
auto&& Ev,
auto&& scalev,
auto&& outv)
604 auto&& invb = inv[b];
605 auto&& outvb = outv[b];
608 auto&& invbh = invb[h];
609 auto&& outvbh = outvb[h];
612 auto&& invbhw = invbh[w];
613 auto&& outvbhw = outvbh[w];
616 outvbhw[c] = scalev[c] * (invbhw[c] - Ev[c]);
632 template<
typename SP>
650 static void load_model(multiplier_data& cd,
const std::filesystem::path& data_folder,
const std::string& fname)
652 load_data_raw<dcnnasgn::feature_ftl>(cd.multipliers, data_folder / (fname +
".bin"));
661 static void forward(
const input_data& ind,
const multiplier_data& cd, output_data& outd)
663 auto br = forward_check(ind, cd, outd);
665 auto&& inv = ind.values;
666 auto&& multiplierv = cd.multipliers;
667 auto&& outv = outd.values;
671 auto&& invb = inv[b];
672 auto&& outvb = outv[b];
675 auto&& invbh = invb[h];
676 auto&& outvbh = outvb[h];
679 auto&& invbhw = invbh[w];
680 auto&& outvbhw = outvbh[w];
683 outvbhw[c] = invbhw[c] * multiplierv[c];
697 template<
typename SP>
715 static void load_model(bias_data& cd,
const std::filesystem::path& data_folder,
const std::string& fname)
717 load_data_raw<dcnnasgn::feature_ftl>(cd.betas, data_folder / (fname +
".bin"));
726 static void forward(
const input_data& ind,
const bias_data& cd, output_data& outd)
728 auto br = forward_check(ind, cd, outd);
730 auto&& inv = ind.values;
731 auto&& betav = cd.betas;
732 auto&& outv = outd.values;
736 auto&& invb = inv[b];
737 auto&& outvb = outv[b];
740 auto&& invbh = invb[h];
741 auto&& outvbh = outvb[h];
744 auto&& invbhw = invbh[w];
745 auto&& outvbhw = outvbh[w];
748 outvbhw[c] = invbhw[c] + betav[c];
760 template<
typename SP>
767 using typename base_::input_data;
768 using typename base_::output_data;
774 using base_::forward_check;
782 static void forward(
const input_data& ind, output_data& outd)
784 auto br = forward_check(ind, outd);
786 auto&& inv = ind.values;
787 auto&& outv = outd.values;
791 auto&& invb = inv[b];
792 auto&& outvb = outv[b];
795 auto&& invbh = invb[h];
796 auto&& outvbh = outvb[h];
799 auto&& invbhw = invbh[w];
800 auto&& outvbhw = outvbh[w];
803 outvbhw[c] = std::max(0.0f, invbhw[c]);
816 template<
typename SPI,
typename SPO>
823 using typename base_::input_data;
824 using typename base_::output_data;
826 using typename base_::height_out_tag;
827 using typename base_::width_out_tag;
828 using typename base_::channel_tag;
843 using base_::forward_check;
850 static void forward(
const input_data& ind, output_data& outd)
852 auto br = forward_check(ind, outd);
854 auto&& inv = ind.values;
855 auto&& outv = outd.values;
859 auto&& outvb = outv[b];
862 auto&& outvbh = outvb[ho];
865 auto&& outvbhw = outvbh[wo];
868 outvbhw[c] = -std::numeric_limits<float>::infinity();
876 auto&& invb = inv[b];
877 auto&& outvb = outv[b];
880 auto hoid = hkoimf(kh);
883 auto woid = wkoimf(kw);
886 auto&& outvbh = outvb[ho];
888 auto&& invbh = invb[hi];
891 auto&& outvbhw = outvbh[wo];
893 auto&& invbhw = invbh[wi];
896 outvbhw[c] = std::max(outvbhw[c], invbhw[c]);
911 template<
typename SPI,
typename CSPO>
936 static void forward(
const input_data& ind, output_data& outd)
938 auto br = forward_check(ind, outd);
940 auto&& inv = ind.values;
941 auto&& outv = outd.values;
945 auto&& outvb = outv[b];
948 outvb[c] = -std::numeric_limits<float>::infinity();
954 auto&& invb = inv[b];
955 auto&& outvb = outv[b];
958 auto&& invbh = invb[hi];
961 auto&& invbhw = invbh[wi];
964 outvb[c] = std::max(outvb[c], invbhw[c]);
980 template<
typename CSPI,
typename CSPO>
999 static void load_model(weights& wtd,
const std::filesystem::path& data_folder,
const std::string& fname)
1001 auto&& weights = wtd.weights;
1003 load_data_raw<dcnnasgn::feature_conv_ftl>(weights, data_folder / (fname +
".bin"));
1012 static void forward(
const input_data& ind,
const weights& wtd, output_data& outd)
1014 auto br = forward_check(ind, wtd, outd);
1016 auto&& inv = ind.values;
1017 auto&& wtv = wtd.weights;
1018 auto&& outv = outd.values;
1024 outv[
co & b] = 0.0f;
1032 auto wt = wtv[~ci &
co];
1035 outv[
co & b] += wt * inv[ci & b];
1048 template<
typename CSP>
1055 using typename base_::input_data;
1056 using typename base_::bias_data;
1057 using typename base_::output_data;
1061 using base_::forward_check;
1064 static void load_model(bias_data& cd,
const std::filesystem::path& data_folder,
const std::string& fname)
1066 load_data_raw<dcnnasgn::feature_ftl>(cd.betas, data_folder / (fname +
".bin"));
1075 static void forward(
const input_data& ind,
const bias_data& cd, output_data& outd)
1077 auto br = forward_check(ind, cd, outd);
1079 auto&& inv = ind.values;
1080 auto&& betav = cd.betas;
1081 auto&& outv = outd.values;
1085 auto beta = betav[c];
1088 outv[c & b] = inv[c & b] + beta;
1100 template<
typename CSP>
1107 using typename base_::input_data;
1108 using typename base_::output_data;
1112 using base_::forward_check;
1120 static void forward(
const input_data& ind,
const gold_data& gd, output_data& outd)
1122 auto br = forward_check(ind, gd, outd);
1124 auto&& inv = ind.values;
1125 auto&& labelv = gd.labels;
1126 auto&& outv = outd.loss;
1130 auto label = labelv[b];
1134 auto value = inv[c & b];
1135 auto expected = c.value() == label ? 1.0f : 0.0f;
1136 auto diff = value - expected;
1137 loss += diff * diff;
1152 template<
typename CSPI,
typename CSPO,
typename KSP>
1155 using model_c = dcnnsol::conv_weights< KSP, CSPI, CSPO, permutation_policy>;
1156 using model_b = dcnnsol::feature_bias< CSPO, permutation_policy>;
1157 using model_n = dcnnasgn::image_normalize_model< CSPO>;
1158 using model_m = dcnnsol::feature_multiplier< CSPO, permutation_policy>;
1159 using model_s = dcnnsol::feature_bias< CSPO, permutation_policy>;
1171 template<
typename SPI,
typename SPO>
1174 using CSPI =
typename SPI::channel_policy;
1175 using CSPO =
typename SPO::channel_policy;
1177 using data_c = dcnnsol::image_data< SPO, permutation_policy>;
1178 using data_b = dcnnsol::image_data< SPO, permutation_policy>;
1179 using data_n = dcnnsol::image_data< SPO, permutation_policy>;
1180 using data_m = dcnnsol::image_data< SPO, permutation_policy>;
1181 using data_s = dcnnsol::image_data< SPO, permutation_policy>;
1190 : c(nr), b(nr), n(nr), m(nr), s(nr)
1200 template<
typename SPI,
typename SPO,
typename KSP>
1203 using CSPI =
typename SPI::channel_policy;
1204 using CSPO =
typename SPO::channel_policy;
1206 static constexpr bool nonstrided = tagged::same_tag< typename SPI::height_tag, typename SPO::height_tag>
1207 && tagged::same_tag< typename SPI::width_tag, typename SPO::width_tag>;
1209 using layer_c = std::conditional_t< nonstrided,
1210 dcnnsol::nonstrided_conv_layer< SPI, SPO, KSP, permutation_policy>,
1211 dcnnsol::strided_conv_layer< SPI, SPO, KSP, permutation_policy>>;
1212 using layer_b = dcnnsol::image_shift_layer< SPO, permutation_policy>;
1213 using layer_n = dcnnsol::image_normalize_layer< SPO, permutation_policy>;
1214 using layer_m = dcnnsol::image_multiply_layer< SPO, permutation_policy>;
1215 using layer_s = dcnnsol::image_shift_layer< SPO, permutation_policy>;
1216 using layer_r = dcnnsol::image_relu_layer< SPO, permutation_policy>;
1218 using internal_data = complete_cnn_internal< SPI, SPO, permutation_policy>;
1220 using input_data = dcnnsol::image_data< SPI, permutation_policy>;
1221 using model = complete_cnn_model< CSPI, CSPO, KSP, permutation_policy>;
1222 using output_data = dcnnsol::image_data< SPO, permutation_policy>;
1224 static void load_model(model& md,
const std::filesystem::path& data_folder,
int feature_number)
1226 auto conv_name =
"features." + std::to_string(feature_number);
1227 auto norm_name =
"features." + std::to_string(feature_number + 1);
1229 layer_c::load_model(md.c, data_folder, conv_name +
".weight");
1230 layer_b::load_model(md.b, data_folder, conv_name +
".bias");
1231 layer_n::load_model(md.n, data_folder, norm_name +
".running_mean", norm_name +
".running_var");
1232 layer_m::load_model(md.m, data_folder, norm_name +
".weight");
1233 layer_s::load_model(md.s, data_folder, norm_name +
".bias");
1236 static void forward(
const input_data& ind,
const model& md, internal_data& td, output_data& outd)
1238 layer_c::forward(ind, md.c, td.c);
1239 layer_b::forward(td.c, md.b, td.b);
1240 layer_n::forward(td.b, md.n, td.n);
1241 layer_m::forward(td.n, md.m, td.m);
1242 layer_s::forward(td.m, md.s, td.s);
1243 layer_r::forward(td.s, outd);
1247 static std::size_t forward_complexity(
const batch_range& br)
1250 s += layer_c::forward_complexity(br);
1251 s += layer_b::forward_complexity(br);
1252 s += layer_n::forward_complexity(br);
1253 s += layer_m::forward_complexity(br);
1254 s += layer_s::forward_complexity(br);
1255 s += layer_r::forward_complexity(br);
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:146
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:128
policy::weights_t weights
Convolution or Aggregate layer weights.
Definition dcnnsol.hpp:167
policy::values_t values
Activation signals for all images in a minibatch.
Definition dcnnsol.hpp:108
A tensor - a multi-dimensional tagged generalization of vector/matrix.
Definition tagged.hpp:1365
tagged::range_class< batch_tag > batch_range
The range of images within a minibatch.
Definition dcnnelements.hpp:83
retag< typename impl::co_traits< selector< T > >::co, T > co
Provide a co-tag for a given tag.
Definition tagged.hpp:1645
Tag: Channel dimension.
Definition dcnnelements.hpp:149
Policy class: Model weight data types for convolutional layers.
Definition dcnnelements.hpp:786
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:811
Definition dcnnelements.hpp:1566
Utility base class for the fully connected layer.
Definition dcnnelements.hpp:1962
dcnnsol::feature_weights< CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1974
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:2002
static constexpr auto cor
Output feature channel range.
Definition dcnnelements.hpp:1998
dcnnsol::feature_data< CSPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1970
static constexpr auto cir
Input feature channel range.
Definition dcnnelements.hpp:1997
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:2014
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1978
Final layer activation data policy.
Definition dcnnelements.hpp:418
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:424
tagged::permute_tensor_class< typename PP::feature_data, float, channel_tag, batch_tag > values_t
2-dimensional tensor type carrying activations
Definition dcnnelements.hpp:431
Definition dcnnelements.hpp:1453
Definition dcnnelements.hpp:2047
Policy class: Model weight data types for fully connected layers.
Definition dcnnelements.hpp:824
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:847
Definition dcnnelements.hpp:1825
static constexpr auto cr
Input image channel range.
Definition dcnnelements.hpp:1862
dcnnsol::feature_data< CSPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1841
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:1878
typename SPI::width_tag width_in_tag
Input image width.
Definition dcnnelements.hpp:1849
typename SPI::height_tag height_in_tag
Input image height.
Definition dcnnelements.hpp:1848
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1860
typename SPI::channel_tag channel_tag
Input image channel.
Definition dcnnelements.hpp:1850
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1861
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1837
Utility base class for the first normalizing layer.
Definition dcnnelements.hpp:588
static tagged::range_class< batch_tag > forward_check(const input_data &ind, stat_data &cd, output_data &outd)
Argument compatibility check for the forward function.
Definition dcnnelements.hpp:626
static constexpr auto hr
Index range along image height.
Definition dcnnelements.hpp:621
dcnnsol::image_data< SP, PP > output_data
Output activations.
Definition dcnnelements.hpp:604
static constexpr auto cr
Output channel index range [0,1)
Definition dcnnelements.hpp:623
first_stat stat_data
Statistics.
Definition dcnnelements.hpp:600
static constexpr auto wr
Index range along image width.
Definition dcnnelements.hpp:622
batch_data< ISP, CSP > input_data
Input activations.
Definition dcnnelements.hpp:596
Internal layer activation data policy.
Definition dcnnelements.hpp:369
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:401
static constexpr auto cr
Channel index range, statically sized.
Definition dcnnelements.hpp:394
static constexpr auto hr
Image height range, statically sized.
Definition dcnnelements.hpp:386
static constexpr auto wr
Image width range, statically sized.
Definition dcnnelements.hpp:390
Definition dcnnelements.hpp:1755
Utility base class for the image multiply layer.
Definition dcnnelements.hpp:1474
dcnnsol::image_data< SP, PP > output_data
Output activations.
Definition dcnnelements.hpp:1491
static constexpr auto hr
Image height range.
Definition dcnnelements.hpp:1508
static constexpr auto wr
Image width range.
Definition dcnnelements.hpp:1509
dcnnsol::feature_multiplier< CSP, PP > multiplier_data
Model multiplieres.
Definition dcnnelements.hpp:1487
dcnnsol::image_data< SP, PP > input_data
Input activations.
Definition dcnnelements.hpp:1483
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const multiplier_data &cd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1524
static constexpr auto cr
Image channel range.
Definition dcnnelements.hpp:1510
Utility base class for a normalizing layer.
Definition dcnnelements.hpp:1373
image_normalize_model< CSP > norm_data
Statistics.
Definition dcnnelements.hpp:1384
static constexpr auto cr
Index range along image width.
Definition dcnnelements.hpp:1405
static constexpr auto hr
Index range along image height.
Definition dcnnelements.hpp:1403
dcnnsol::image_data< SP, PP > output_data
Output activations.
Definition dcnnelements.hpp:1388
typename SP::channel_tag channel_tag
Tag: Channel index.
Definition dcnnelements.hpp:1401
dcnnsol::image_data< SP, PP > input_data
Input activations.
Definition dcnnelements.hpp:1380
static constexpr auto wr
Index range along image width.
Definition dcnnelements.hpp:1404
Definition dcnnelements.hpp:1674
Utility base class for the image shift layer.
Definition dcnnelements.hpp:1587
static constexpr auto hr
Image height range.
Definition dcnnelements.hpp:1622
dcnnsol::image_data< SP, PP > output_data
Output activations.
Definition dcnnelements.hpp:1605
static constexpr auto cr
Image channel range.
Definition dcnnelements.hpp:1624
static tagged::range_class< batch_tag > forward_check(const input_data &ind, const bias_data &cd, output_data &outd)
Check argument compatibility for the forward function.
Definition dcnnelements.hpp:1638
static constexpr auto wr
Image width range.
Definition dcnnelements.hpp:1623
dcnnsol::feature_bias< CSP, PP > bias_data
Model biases.
Definition dcnnelements.hpp:1601
dcnnsol::image_data< SP, PP > input_data
Input activations.
Definition dcnnelements.hpp:1597
Definition dcnnelements.hpp:2089
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:998
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:1093
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:1087
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1009
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:1052
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1045
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1046
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:1100
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:1098
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:1047
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:1048
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1017
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:1114
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:1097
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:1090
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:1094
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:1099
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:1088
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:1049
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:1095
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1056
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1013
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:1089
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:1050
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:1092
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:1051
Utility base class for the convolutional layer.
Definition dcnnelements.hpp:1162
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:1269
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:1288
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:1262
dcnnsol::image_data< SPI, PP > input_data
Input activations.
Definition dcnnelements.hpp:1173
static constexpr auto wor
Output image width range.
Definition dcnnelements.hpp:1212
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:1264
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:1272
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:1273
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:1266
static constexpr auto hor
Output image height range.
Definition dcnnelements.hpp:1211
dcnnsol::image_data< SPO, PP > output_data
Output activations.
Definition dcnnelements.hpp:1181
static constexpr auto wir
Input image width range.
Definition dcnnelements.hpp:1207
static constexpr auto hir
Input image height range.
Definition dcnnelements.hpp:1206
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:1271
static constexpr auto kwr
Kernel width range.
Definition dcnnelements.hpp:1210
static constexpr auto khr
Kernel height range.
Definition dcnnelements.hpp:1209
static constexpr auto cor
Output image channel range.
Definition dcnnelements.hpp:1213
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:1274
static constexpr auto cir
Input image channel range.
Definition dcnnelements.hpp:1208
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:1268
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:1261
dcnnsol::conv_weights< KSP, CSPI, CSPO, PP > weights
Model weights.
Definition dcnnelements.hpp:1177
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:1267
static constexpr std::size_t fanin
Number of inputs for each output element.
Definition dcnnelements.hpp:1217
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:1263
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of an aggregate layer.
Definition dcnnsol.hpp:1012
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:1075
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:936
static void forward(const input_data &ind, stat_data &cd, output_data &outd)
The forward-propagation function of the first Normalizing layer.
Definition dcnnsol.hpp:243
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a MaxPool layer.
Definition dcnnsol.hpp:850
static void forward(const input_data &ind, const multiplier_data &cd, output_data &outd)
The forward-propagation function of a linear layer.
Definition dcnnsol.hpp:661
static void forward(const input_data &ind, const norm_data &nd, output_data &outd)
The forward-propagation function of a normalizing layer.
Definition dcnnsol.hpp:588
static void forward(const input_data &ind, output_data &outd)
The forward-propagation function of a ReLU layer.
Definition dcnnsol.hpp:782
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:726
static void forward(const input_data &ind, const gold_data &gd, output_data &outd)
The forward-propagation function of the loss layer.
Definition dcnnsol.hpp:1120
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:356
Policy class defining the layout of all major data.
Definition dcnnsol.hpp:55
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:74
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:65
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:60
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:70
static void forward(const input_data &ind, const weights &wtd, output_data &outd)
The forward-propagation function of a convolutional layer.
Definition dcnnsol.hpp:479
A wrapped list of tags.
Definition tagged.hpp:182